From: Passion,Zhao Date: Mon, 3 Jun 2013 03:42:24 +0000 (+0800) Subject: Smack: Fix the bug smackcipso can't set CIPSO correctly X-Git-Tag: firefly_0821_release~176^2~5790^2~6^2 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0fcfee61d63b82c1eefb5b1a914240480f17d63f;p=firefly-linux-kernel-4.4.55.git Smack: Fix the bug smackcipso can't set CIPSO correctly Bug report: https://tizendev.org/bugs/browse/TDIS-3891 The reason is userspace libsmack only use "smackfs/cipso2" long-label interface, but the code's logical is still for orginal fixed length label. Now update smack_cipso_apply() to support flexible label (<=256 including tailing '\0') There is also a bug in kernel/security/smack/smackfs.c: When smk_set_cipso() parsing the CIPSO setting from userspace, the offset of CIPSO level should be "strlen(label)+1" instead of "strlen(label)" Signed-off-by: Passion,Zhao --- diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c index 3c79cba5fa4a..ab167037b2dd 100644 --- a/security/smack/smackfs.c +++ b/security/smack/smackfs.c @@ -881,7 +881,7 @@ static ssize_t smk_set_cipso(struct file *file, const char __user *buf, if (format == SMK_FIXED24_FMT) rule += SMK_LABELLEN; else - rule += strlen(skp->smk_known); + rule += strlen(skp->smk_known) + 1; ret = sscanf(rule, "%d", &maplevel); if (ret != 1 || maplevel > SMACK_CIPSO_MAXLEVEL)