Skip to content

Commit

Permalink
Correctly return ERANGE in getxattr(2)
Browse files Browse the repository at this point in the history
According to the getxattr(2) man page the ERANGE errno should be
returned when the size of the value buffer is to small to hold the
result.  Prior to this patch the implementation would just truncate
the value to size bytes.

Signed-off-by: Brian Behlendorf <[email protected]>
Closes #1408
  • Loading branch information
behlendorf committed Apr 24, 2013
1 parent 254255f commit f706421
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions module/zfs/zpl_xattr.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit f706421

Please sign in to comment.