]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
security/smack: fix oops when setting a size 0 SMACK64 xattr
authorEtienne Basset <etienne.basset@numericable.fr>
Tue, 31 Mar 2009 21:54:11 +0000 (23:54 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sat, 2 May 2009 17:23:55 +0000 (10:23 -0700)
upstream commit: 4303154e86597885bc3cbc178a48ccbc8213875f

this patch fix an oops in smack when setting a size 0 SMACK64 xattr eg
attr -S -s SMACK64  -V '' somefile
This oops because smk_import_entry treats a 0 length as SMK_MAXLEN

Signed-off-by: Etienne Basset <etienne.basset@numericable.fr>
Reviewed-by: James Morris <jmorris@namei.org>
Acked-by: Casey Schaufler <casey@schaufler-ca.com>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
security/smack/smack_lsm.c

index 87d75417ea937e7756678fd381c3cb96c9d1c7a5..b80292354d045b8717783de9524e58e49688e412 100644 (file)
@@ -604,6 +604,8 @@ static int smack_inode_setxattr(struct dentry *dentry, const char *name,
            strcmp(name, XATTR_NAME_SMACKIPOUT) == 0) {
                if (!capable(CAP_MAC_ADMIN))
                        rc = -EPERM;
+               if (size == 0)
+                       rc = -EINVAL;
        } else
                rc = cap_inode_setxattr(dentry, name, value, size, flags);
 
@@ -1360,7 +1362,7 @@ static int smack_inode_setsecurity(struct inode *inode, const char *name,
        struct socket *sock;
        int rc = 0;
 
-       if (value == NULL || size > SMK_LABELLEN)
+       if (value == NULL || size > SMK_LABELLEN || size == 0)
                return -EACCES;
 
        sp = smk_import(value, size);