{"id":21683,"date":"2026-09-12T04:31:31","date_gmt":"2026-09-11T20:31:31","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89761"},"modified":"2026-09-12T04:31:31","modified_gmt":"2026-09-11T20:31:31","slug":"cve-2026-89761","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89761","title":{"rendered":"CVE-2026-89761 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\napparmor: fix out-of-"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>apparmor: fix out-of-bounds write when null terminating a label vec<\/p>\n<p>aa_vec_unique() null terminates at vec[n &#8211; dups] when VEC_FLAG_TERMINATE<br \/>\nis passed. If the components are all distinct no duplicates are dropped,<br \/>\ndups is 0 and the terminator goes to vec[n], so the caller has to provide<br \/>\nroom for n + 1 entries.<\/p>\n<p>aa_label_strn_parse() sets up its vector with vec_setup(profile, vec, len,<br \/>\ngfp) and then calls aa_vec_unique(vec, len, VEC_FLAG_TERMINATE), but<br \/>\nvec_setup() does not reserve the terminator entry. Up to LOCAL_VEC_ENTRIES<br \/>\nit uses the local array of LOCAL_VEC_ENTRIES pointers, above that it<br \/>\nallocates exactly len pointers. The terminator therefore lands one entry<br \/>\npast the end of the local array when len is LOCAL_VEC_ENTRIES, and one<br \/>\nentry past the end of the allocation when len is larger.<\/p>\n<p>len comes from the number of &#8220;\/\/&amp;&#8221; separated components in the label name<br \/>\nand label_count_strn_entries() does not bound it. An unprivileged task<br \/>\nreaches the parse by writing to \/proc\/self\/attr\/apparmor\/current or through<br \/>\nlsm_set_self_attr(2), both of which go through do_setattr(), and the name<br \/>\nis parsed before the change_profile permission is checked.<br \/>\nThe query_label() path behind the securityfs .access file, which is<br \/>\nmode 0666, performs no permission check at all. Every component has to<br \/>\nresolve to a loaded profile, so a system with policy loaded is required.<\/p>\n<p>The other two VEC_FLAG_TERMINATE users work on a label vec that<br \/>\naa_label_alloc() has already sized with &#8220;+ 1 for null terminator entry on<br \/>\nvec&#8221;. Reserve the same entry in vec_setup() and DEFINE_VEC(). Passing<br \/>\nlen + 1 from the caller instead would move len == LOCAL_VEC_ENTRIES out of<br \/>\nthe local array and into kzalloc().<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>apparmor: fix out-of-bounds write when null terminating a label vec<\/p>\n<p>aa_vec_unique() null terminates at vec[n &#8211; dups] when VEC_FLAG<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21683","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21683","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=21683"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21683"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21683"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}