{"id":21571,"date":"2026-09-12T04:31:22","date_gmt":"2026-09-11T20:31:22","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89649"},"modified":"2026-09-12T04:31:22","modified_gmt":"2026-09-11T20:31:22","slug":"cve-2026-89649","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89649","title":{"rendered":"CVE-2026-89649 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nceph: bound xattr val"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ceph: bound xattr value length in __build_xattrs()<\/p>\n<p>__build_xattrs() decodes the MDS-supplied xattr blob one attribute at a<br \/>\ntime. For each attribute it reads a 32-bit name length, advances past the<br \/>\nname bytes, reads a 32-bit value length, records the value pointer, and<br \/>\nadvances past the value bytes. The two length fields are read with<br \/>\nceph_decode_32_safe(), but the value bytes themselves are advanced over<br \/>\nwith a bare &#8220;p += len&#8221; and no ceph_decode_need() check that &#8220;len&#8221; bytes<br \/>\nremain in the blob.<\/p>\n<p>For every attribute except the last, the next iteration&#8217;s<br \/>\nceph_decode_32_safe() on the following name length implicitly verifies<br \/>\nthat the previous value did not run past the blob end. The final<br \/>\nattribute has no successor, so its decoded value length is never checked<br \/>\nagainst the blob bounds. A malicious or compromised metadata server can<br \/>\nset the last attribute&#8217;s value length larger than the bytes actually<br \/>\npresent in the blob.<\/p>\n<p>The blob is a dedicated kvmalloc() allocation sized to the wire length<br \/>\n(ceph_buffer_new() in ceph_fill_inode()). __set_xattr() records the<br \/>\noversized length in xattr-&gt;val_len verbatim, and a later getxattr(2) runs<br \/>\nmemcpy(value, xattr-&gt;val, xattr-&gt;val_len) into a user-supplied buffer,<br \/>\ncopying bytes past the end of the allocation back to user space.<\/p>\n<p>Impact: a malicious metadata server discloses adjacent kernel heap bytes<br \/>\nto a local user via getxattr(2) on a CephFS file. Add the missing<br \/>\nceph_decode_need() so an out-of-bounds value length on the final<br \/>\nattribute fails the decode and returns -EIO instead of being stored.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ceph: bound xattr value length in __build_xattrs()<\/p>\n<p>__build_xattrs() decodes the MDS-supplied xattr blob one attribute at a<br \/>\ntime. F<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21571","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21571","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=21571"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21571"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21571"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}