X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=module%2Fzfs%2Fzpl_xattr.c;fp=module%2Fzfs%2Fzpl_xattr.c;h=a7e38e6a2de05f1104761862254bf25eb30c4919;hb=f706421173c571371afff5e2a2ee0784c5e3f95d;hp=c03764fc507fdb8a328ebad5bb4d657312a5e95e;hpb=254255f735c4187f00df6d230b80cae508308f31;p=zfs.git diff --git a/module/zfs/zpl_xattr.c b/module/zfs/zpl_xattr.c index c03764f..a7e38e6 100644 --- 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; } + 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) @@ -263,9 +268,12 @@ zpl_xattr_get_sa(struct inode *ip, const char *name, void *value, size_t size) if (!size) return (nv_size); - memcpy(value, nv_value, MIN(size, nv_size)); + if (size < nv_size) + return (-ERANGE); + + memcpy(value, nv_value, nv_size); - return (MIN(size, nv_size)); + return (nv_size); } static int