git://git.camperquake.de
/
zfs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Make spl directory setable when building rpms and add --buildroot
[zfs.git]
/
module
/
zfs
/
zpl_xattr.c
diff --git
a/module/zfs/zpl_xattr.c
b/module/zfs/zpl_xattr.c
index
51c81ed
..
eb2c00d
100644
(file)
--- a/
module/zfs/zpl_xattr.c
+++ b/
module/zfs/zpl_xattr.c
@@
-225,6
+225,11
@@
zpl_xattr_get_dir(struct inode *ip, const char *name, void *value,
goto out;
}
goto out;
}
+ if (size < i_size_read(xip)) {
+ error = -ERANGE;
+ goto out;
+ }
+
error = zpl_read_common(xip, value, size, 0, UIO_SYSSPACE, 0, cr);
out:
if (xip)
error = zpl_read_common(xip, value, size, 0, UIO_SYSSPACE, 0, cr);
out:
if (xip)
@@
-263,9
+268,12
@@
zpl_xattr_get_sa(struct inode *ip, const char *name, void *value, size_t size)
if (!size)
return (nv_size);
if (!size)
return (nv_size);
- memcpy(value, nv_value, MIN(size, nv_size));
+ if (size < nv_size)
+ return (-ERANGE);
- return (MIN(size, nv_size));
+ memcpy(value, nv_value, nv_size);
+
+ return (nv_size);
}
static int
}
static int
@@
-280,7
+288,7
@@
__zpl_xattr_get(struct inode *ip, const char *name, void *value, size_t size,
if (zsb->z_use_sa && zp->z_is_sa) {
error = zpl_xattr_get_sa(ip, name, value, size);
if (zsb->z_use_sa && zp->z_is_sa) {
error = zpl_xattr_get_sa(ip, name, value, size);
- if (error
>= 0
)
+ if (error
!= -ENOENT
)
goto out;
}
goto out;
}
@@
-622,7
+630,7
@@
__zpl_xattr_security_init(struct inode *ip, const struct xattr *xattrs,
break;
}
break;
}
-
return (error);
+ return (error);
}
int
}
int
@@
-638,26
+646,25
@@
int
zpl_xattr_security_init(struct inode *ip, struct inode *dip,
const struct qstr *qstr)
{
zpl_xattr_security_init(struct inode *ip, struct inode *dip,
const struct qstr *qstr)
{
- int error;
- size_t len;
- void *value;
- char *name;
-
- error = zpl_security_inode_init_security(ip, dip, qstr,
- &name, &value, &len);
- if (error) {
- if (error == -EOPNOTSUPP)
- return 0;
+ int error;
+ size_t len;
+ void *value;
+ char *name;
- return (error);
- }
+ error = zpl_security_inode_init_security(ip, dip, qstr,
+ &name, &value, &len);
+ if (error) {
+ if (error == -EOPNOTSUPP)
+ return 0;
+ return (error);
+ }
error = __zpl_xattr_security_set(ip, name, value, len, 0);
error = __zpl_xattr_security_set(ip, name, value, len, 0);
-
kfree(name);
-
kfree(value);
+ kfree(name);
+ kfree(value);
-
return (error);
+ return (error);
}
#endif /* HAVE_CALLBACK_SECURITY_INODE_INIT_SECURITY */
}
#endif /* HAVE_CALLBACK_SECURITY_INODE_INIT_SECURITY */
@@
-673,6
+680,7
@@
xattr_handler_t *zpl_xattr_handlers[] = {
&zpl_xattr_user_handler,
#ifdef HAVE_POSIX_ACLS
&zpl_xattr_acl_access_handler,
&zpl_xattr_user_handler,
#ifdef HAVE_POSIX_ACLS
&zpl_xattr_acl_access_handler,
-
&zpl_xattr_acl_default_handler,
+ &zpl_xattr_acl_default_handler,
#endif /* HAVE_POSIX_ACLS */
#endif /* HAVE_POSIX_ACLS */
+ NULL
};
};