[PATCH OLK-6.6] selinux: reject a permission value exceeding the class permission count
From: Bryam Vargas <hexlabsecurity@proton.me> mainline inclusion from mainline-v7.2-rc7 commit d14b5d0e97fccd27974fedc03b903408872907fd category: bugfix bugzilla: https://atomgit.com/src-openeuler/kernel/issues/18602 CVE: CVE-2026-80755 Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?i... -------------------------------- perm_read() bounds a permission value by SEL_VEC_MAX but never by the nprim of the owning class or common, which is taken verbatim from the policy image. security_get_permissions() then writes perms[value - 1] into an nprim-sized kcalloc() array, so a class declaring fewer permissions than its largest permission value drives an out-of-bounds heap write. The top-level symbol tables are validated this way; the nested per-class permission table is not. Reject a permission whose value exceeds nprim, which is already set when perm_read() runs. Well-formed policies are unaffected. Cc: stable@vger.kernel.org Fixes: 55fcf09b3fe4 ("selinux: add support for querying object classes and permissions from the running policy") Signed-off-by: Bryam Vargas <hexlabsecurity@proton.me> Acked-by: Stephen Smalley <stephen.smalley.work@gmail.com> [PM: tweak comment for line length] Signed-off-by: Paul Moore <paul@paul-moore.com> Conflicts: security/selinux/ss/policydb.c [Add rc = -ENVAL to init rc before goto bad;] Signed-off-by: Cai Xinchen <caixinchen1@huawei.com> --- security/selinux/ss/policydb.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/security/selinux/ss/policydb.c b/security/selinux/ss/policydb.c index f70399373588..d58c9b77505a 100644 --- a/security/selinux/ss/policydb.c +++ b/security/selinux/ss/policydb.c @@ -1109,6 +1109,11 @@ static int perm_read(struct policydb *p, struct symtab *s, void *fp) len = le32_to_cpu(buf[0]); perdatum->value = le32_to_cpu(buf[1]); + rc = -EINVAL; + /* indexes an nprim-sized array in security_get_permissions() */ + if (perdatum->value > s->nprim) + goto bad; + rc = str_read(&key, GFP_KERNEL, fp, len); if (rc) goto bad; -- 2.18.0.huawei.25
反馈: 您发送到kernel@openeuler.org的补丁/补丁集,已成功转换为PR! PR链接地址: https://atomgit.com/openeuler/kernel/merge_requests/27246 邮件列表地址:https://mailweb.openeuler.org/archives/list/kernel@openeuler.org/message/AZC... FeedBack: The patch(es) which you have sent to kernel@openeuler.org mailing list has been converted to a pull request successfully! Pull request link: https://atomgit.com/openeuler/kernel/merge_requests/27246 Mailing list address: https://mailweb.openeuler.org/archives/list/kernel@openeuler.org/message/AZC...
participants (2)
-
Cai Xinchen -
patchwork bot