]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
selinux: reject a permission value exceeding the class permission count
authorBryam Vargas <hexlabsecurity@proton.me>
Tue, 28 Jul 2026 01:30:58 +0000 (20:30 -0500)
committerPaul Moore <paul@paul-moore.com>
Thu, 30 Jul 2026 20:14:50 +0000 (16:14 -0400)
commitd14b5d0e97fccd27974fedc03b903408872907fd
tree0129f28106ed7000f2449052c16e2dca3a957b19
parentf5098b6bae761e346ebcd9da7f95622c04733cff
selinux: reject a permission value exceeding the class permission count

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>
security/selinux/ss/policydb.c