]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/xattr.c
[PATCH] NTP shift_right cleanup
[linux-2.6-omap-h63xx.git] / fs / xattr.c
index dc8bc7624f26be341900d900340cb0e7bcb6ce60..f6e00c0e114f6225d1f7af66517dd537aa0724bf 100644 (file)
@@ -143,7 +143,7 @@ getxattr(struct dentry *d, char __user *name, void __user *value, size_t size)
        if (size) {
                if (size > XATTR_SIZE_MAX)
                        size = XATTR_SIZE_MAX;
-               kvalue = kmalloc(size, GFP_KERNEL);
+               kvalue = kzalloc(size, GFP_KERNEL);
                if (!kvalue)
                        return -ENOMEM;
        }
@@ -154,11 +154,15 @@ getxattr(struct dentry *d, char __user *name, void __user *value, size_t size)
        error = -EOPNOTSUPP;
        if (d->d_inode->i_op && d->d_inode->i_op->getxattr)
                error = d->d_inode->i_op->getxattr(d, kname, kvalue, size);
-       else if (!strncmp(kname, XATTR_SECURITY_PREFIX,
-                         sizeof XATTR_SECURITY_PREFIX - 1)) {
+
+       if (!strncmp(kname, XATTR_SECURITY_PREFIX,
+                    sizeof XATTR_SECURITY_PREFIX - 1)) {
                const char *suffix = kname + sizeof XATTR_SECURITY_PREFIX - 1;
-               error = security_inode_getsecurity(d->d_inode, suffix, kvalue,
-                                                  size);
+               int rv = security_inode_getsecurity(d->d_inode, suffix, kvalue,
+                                                   size, error);
+               /* Security module active: overwrite error value */
+               if (rv != -EOPNOTSUPP)
+                       error = rv;
        }
        if (error > 0) {
                if (size && copy_to_user(value, kvalue, error))
@@ -325,6 +329,8 @@ removexattr(struct dentry *d, char __user *name)
                down(&d->d_inode->i_sem);
                error = d->d_inode->i_op->removexattr(d, kname);
                up(&d->d_inode->i_sem);
+               if (!error)
+                       fsnotify_xattr(d);
        }
 out:
        return error;