lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Mon, 20 Jun 2022 15:44:08 +0200
From:   Oliver Hartkopp <socketcan@...tkopp.net>
To:     Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        linux-kernel@...r.kernel.org
Cc:     stable@...r.kernel.org, kernel test robot <lkp@...el.com>,
        "David S. Miller" <davem@...emloft.net>,
        Sasha Levin <sashal@...nel.org>
Subject: Re: [PATCH 5.18 081/141] net: remove noblock parameter from
 skb_recv_datagram()

Hello Greg,

as already answered to Sascha:

---

Hello Sasha,

this patch is some kind of improvement/simplification to reduce and 
clean up the number of variables passed through skb_recv_datagram() call.

There is no functional change and therefore no need to backport this 
patch IMO.

The 'Reported-by:' tag just came from the kernel test robot when posting 
the original patch and getting direct feedback on some missing calling 
sites.

Best regards,
Oliver

On 6/20/22 14:50, Greg Kroah-Hartman wrote:
> From: Oliver Hartkopp <socketcan@...tkopp.net>
> 
> [ Upstream commit f4b41f062c424209e3939a81e6da022e049a45f2 ]
> 
> skb_recv_datagram() has two parameters 'flags' and 'noblock' that are
> merged inside skb_recv_datagram() by 'flags | (noblock ? MSG_DONTWAIT : 0)'
> 
> As 'flags' may contain MSG_DONTWAIT as value most callers split the 'flags'
> into 'flags' and 'noblock' with finally obsolete bit operations like this:
> 
> skb_recv_datagram(sk, flags & ~MSG_DONTWAIT, flags & MSG_DONTWAIT, &rc);
> 
> And this is not even done consistently with the 'flags' parameter.
> 
> This patch removes the obsolete and costly splitting into two parameters
> and only performs bit operations when really needed on the caller side.
> 
> One missing conversion thankfully reported by kernel test robot. I missed
> to enable kunit tests to build the mctp code.
> 
> Reported-by: kernel test robot <lkp@...el.com>
> Signed-off-by: Oliver Hartkopp <socketcan@...tkopp.net>
> Signed-off-by: David S. Miller <davem@...emloft.net>
> Signed-off-by: Sasha Levin <sashal@...nel.org>
> ---
>   drivers/isdn/mISDN/socket.c    | 2 +-
>   drivers/net/ppp/pppoe.c        | 3 +--
>   include/linux/skbuff.h         | 3 +--
>   net/appletalk/ddp.c            | 3 +--
>   net/atm/common.c               | 2 +-
>   net/ax25/af_ax25.c             | 3 +--
>   net/bluetooth/af_bluetooth.c   | 3 +--
>   net/bluetooth/hci_sock.c       | 3 +--
>   net/caif/caif_socket.c         | 2 +-
>   net/can/bcm.c                  | 5 +----
>   net/can/isotp.c                | 4 +---
>   net/can/j1939/socket.c         | 2 +-
>   net/can/raw.c                  | 6 +-----
>   net/core/datagram.c            | 5 ++---
>   net/ieee802154/socket.c        | 6 ++++--
>   net/ipv4/ping.c                | 3 ++-
>   net/ipv4/raw.c                 | 3 ++-
>   net/ipv6/raw.c                 | 3 ++-
>   net/iucv/af_iucv.c             | 3 +--
>   net/key/af_key.c               | 2 +-
>   net/l2tp/l2tp_ip.c             | 3 ++-
>   net/l2tp/l2tp_ip6.c            | 3 ++-
>   net/l2tp/l2tp_ppp.c            | 3 +--
>   net/mctp/af_mctp.c             | 2 +-
>   net/mctp/test/route-test.c     | 8 ++++----
>   net/netlink/af_netlink.c       | 3 +--
>   net/netrom/af_netrom.c         | 3 ++-
>   net/nfc/llcp_sock.c            | 3 +--
>   net/nfc/rawsock.c              | 3 +--
>   net/packet/af_packet.c         | 2 +-
>   net/phonet/datagram.c          | 3 ++-
>   net/phonet/pep.c               | 6 ++++--
>   net/qrtr/af_qrtr.c             | 3 +--
>   net/rose/af_rose.c             | 3 ++-
>   net/unix/af_unix.c             | 5 +++--
>   net/vmw_vsock/vmci_transport.c | 5 +----
>   net/x25/af_x25.c               | 3 +--
>   37 files changed, 57 insertions(+), 70 deletions(-)
> 
> diff --git a/drivers/isdn/mISDN/socket.c b/drivers/isdn/mISDN/socket.c
> index a6606736d8c5..2776ca5fc33f 100644
> --- a/drivers/isdn/mISDN/socket.c
> +++ b/drivers/isdn/mISDN/socket.c
> @@ -121,7 +121,7 @@ mISDN_sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
>   	if (sk->sk_state == MISDN_CLOSED)
>   		return 0;
>   
> -	skb = skb_recv_datagram(sk, flags, flags & MSG_DONTWAIT, &err);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb)
>   		return err;
>   
> diff --git a/drivers/net/ppp/pppoe.c b/drivers/net/ppp/pppoe.c
> index e172743948ed..ce2cbb5903d7 100644
> --- a/drivers/net/ppp/pppoe.c
> +++ b/drivers/net/ppp/pppoe.c
> @@ -1012,8 +1012,7 @@ static int pppoe_recvmsg(struct socket *sock, struct msghdr *m,
>   		goto end;
>   	}
>   
> -	skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
> -				flags & MSG_DONTWAIT, &error);
> +	skb = skb_recv_datagram(sk, flags, &error);
>   	if (error < 0)
>   		goto end;
>   
> diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
> index 3a30cae8b0a5..2394441fa3dd 100644
> --- a/include/linux/skbuff.h
> +++ b/include/linux/skbuff.h
> @@ -3836,8 +3836,7 @@ struct sk_buff *__skb_try_recv_datagram(struct sock *sk,
>   struct sk_buff *__skb_recv_datagram(struct sock *sk,
>   				    struct sk_buff_head *sk_queue,
>   				    unsigned int flags, int *off, int *err);
> -struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock,
> -				  int *err);
> +struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned int flags, int *err);
>   __poll_t datagram_poll(struct file *file, struct socket *sock,
>   			   struct poll_table_struct *wait);
>   int skb_copy_datagram_iter(const struct sk_buff *from, int offset,
> diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c
> index bf5736c1d458..a06f4d4a6f47 100644
> --- a/net/appletalk/ddp.c
> +++ b/net/appletalk/ddp.c
> @@ -1753,8 +1753,7 @@ static int atalk_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
>   	int err = 0;
>   	struct sk_buff *skb;
>   
> -	skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
> -						flags & MSG_DONTWAIT, &err);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	lock_sock(sk);
>   
>   	if (!skb)
> diff --git a/net/atm/common.c b/net/atm/common.c
> index 1cfa9bf1d187..d0c8ab7ff8f6 100644
> --- a/net/atm/common.c
> +++ b/net/atm/common.c
> @@ -540,7 +540,7 @@ int vcc_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
>   	    !test_bit(ATM_VF_READY, &vcc->flags))
>   		return 0;
>   
> -	skb = skb_recv_datagram(sk, flags, flags & MSG_DONTWAIT, &error);
> +	skb = skb_recv_datagram(sk, flags, &error);
>   	if (!skb)
>   		return error;
>   
> diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
> index 289f355e1853..95393bb2760b 100644
> --- a/net/ax25/af_ax25.c
> +++ b/net/ax25/af_ax25.c
> @@ -1676,8 +1676,7 @@ static int ax25_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
>   	}
>   
>   	/* Now we can treat all alike */
> -	skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
> -				flags & MSG_DONTWAIT, &err);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	if (skb == NULL)
>   		goto out;
>   
> diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c
> index a0cb2e3da8d4..62705734343b 100644
> --- a/net/bluetooth/af_bluetooth.c
> +++ b/net/bluetooth/af_bluetooth.c
> @@ -251,7 +251,6 @@ EXPORT_SYMBOL(bt_accept_dequeue);
>   int bt_sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
>   		    int flags)
>   {
> -	int noblock = flags & MSG_DONTWAIT;
>   	struct sock *sk = sock->sk;
>   	struct sk_buff *skb;
>   	size_t copied;
> @@ -263,7 +262,7 @@ int bt_sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
>   	if (flags & MSG_OOB)
>   		return -EOPNOTSUPP;
>   
> -	skb = skb_recv_datagram(sk, flags, noblock, &err);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb) {
>   		if (sk->sk_shutdown & RCV_SHUTDOWN)
>   			return 0;
> diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c
> index 33b3c0ffc339..189e3115c8c6 100644
> --- a/net/bluetooth/hci_sock.c
> +++ b/net/bluetooth/hci_sock.c
> @@ -1453,7 +1453,6 @@ static void hci_sock_cmsg(struct sock *sk, struct msghdr *msg,
>   static int hci_sock_recvmsg(struct socket *sock, struct msghdr *msg,
>   			    size_t len, int flags)
>   {
> -	int noblock = flags & MSG_DONTWAIT;
>   	struct sock *sk = sock->sk;
>   	struct sk_buff *skb;
>   	int copied, err;
> @@ -1470,7 +1469,7 @@ static int hci_sock_recvmsg(struct socket *sock, struct msghdr *msg,
>   	if (sk->sk_state == BT_CLOSED)
>   		return 0;
>   
> -	skb = skb_recv_datagram(sk, flags, noblock, &err);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb)
>   		return err;
>   
> diff --git a/net/caif/caif_socket.c b/net/caif/caif_socket.c
> index 2b8892d502f7..251e666ba9a2 100644
> --- a/net/caif/caif_socket.c
> +++ b/net/caif/caif_socket.c
> @@ -282,7 +282,7 @@ static int caif_seqpkt_recvmsg(struct socket *sock, struct msghdr *m,
>   	if (flags & MSG_OOB)
>   		goto read_error;
>   
> -	skb = skb_recv_datagram(sk, flags, 0 , &ret);
> +	skb = skb_recv_datagram(sk, flags, &ret);
>   	if (!skb)
>   		goto read_error;
>   	copylen = skb->len;
> diff --git a/net/can/bcm.c b/net/can/bcm.c
> index 95d209b52e6a..64c07e650bb4 100644
> --- a/net/can/bcm.c
> +++ b/net/can/bcm.c
> @@ -1632,12 +1632,9 @@ static int bcm_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
>   	struct sock *sk = sock->sk;
>   	struct sk_buff *skb;
>   	int error = 0;
> -	int noblock;
>   	int err;
>   
> -	noblock =  flags & MSG_DONTWAIT;
> -	flags   &= ~MSG_DONTWAIT;
> -	skb = skb_recv_datagram(sk, flags, noblock, &error);
> +	skb = skb_recv_datagram(sk, flags, &error);
>   	if (!skb)
>   		return error;
>   
> diff --git a/net/can/isotp.c b/net/can/isotp.c
> index 1e7c6a460ef9..35a1ae61744c 100644
> --- a/net/can/isotp.c
> +++ b/net/can/isotp.c
> @@ -1055,7 +1055,6 @@ static int isotp_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
>   	struct sock *sk = sock->sk;
>   	struct sk_buff *skb;
>   	struct isotp_sock *so = isotp_sk(sk);
> -	int noblock = flags & MSG_DONTWAIT;
>   	int ret = 0;
>   
>   	if (flags & ~(MSG_DONTWAIT | MSG_TRUNC | MSG_PEEK))
> @@ -1064,8 +1063,7 @@ static int isotp_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
>   	if (!so->bound)
>   		return -EADDRNOTAVAIL;
>   
> -	flags &= ~MSG_DONTWAIT;
> -	skb = skb_recv_datagram(sk, flags, noblock, &ret);
> +	skb = skb_recv_datagram(sk, flags, &ret);
>   	if (!skb)
>   		return ret;
>   
> diff --git a/net/can/j1939/socket.c b/net/can/j1939/socket.c
> index 6dff4510687a..0bb4fd3f6264 100644
> --- a/net/can/j1939/socket.c
> +++ b/net/can/j1939/socket.c
> @@ -802,7 +802,7 @@ static int j1939_sk_recvmsg(struct socket *sock, struct msghdr *msg,
>   		return sock_recv_errqueue(sock->sk, msg, size, SOL_CAN_J1939,
>   					  SCM_J1939_ERRQUEUE);
>   
> -	skb = skb_recv_datagram(sk, flags, 0, &ret);
> +	skb = skb_recv_datagram(sk, flags, &ret);
>   	if (!skb)
>   		return ret;
>   
> diff --git a/net/can/raw.c b/net/can/raw.c
> index 7105fa4824e4..0cf728dcff36 100644
> --- a/net/can/raw.c
> +++ b/net/can/raw.c
> @@ -846,16 +846,12 @@ static int raw_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
>   	struct sock *sk = sock->sk;
>   	struct sk_buff *skb;
>   	int err = 0;
> -	int noblock;
> -
> -	noblock = flags & MSG_DONTWAIT;
> -	flags &= ~MSG_DONTWAIT;
>   
>   	if (flags & MSG_ERRQUEUE)
>   		return sock_recv_errqueue(sk, msg, size,
>   					  SOL_CAN_RAW, SCM_CAN_RAW_ERRQUEUE);
>   
> -	skb = skb_recv_datagram(sk, flags, noblock, &err);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb)
>   		return err;
>   
> diff --git a/net/core/datagram.c b/net/core/datagram.c
> index ee290776c661..70126d15ca6e 100644
> --- a/net/core/datagram.c
> +++ b/net/core/datagram.c
> @@ -310,12 +310,11 @@ struct sk_buff *__skb_recv_datagram(struct sock *sk,
>   EXPORT_SYMBOL(__skb_recv_datagram);
>   
>   struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned int flags,
> -				  int noblock, int *err)
> +				  int *err)
>   {
>   	int off = 0;
>   
> -	return __skb_recv_datagram(sk, &sk->sk_receive_queue,
> -				   flags | (noblock ? MSG_DONTWAIT : 0),
> +	return __skb_recv_datagram(sk, &sk->sk_receive_queue, flags,
>   				   &off, err);
>   }
>   EXPORT_SYMBOL(skb_recv_datagram);
> diff --git a/net/ieee802154/socket.c b/net/ieee802154/socket.c
> index 3b2366a88c3c..a725dd9bbda8 100644
> --- a/net/ieee802154/socket.c
> +++ b/net/ieee802154/socket.c
> @@ -314,7 +314,8 @@ static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   	int err = -EOPNOTSUPP;
>   	struct sk_buff *skb;
>   
> -	skb = skb_recv_datagram(sk, flags, noblock, &err);
> +	flags |= (noblock ? MSG_DONTWAIT : 0);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb)
>   		goto out;
>   
> @@ -703,7 +704,8 @@ static int dgram_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   	struct dgram_sock *ro = dgram_sk(sk);
>   	DECLARE_SOCKADDR(struct sockaddr_ieee802154 *, saddr, msg->msg_name);
>   
> -	skb = skb_recv_datagram(sk, flags, noblock, &err);
> +	flags |= (noblock ? MSG_DONTWAIT : 0);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb)
>   		goto out;
>   
> diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
> index aa9a11b20d18..4e5ceca7ff7f 100644
> --- a/net/ipv4/ping.c
> +++ b/net/ipv4/ping.c
> @@ -871,7 +871,8 @@ int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
>   	if (flags & MSG_ERRQUEUE)
>   		return inet_recv_error(sk, msg, len, addr_len);
>   
> -	skb = skb_recv_datagram(sk, flags, noblock, &err);
> +	flags |= (noblock ? MSG_DONTWAIT : 0);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb)
>   		goto out;
>   
> diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
> index 9f97b9cbf7b3..c9dd9603f2e7 100644
> --- a/net/ipv4/raw.c
> +++ b/net/ipv4/raw.c
> @@ -769,7 +769,8 @@ static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   		goto out;
>   	}
>   
> -	skb = skb_recv_datagram(sk, flags, noblock, &err);
> +	flags |= (noblock ? MSG_DONTWAIT : 0);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb)
>   		goto out;
>   
> diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
> index c51d5ce3711c..8bb41f3b246a 100644
> --- a/net/ipv6/raw.c
> +++ b/net/ipv6/raw.c
> @@ -477,7 +477,8 @@ static int rawv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   	if (np->rxpmtu && np->rxopt.bits.rxpmtu)
>   		return ipv6_recv_rxpmtu(sk, msg, len, addr_len);
>   
> -	skb = skb_recv_datagram(sk, flags, noblock, &err);
> +	flags |= (noblock ? MSG_DONTWAIT : 0);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb)
>   		goto out;
>   
> diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c
> index a1760add5bf1..a0385ddbffcf 100644
> --- a/net/iucv/af_iucv.c
> +++ b/net/iucv/af_iucv.c
> @@ -1223,7 +1223,6 @@ static void iucv_process_message_q(struct sock *sk)
>   static int iucv_sock_recvmsg(struct socket *sock, struct msghdr *msg,
>   			     size_t len, int flags)
>   {
> -	int noblock = flags & MSG_DONTWAIT;
>   	struct sock *sk = sock->sk;
>   	struct iucv_sock *iucv = iucv_sk(sk);
>   	unsigned int copied, rlen;
> @@ -1242,7 +1241,7 @@ static int iucv_sock_recvmsg(struct socket *sock, struct msghdr *msg,
>   
>   	/* receive/dequeue next skb:
>   	 * the function understands MSG_PEEK and, thus, does not dequeue skb */
> -	skb = skb_recv_datagram(sk, flags, noblock, &err);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb) {
>   		if (sk->sk_shutdown & RCV_SHUTDOWN)
>   			return 0;
> diff --git a/net/key/af_key.c b/net/key/af_key.c
> index d93bde657359..c249b84efbb2 100644
> --- a/net/key/af_key.c
> +++ b/net/key/af_key.c
> @@ -3700,7 +3700,7 @@ static int pfkey_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
>   	if (flags & ~(MSG_PEEK|MSG_DONTWAIT|MSG_TRUNC|MSG_CMSG_COMPAT))
>   		goto out;
>   
> -	skb = skb_recv_datagram(sk, flags, flags & MSG_DONTWAIT, &err);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	if (skb == NULL)
>   		goto out;
>   
> diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
> index b3edafa5fba4..c6a5cc2d88e7 100644
> --- a/net/l2tp/l2tp_ip.c
> +++ b/net/l2tp/l2tp_ip.c
> @@ -526,7 +526,8 @@ static int l2tp_ip_recvmsg(struct sock *sk, struct msghdr *msg,
>   	if (flags & MSG_OOB)
>   		goto out;
>   
> -	skb = skb_recv_datagram(sk, flags, noblock, &err);
> +	flags |= (noblock ? MSG_DONTWAIT : 0);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb)
>   		goto out;
>   
> diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c
> index d54dbd01d86f..8f76e647adbb 100644
> --- a/net/l2tp/l2tp_ip6.c
> +++ b/net/l2tp/l2tp_ip6.c
> @@ -672,7 +672,8 @@ static int l2tp_ip6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   	if (flags & MSG_ERRQUEUE)
>   		return ipv6_recv_error(sk, msg, len, addr_len);
>   
> -	skb = skb_recv_datagram(sk, flags, noblock, &err);
> +	flags |= (noblock ? MSG_DONTWAIT : 0);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb)
>   		goto out;
>   
> diff --git a/net/l2tp/l2tp_ppp.c b/net/l2tp/l2tp_ppp.c
> index bf35710127dd..8be1fdc68a0b 100644
> --- a/net/l2tp/l2tp_ppp.c
> +++ b/net/l2tp/l2tp_ppp.c
> @@ -191,8 +191,7 @@ static int pppol2tp_recvmsg(struct socket *sock, struct msghdr *msg,
>   		goto end;
>   
>   	err = 0;
> -	skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
> -				flags & MSG_DONTWAIT, &err);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb)
>   		goto end;
>   
> diff --git a/net/mctp/af_mctp.c b/net/mctp/af_mctp.c
> index e22b0cbb2f35..221863afc4b1 100644
> --- a/net/mctp/af_mctp.c
> +++ b/net/mctp/af_mctp.c
> @@ -216,7 +216,7 @@ static int mctp_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
>   	if (flags & ~(MSG_DONTWAIT | MSG_TRUNC | MSG_PEEK))
>   		return -EOPNOTSUPP;
>   
> -	skb = skb_recv_datagram(sk, flags, flags & MSG_DONTWAIT, &rc);
> +	skb = skb_recv_datagram(sk, flags, &rc);
>   	if (!skb)
>   		return rc;
>   
> diff --git a/net/mctp/test/route-test.c b/net/mctp/test/route-test.c
> index 61205cf40074..24df29e135ed 100644
> --- a/net/mctp/test/route-test.c
> +++ b/net/mctp/test/route-test.c
> @@ -352,7 +352,7 @@ static void mctp_test_route_input_sk(struct kunit *test)
>   	if (params->deliver) {
>   		KUNIT_EXPECT_EQ(test, rc, 0);
>   
> -		skb2 = skb_recv_datagram(sock->sk, 0, 1, &rc);
> +		skb2 = skb_recv_datagram(sock->sk, MSG_DONTWAIT, &rc);
>   		KUNIT_EXPECT_NOT_ERR_OR_NULL(test, skb2);
>   		KUNIT_EXPECT_EQ(test, skb->len, 1);
>   
> @@ -360,7 +360,7 @@ static void mctp_test_route_input_sk(struct kunit *test)
>   
>   	} else {
>   		KUNIT_EXPECT_NE(test, rc, 0);
> -		skb2 = skb_recv_datagram(sock->sk, 0, 1, &rc);
> +		skb2 = skb_recv_datagram(sock->sk, MSG_DONTWAIT, &rc);
>   		KUNIT_EXPECT_PTR_EQ(test, skb2, NULL);
>   	}
>   
> @@ -423,7 +423,7 @@ static void mctp_test_route_input_sk_reasm(struct kunit *test)
>   		rc = mctp_route_input(&rt->rt, skb);
>   	}
>   
> -	skb2 = skb_recv_datagram(sock->sk, 0, 1, &rc);
> +	skb2 = skb_recv_datagram(sock->sk, MSG_DONTWAIT, &rc);
>   
>   	if (params->rx_len) {
>   		KUNIT_EXPECT_NOT_ERR_OR_NULL(test, skb2);
> @@ -582,7 +582,7 @@ static void mctp_test_route_input_sk_keys(struct kunit *test)
>   	rc = mctp_route_input(&rt->rt, skb);
>   
>   	/* (potentially) receive message */
> -	skb2 = skb_recv_datagram(sock->sk, 0, 1, &rc);
> +	skb2 = skb_recv_datagram(sock->sk, MSG_DONTWAIT, &rc);
>   
>   	if (params->deliver)
>   		KUNIT_EXPECT_NOT_ERR_OR_NULL(test, skb2);
> diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
> index 73e9c0a9c187..0cd91f813a3b 100644
> --- a/net/netlink/af_netlink.c
> +++ b/net/netlink/af_netlink.c
> @@ -1931,7 +1931,6 @@ static int netlink_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
>   	struct scm_cookie scm;
>   	struct sock *sk = sock->sk;
>   	struct netlink_sock *nlk = nlk_sk(sk);
> -	int noblock = flags & MSG_DONTWAIT;
>   	size_t copied;
>   	struct sk_buff *skb, *data_skb;
>   	int err, ret;
> @@ -1941,7 +1940,7 @@ static int netlink_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
>   
>   	copied = 0;
>   
> -	skb = skb_recv_datagram(sk, flags, noblock, &err);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	if (skb == NULL)
>   		goto out;
>   
> diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c
> index fa9dc2ba3941..6f7f4392cffb 100644
> --- a/net/netrom/af_netrom.c
> +++ b/net/netrom/af_netrom.c
> @@ -1159,7 +1159,8 @@ static int nr_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
>   	}
>   
>   	/* Now we can treat all alike */
> -	if ((skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT, flags & MSG_DONTWAIT, &er)) == NULL) {
> +	skb = skb_recv_datagram(sk, flags, &er);
> +	if (!skb) {
>   		release_sock(sk);
>   		return er;
>   	}
> diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c
> index 4ca35791c93b..77642d18a3b4 100644
> --- a/net/nfc/llcp_sock.c
> +++ b/net/nfc/llcp_sock.c
> @@ -821,7 +821,6 @@ static int llcp_sock_sendmsg(struct socket *sock, struct msghdr *msg,
>   static int llcp_sock_recvmsg(struct socket *sock, struct msghdr *msg,
>   			     size_t len, int flags)
>   {
> -	int noblock = flags & MSG_DONTWAIT;
>   	struct sock *sk = sock->sk;
>   	unsigned int copied, rlen;
>   	struct sk_buff *skb, *cskb;
> @@ -842,7 +841,7 @@ static int llcp_sock_recvmsg(struct socket *sock, struct msghdr *msg,
>   	if (flags & (MSG_OOB))
>   		return -EOPNOTSUPP;
>   
> -	skb = skb_recv_datagram(sk, flags, noblock, &err);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb) {
>   		pr_err("Recv datagram failed state %d %d %d",
>   		       sk->sk_state, err, sock_error(sk));
> diff --git a/net/nfc/rawsock.c b/net/nfc/rawsock.c
> index 0ca214ab5aef..8dd569765f96 100644
> --- a/net/nfc/rawsock.c
> +++ b/net/nfc/rawsock.c
> @@ -238,7 +238,6 @@ static int rawsock_sendmsg(struct socket *sock, struct msghdr *msg, size_t len)
>   static int rawsock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
>   			   int flags)
>   {
> -	int noblock = flags & MSG_DONTWAIT;
>   	struct sock *sk = sock->sk;
>   	struct sk_buff *skb;
>   	int copied;
> @@ -246,7 +245,7 @@ static int rawsock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
>   
>   	pr_debug("sock=%p sk=%p len=%zu flags=%d\n", sock, sk, len, flags);
>   
> -	skb = skb_recv_datagram(sk, flags, noblock, &rc);
> +	skb = skb_recv_datagram(sk, flags, &rc);
>   	if (!skb)
>   		return rc;
>   
> diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
> index 002d2b9c69dd..243566129784 100644
> --- a/net/packet/af_packet.c
> +++ b/net/packet/af_packet.c
> @@ -3426,7 +3426,7 @@ static int packet_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
>   	 *	but then it will block.
>   	 */
>   
> -	skb = skb_recv_datagram(sk, flags, flags & MSG_DONTWAIT, &err);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   
>   	/*
>   	 *	An error occurred so return it. Because skb_recv_datagram()
> diff --git a/net/phonet/datagram.c b/net/phonet/datagram.c
> index 393e6aa7a592..3f2e62b63dd4 100644
> --- a/net/phonet/datagram.c
> +++ b/net/phonet/datagram.c
> @@ -123,7 +123,8 @@ static int pn_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   			MSG_CMSG_COMPAT))
>   		goto out_nofree;
>   
> -	skb = skb_recv_datagram(sk, flags, noblock, &rval);
> +	flags |= (noblock ? MSG_DONTWAIT : 0);
> +	skb = skb_recv_datagram(sk, flags, &rval);
>   	if (skb == NULL)
>   		goto out_nofree;
>   
> diff --git a/net/phonet/pep.c b/net/phonet/pep.c
> index 65d463ad8770..441a26706592 100644
> --- a/net/phonet/pep.c
> +++ b/net/phonet/pep.c
> @@ -772,7 +772,8 @@ static struct sock *pep_sock_accept(struct sock *sk, int flags, int *errp,
>   	u8 pipe_handle, enabled, n_sb;
>   	u8 aligned = 0;
>   
> -	skb = skb_recv_datagram(sk, 0, flags & O_NONBLOCK, errp);
> +	skb = skb_recv_datagram(sk, (flags & O_NONBLOCK) ? MSG_DONTWAIT : 0,
> +				errp);
>   	if (!skb)
>   		return NULL;
>   
> @@ -1267,7 +1268,8 @@ static int pep_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   			return -EINVAL;
>   	}
>   
> -	skb = skb_recv_datagram(sk, flags, noblock, &err);
> +	flags |= (noblock ? MSG_DONTWAIT : 0);
> +	skb = skb_recv_datagram(sk, flags, &err);
>   	lock_sock(sk);
>   	if (skb == NULL) {
>   		if (err == -ENOTCONN && sk->sk_state == TCP_CLOSE_WAIT)
> diff --git a/net/qrtr/af_qrtr.c b/net/qrtr/af_qrtr.c
> index ec2322529727..5c2fb992803b 100644
> --- a/net/qrtr/af_qrtr.c
> +++ b/net/qrtr/af_qrtr.c
> @@ -1035,8 +1035,7 @@ static int qrtr_recvmsg(struct socket *sock, struct msghdr *msg,
>   		return -EADDRNOTAVAIL;
>   	}
>   
> -	skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
> -				flags & MSG_DONTWAIT, &rc);
> +	skb = skb_recv_datagram(sk, flags, &rc);
>   	if (!skb) {
>   		release_sock(sk);
>   		return rc;
> diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c
> index 30a1cf4c16c6..bf2d986a6bc3 100644
> --- a/net/rose/af_rose.c
> +++ b/net/rose/af_rose.c
> @@ -1230,7 +1230,8 @@ static int rose_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
>   		return -ENOTCONN;
>   
>   	/* Now we can treat all alike */
> -	if ((skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT, flags & MSG_DONTWAIT, &er)) == NULL)
> +	skb = skb_recv_datagram(sk, flags, &er);
> +	if (!skb)
>   		return er;
>   
>   	qbit = (skb->data[0] & ROSE_Q_BIT) == ROSE_Q_BIT;
> diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
> index 4aed12e94221..6114d69b8a2d 100644
> --- a/net/unix/af_unix.c
> +++ b/net/unix/af_unix.c
> @@ -1643,7 +1643,8 @@ static int unix_accept(struct socket *sock, struct socket *newsock, int flags,
>   	 * so that no locks are necessary.
>   	 */
>   
> -	skb = skb_recv_datagram(sk, 0, flags&O_NONBLOCK, &err);
> +	skb = skb_recv_datagram(sk, (flags & O_NONBLOCK) ? MSG_DONTWAIT : 0,
> +				&err);
>   	if (!skb) {
>   		/* This means receive shutdown. */
>   		if (err == 0)
> @@ -2500,7 +2501,7 @@ static int unix_read_sock(struct sock *sk, read_descriptor_t *desc,
>   		int used, err;
>   
>   		mutex_lock(&u->iolock);
> -		skb = skb_recv_datagram(sk, 0, 1, &err);
> +		skb = skb_recv_datagram(sk, MSG_DONTWAIT, &err);
>   		mutex_unlock(&u->iolock);
>   		if (!skb)
>   			return err;
> diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c
> index b17dc9745188..b14f0ed7427b 100644
> --- a/net/vmw_vsock/vmci_transport.c
> +++ b/net/vmw_vsock/vmci_transport.c
> @@ -1732,19 +1732,16 @@ static int vmci_transport_dgram_dequeue(struct vsock_sock *vsk,
>   					int flags)
>   {
>   	int err;
> -	int noblock;
>   	struct vmci_datagram *dg;
>   	size_t payload_len;
>   	struct sk_buff *skb;
>   
> -	noblock = flags & MSG_DONTWAIT;
> -
>   	if (flags & MSG_OOB || flags & MSG_ERRQUEUE)
>   		return -EOPNOTSUPP;
>   
>   	/* Retrieve the head sk_buff from the socket's receive queue. */
>   	err = 0;
> -	skb = skb_recv_datagram(&vsk->sk, flags, noblock, &err);
> +	skb = skb_recv_datagram(&vsk->sk, flags, &err);
>   	if (!skb)
>   		return err;
>   
> diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c
> index 3a171828638b..6bc2ac8d8146 100644
> --- a/net/x25/af_x25.c
> +++ b/net/x25/af_x25.c
> @@ -1315,8 +1315,7 @@ static int x25_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
>   	} else {
>   		/* Now we can treat all alike */
>   		release_sock(sk);
> -		skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
> -					flags & MSG_DONTWAIT, &rc);
> +		skb = skb_recv_datagram(sk, flags, &rc);
>   		lock_sock(sk);
>   		if (!skb)
>   			goto out;

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ