if (flags & ~(XATTR_CREATE|XATTR_REPLACE))
return -EINVAL;
- if (copy_from_user(kname, name, XATTR_NAME_MAX))
- return -EFAULT;
- kname[XATTR_NAME_MAX] = '\0';
+ error = strncpy_from_user(kname, name, sizeof(kname));
+ if (error == 0 || error == sizeof(kname))
+ error = -ERANGE;
+ if (error < 0)
+ return error;
kvalue = xattr_alloc(size, XATTR_SIZE_MAX);
if (IS_ERR(kvalue))
void *kvalue;
char kname[XATTR_NAME_MAX + 1];
- if (copy_from_user(kname, name, XATTR_NAME_MAX))
- return -EFAULT;
- kname[XATTR_NAME_MAX] = '\0';
+ error = strncpy_from_user(kname, name, sizeof(kname));
+ if (error == 0 || error == sizeof(kname))
+ error = -ERANGE;
+ if (error < 0)
+ return error;
kvalue = xattr_alloc(size, XATTR_SIZE_MAX);
if (IS_ERR(kvalue))
int error;
char kname[XATTR_NAME_MAX + 1];
- if (copy_from_user(kname, name, XATTR_NAME_MAX))
- return -EFAULT;
- kname[XATTR_NAME_MAX] = '\0';
+ error = strncpy_from_user(kname, name, sizeof(kname));
+ if (error == 0 || error == sizeof(kname))
+ error = -ERANGE;
+ if (error < 0)
+ return error;
error = -EOPNOTSUPP;
if (d->d_inode->i_op && d->d_inode->i_op->removexattr) {