diff options
Diffstat (limited to 'net/socket.c')
| -rw-r--r-- | net/socket.c | 15 | 
1 files changed, 9 insertions, 6 deletions
diff --git a/net/socket.c b/net/socket.c index 888cd618a968..c6c44e26e954 100644 --- a/net/socket.c +++ b/net/socket.c @@ -385,7 +385,7 @@ static const struct xattr_handler sockfs_xattr_handler = {  };  static int sockfs_security_xattr_set(const struct xattr_handler *handler, -				     struct user_namespace *mnt_userns, +				     struct mnt_idmap *idmap,  				     struct dentry *dentry, struct inode *inode,  				     const char *suffix, const void *value,  				     size_t size, int flags) @@ -589,10 +589,10 @@ static ssize_t sockfs_listxattr(struct dentry *dentry, char *buffer,  	return used;  } -static int sockfs_setattr(struct user_namespace *mnt_userns, +static int sockfs_setattr(struct mnt_idmap *idmap,  			  struct dentry *dentry, struct iattr *iattr)  { -	int err = simple_setattr(&init_user_ns, dentry, iattr); +	int err = simple_setattr(&nop_mnt_idmap, dentry, iattr);  	if (!err && (iattr->ia_valid & ATTR_UID)) {  		struct socket *sock = SOCKET_I(d_inode(dentry)); @@ -971,9 +971,12 @@ static inline void sock_recv_drops(struct msghdr *msg, struct sock *sk,  static void sock_recv_mark(struct msghdr *msg, struct sock *sk,  			   struct sk_buff *skb)  { -	if (sock_flag(sk, SOCK_RCVMARK) && skb) -		put_cmsg(msg, SOL_SOCKET, SO_MARK, sizeof(__u32), -			 &skb->mark); +	if (sock_flag(sk, SOCK_RCVMARK) && skb) { +		/* We must use a bounce buffer for CONFIG_HARDENED_USERCOPY=y */ +		__u32 mark = skb->mark; + +		put_cmsg(msg, SOL_SOCKET, SO_MARK, sizeof(__u32), &mark); +	}  }  void __sock_recv_cmsgs(struct msghdr *msg, struct sock *sk,  |