All of lore.kernel.org
 help / color / mirror / Atom feed
* security/selinux/hooks.c: FILE__ perms used as DIR__ perms
@ 2021-08-24 10:55 Topi Miettinen
  2021-08-24 12:47 ` Stephen Smalley
  0 siblings, 1 reply; 4+ messages in thread
From: Topi Miettinen @ 2021-08-24 10:55 UTC (permalink / raw)
  To: SElinux list

Hello,

Doing some post-processing of the SELinux policy (more about this some 
other time), I noticed that permissions for class "dir" could be 
tightened, for example "execmod" doesn't make a lot of sense for 
directories. Perhaps there are even more useless permissions? Let's grep 
for all use cases of permissions with DIR__ prefix:

$ git grep DIR__ -- :^drivers/ :^arch/
security/selinux/hooks.c:                         DIR__ADD_NAME | 
DIR__SEARCH,
security/selinux/hooks.c:       av = DIR__SEARCH;
security/selinux/hooks.c:       av |= (kind ? DIR__REMOVE_NAME : 
DIR__ADD_NAME);
security/selinux/hooks.c:               av = DIR__RMDIR;
security/selinux/hooks.c:                         DIR__REMOVE_NAME | 
DIR__SEARCH, &ad);
security/selinux/hooks.c: 
old_isec->sclass, DIR__REPARENT, &ad);
security/selinux/hooks.c:       av = DIR__ADD_NAME | DIR__SEARCH;
security/selinux/hooks.c:               av |= DIR__REMOVE_NAME;
security/selinux/hooks.c:                                 (new_is_dir ? 
DIR__RMDIR : FILE__UNLINK), &ad);
security/selinux/hooks.c:                       av |= DIR__SEARCH;
security/selinux/hooks.c:                       av |= DIR__WRITE;
security/selinux/hooks.c:                       av |= DIR__READ;

So, no instances of for example DIR__IOCTL or DIR__OPEN can be seen. But 
blindly removing all unreferenced DIR__ perms from policy is a big 
mistake, which I learned the hard way as the system didn't work normally 
anymore after installing such a filtered policy.

The reason for this is that in security/selinux/hooks.c, FILE__ perms 
are used sometimes as DIR__ perms and "git grep" won't find them. While 
semantically incorrect, the #defines for DIR__xyz are identical bitwise 
to corresponding FILE__xyz and so either works.

Perhaps the situation could be improved:

1. Add a comment to security/selinux/hooks.c to alert readers that 
FILE__ perms are sometimes used in place of DIR__ perms and why this is 
in fact OK.

2. Add static asserts to verify the hard way that each DIR__abc #define 
matches the corresponding FILE__abc #define. If one day this would no 
longer be the case, the compiler would warn.

3. Add a new unified set of #defines, for example COMMON_INODE__xyz, to 
document that the same perms are used for both files and directories.

4. Replace the semantically incorrect uses of FILE__ with something more 
complex (but technically useless) like
if (S_ISDIR(xyz)
	av = DIR__abc
else
	av = FILE__abc
and since the values are identical bitwise, compilers could be expected 
to eliminate the useless checks and branches.

Would patches be acceptable along some of these ideas?

Maybe the unused permissions could be even removed entirely with lots of 
work and perhaps no real benefit.

-Topi

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-08-24 19:00 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-24 10:55 security/selinux/hooks.c: FILE__ perms used as DIR__ perms Topi Miettinen
2021-08-24 12:47 ` Stephen Smalley
2021-08-24 16:00   ` Topi Miettinen
2021-08-24 19:00     ` Stephen Smalley

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.