|
@@ -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,
|