Patch "LSM: general protection fault in legacy_parse_param" has been added to the 5.15-stable tree

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

 



This is a note to let you know that I've just added the patch titled

    LSM: general protection fault in legacy_parse_param

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     lsm-general-protection-fault-in-legacy_parse_param.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit cd80b545ea3fa59bdd2de06502afee9ca58c6fa6
Author: Casey Schaufler <casey@xxxxxxxxxxxxxxxx>
Date:   Thu Jan 27 04:51:00 2022 +0000

    LSM: general protection fault in legacy_parse_param
    
    [ Upstream commit ecff30575b5ad0eda149aadad247b7f75411fd47 ]
    
    The usual LSM hook "bail on fail" scheme doesn't work for cases where
    a security module may return an error code indicating that it does not
    recognize an input.  In this particular case Smack sees a mount option
    that it recognizes, and returns 0. A call to a BPF hook follows, which
    returns -ENOPARAM, which confuses the caller because Smack has processed
    its data.
    
    The SELinux hook incorrectly returns 1 on success. There was a time
    when this was correct, however the current expectation is that it
    return 0 on success. This is repaired.
    
    Reported-by: syzbot+d1e3b1d92d25abf97943@xxxxxxxxxxxxxxxxxxxxxxxxx
    Signed-off-by: Casey Schaufler <casey@xxxxxxxxxxxxxxxx>
    Acked-by: James Morris <jamorris@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Paul Moore <paul@xxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/security/security.c b/security/security.c
index 67264cb08fb3..da631339e969 100644
--- a/security/security.c
+++ b/security/security.c
@@ -884,9 +884,22 @@ int security_fs_context_dup(struct fs_context *fc, struct fs_context *src_fc)
 	return call_int_hook(fs_context_dup, 0, fc, src_fc);
 }
 
-int security_fs_context_parse_param(struct fs_context *fc, struct fs_parameter *param)
+int security_fs_context_parse_param(struct fs_context *fc,
+				    struct fs_parameter *param)
 {
-	return call_int_hook(fs_context_parse_param, -ENOPARAM, fc, param);
+	struct security_hook_list *hp;
+	int trc;
+	int rc = -ENOPARAM;
+
+	hlist_for_each_entry(hp, &security_hook_heads.fs_context_parse_param,
+			     list) {
+		trc = hp->hook.fs_context_parse_param(fc, param);
+		if (trc == 0)
+			rc = 0;
+		else if (trc != -ENOPARAM)
+			return trc;
+	}
+	return rc;
 }
 
 int security_sb_alloc(struct super_block *sb)
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index f3c8acf45ed9..9a89e456d378 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -2915,10 +2915,9 @@ static int selinux_fs_context_parse_param(struct fs_context *fc,
 		return opt;
 
 	rc = selinux_add_opt(opt, param->string, &fc->security);
-	if (!rc) {
+	if (!rc)
 		param->string = NULL;
-		rc = 1;
-	}
+
 	return rc;
 }
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux