[PATCH] lsm,nfs: fix NFS4 memory leak of lsm_context

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The NFS4 security label code does not support multiple labels, and
is intentionally unaware of which LSM is providing them. It is also
the case that currently only one LSM that use security contexts is
permitted to be active, as enforced by LSM_FLAG_EXCLUSIVE. Any LSM
that receives a release_secctx that is not explicitly designated as
for another LSM can safely carry out the release process. The NFS4
code identifies the lsm_context as LSM_ID_UNDEF, so allowing the
called LSM to perform the release is safe. Additional sophistication
will be required when context using LSMs are allowed to be used
together.

Fixes: b530104f50e8 ("lsm: lsm_context in security_dentry_init_security")
Signed-off-by: Casey Schaufler <casey@xxxxxxxxxxxxxxxx>
---
 security/apparmor/secid.c | 2 +-
 security/selinux/hooks.c  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/security/apparmor/secid.c b/security/apparmor/secid.c
index 28caf66b9033..db484c214cda 100644
--- a/security/apparmor/secid.c
+++ b/security/apparmor/secid.c
@@ -108,7 +108,7 @@ int apparmor_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid)
 
 void apparmor_release_secctx(struct lsm_context *cp)
 {
-	if (cp->id == LSM_ID_APPARMOR) {
+	if (cp->id == LSM_ID_APPARMOR || cp->id == LSM_ID_UNDEF) {
 		kfree(cp->context);
 		cp->context = NULL;
 		cp->id = LSM_ID_UNDEF;
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index 7b867dfec88b..b89d3438b3df 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -6673,7 +6673,7 @@ static int selinux_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid)
 
 static void selinux_release_secctx(struct lsm_context *cp)
 {
-	if (cp->id == LSM_ID_SELINUX) {
+	if (cp->id == LSM_ID_SELINUX || cp->id == LSM_ID_UNDEF) {
 		kfree(cp->context);
 		cp->context = NULL;
 		cp->id = LSM_ID_UNDEF;





[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux