From: Andreas Gruenbacher Date: Thu, 29 Sep 2016 15:48:34 +0000 (+0200) Subject: sockfs: getxattr: Fail with -EOPNOTSUPP for invalid attribute names X-Git-Tag: android-x86-7.1-r1~554^2~12 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=971df15bd54ad46e907046ff33750a137b2f0096;p=android-x86%2Fkernel.git sockfs: getxattr: Fail with -EOPNOTSUPP for invalid attribute names The standard return value for unsupported attribute names is -EOPNOTSUPP, as opposed to undefined but supported attributes (-ENODATA). Also, fail for attribute names like "system.sockprotonameXXX" and simplify the code a bit. Signed-off-by: Andreas Gruenbacher Signed-off-by: Al Viro --- diff --git a/net/socket.c b/net/socket.c index a1bd16106625..9b3dca699a3d 100644 --- a/net/socket.c +++ b/net/socket.c @@ -469,27 +469,15 @@ static struct socket *sockfd_lookup_light(int fd, int *err, int *fput_needed) static ssize_t sockfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name, void *value, size_t size) { - const char *proto_name; - size_t proto_size; - int error; - - error = -ENODATA; - if (!strncmp(name, XATTR_NAME_SOCKPROTONAME, XATTR_NAME_SOCKPROTONAME_LEN)) { - proto_name = dentry->d_name.name; - proto_size = strlen(proto_name); - + if (!strcmp(name, XATTR_NAME_SOCKPROTONAME)) { if (value) { - error = -ERANGE; - if (proto_size + 1 > size) - goto out; - - strncpy(value, proto_name, proto_size + 1); + if (dentry->d_name.len + 1 > size) + return -ERANGE; + memcpy(value, dentry->d_name.name, dentry->d_name.len + 1); } - error = proto_size + 1; + return dentry->d_name.len + 1; } - -out: - return error; + return -EOPNOTSUPP; } static ssize_t sockfs_listxattr(struct dentry *dentry, char *buffer,