mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 20:54:10 +08:00
debugfs: fix security_locked_down() call for SELinux
When (ia->ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID)) is zero, then the SELinux implementation of the locked_down hook might report a denial even though the operation would actually be allowed. To fix this, make sure that security_locked_down() is called only when the return value will be taken into account (i.e. when changing one of the problematic attributes). Note: this was introduced by commit5496197f9b
("debugfs: Restrict debugfs when the kernel is locked down"), but it didn't matter at that time, as the SELinux support came in later. Fixes:59438b4647
("security,lockdown,selinux: implement SELinux lockdown") Cc: stable <stable@vger.kernel.org> Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com> Link: https://lore.kernel.org/r/20210507125304.144394-1-omosnace@redhat.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
d07f6ca923
commit
5881fa8dc2
@ -45,10 +45,13 @@ static unsigned int debugfs_allow __ro_after_init = DEFAULT_DEBUGFS_ALLOW_BITS;
|
||||
static int debugfs_setattr(struct user_namespace *mnt_userns,
|
||||
struct dentry *dentry, struct iattr *ia)
|
||||
{
|
||||
int ret = security_locked_down(LOCKDOWN_DEBUGFS);
|
||||
int ret;
|
||||
|
||||
if (ret && (ia->ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID)))
|
||||
return ret;
|
||||
if (ia->ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID)) {
|
||||
ret = security_locked_down(LOCKDOWN_DEBUGFS);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
return simple_setattr(&init_user_ns, dentry, ia);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user