High · published April 3, 2024
In the Linux kernel, the following vulnerability has been resolved:
ceph: prevent use-after-free in encode_cap_msg()
In fs/ceph/caps.c, in encode_cap_msg(), "use after free" error was
caught by KASAN at this line - 'ceph_buffer_get(arg->xattr_buf);'. This
implies before the refcount could be increment here, it was freed.
In same file, in "handle_cap_grant()" refcount is decremented by this
line - 'ceph_buffer_put(ci->i_xattrs.blob);'. It appears that a race
occurred and resource was freed by the latter line before the former
line could increment it.
encode_cap_msg() is called by __send_cap() and __send_cap() is called by
ceph_check_caps() after calling __prep_cap(). __prep_cap() is where
arg->xattr_buf is assigned to ci->i_xattrs.blob. This is the spot where
the refcount must be increased to prevent "use after free" error.
| Product | Versions | Fixed in |
|---|---|---|
| linux/linux_kernel | < 5.10.210 | 5.10.210 |
| linux/linux_kernel | ≥ 5.11, < 5.15.149 | 5.15.149 |
| linux/linux_kernel | ≥ 5.16, < 6.1.79 | 6.1.79 |
| linux/linux_kernel | ≥ 6.2, < 6.6.18 | 6.6.18 |
| linux/linux_kernel | ≥ 6.7, < 6.7.6 | 6.7.6 |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| debian/debian_linux | all versions | — |