All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 0/2] fix udp pull header breakage
@ 2016-04-07 15:44 Willem de Bruijn
  2016-04-07 15:44 ` [PATCH net-next 1/2] sunrpc: do not pull udp headers on receive Willem de Bruijn
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Willem de Bruijn @ 2016-04-07 15:44 UTC (permalink / raw)
  To: netdev; +Cc: davem, fcooper, samanthakumar, Willem de Bruijn

From: Willem de Bruijn <willemb@google.com>

Commit e6afc8ace6dd ("udp: remove headers from UDP packets before
queueing") modified udp receive processing to pull headers before
enqueue and to not expect them on dequeue.

The patch missed protocols on top of udp with in-kernel
implementations that have their own skb_recv_datagram calls and
dequeue logic. Modify these datapaths to also no longer expect
a udp header at skb->data.

Sunrpc and rxrpc are the only two protocols that call this
function and contain references to udphr (some others, like tipc,
are based on encap_rcv, which acts before enqueue, before the
the header pull).

Willem de Bruijn (2):
  sunrpc: do not pull udp headers on receive
  rxrpc: do not pull udp headers on receive

 net/rxrpc/ar-input.c  | 4 ++--
 net/sunrpc/socklib.c  | 2 +-
 net/sunrpc/svcsock.c  | 5 ++---
 net/sunrpc/xprtsock.c | 5 ++---
 4 files changed, 7 insertions(+), 9 deletions(-)

-- 
2.8.0.rc3.226.g39d4020

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH net-next 1/2] sunrpc: do not pull udp headers on receive
  2016-04-07 15:44 [PATCH net-next 0/2] fix udp pull header breakage Willem de Bruijn
@ 2016-04-07 15:44 ` Willem de Bruijn
  2016-04-08  7:47   ` [net-next,1/2] " Thierry Reding
  2016-04-07 15:44 ` [PATCH net-next 2/2] rxrpc: " Willem de Bruijn
  2016-04-11 19:31 ` [PATCH net-next 0/2] fix udp pull header breakage David Miller
  2 siblings, 1 reply; 6+ messages in thread
From: Willem de Bruijn @ 2016-04-07 15:44 UTC (permalink / raw)
  To: netdev; +Cc: davem, fcooper, samanthakumar, Willem de Bruijn

From: Willem de Bruijn <willemb@google.com>

Commit e6afc8ace6dd modified the udp receive path by pulling the udp
header before queuing an skbuff onto the receive queue.

Sunrpc also calls skb_recv_datagram to dequeue an skb from a udp
socket. Modify this receive path to also no longer expect udp
headers.

Fixes: e6afc8ace6dd ("udp: remove headers from UDP packets before queueing")

Reported-by: Franklin S Cooper Jr. <fcooper@ti.com>
Signed-off-by: Willem de Bruijn <willemb@google.com>
---
 net/sunrpc/socklib.c  | 2 +-
 net/sunrpc/svcsock.c  | 5 ++---
 net/sunrpc/xprtsock.c | 5 ++---
 3 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/net/sunrpc/socklib.c b/net/sunrpc/socklib.c
index 2df87f7..8ab40ba 100644
--- a/net/sunrpc/socklib.c
+++ b/net/sunrpc/socklib.c
@@ -155,7 +155,7 @@ int csum_partial_copy_to_xdr(struct xdr_buf *xdr, struct sk_buff *skb)
 	struct xdr_skb_reader	desc;
 
 	desc.skb = skb;
-	desc.offset = sizeof(struct udphdr);
+	desc.offset = 0;
 	desc.count = skb->len - desc.offset;
 
 	if (skb_csum_unnecessary(skb))
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
index 1413cdc..71d6072 100644
--- a/net/sunrpc/svcsock.c
+++ b/net/sunrpc/svcsock.c
@@ -617,7 +617,7 @@ static int svc_udp_recvfrom(struct svc_rqst *rqstp)
 	svsk->sk_sk->sk_stamp = skb->tstamp;
 	set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); /* there may be more data... */
 
-	len  = skb->len - sizeof(struct udphdr);
+	len  = skb->len;
 	rqstp->rq_arg.len = len;
 
 	rqstp->rq_prot = IPPROTO_UDP;
@@ -641,8 +641,7 @@ static int svc_udp_recvfrom(struct svc_rqst *rqstp)
 		skb_free_datagram_locked(svsk->sk_sk, skb);
 	} else {
 		/* we can use it in-place */
-		rqstp->rq_arg.head[0].iov_base = skb->data +
-			sizeof(struct udphdr);
+		rqstp->rq_arg.head[0].iov_base = skb->data;
 		rqstp->rq_arg.head[0].iov_len = len;
 		if (skb_checksum_complete(skb))
 			goto out_free;
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 65e7595..c1fc7b2 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -995,15 +995,14 @@ static void xs_udp_data_read_skb(struct rpc_xprt *xprt,
 	u32 _xid;
 	__be32 *xp;
 
-	repsize = skb->len - sizeof(struct udphdr);
+	repsize = skb->len;
 	if (repsize < 4) {
 		dprintk("RPC:       impossible RPC reply size %d!\n", repsize);
 		return;
 	}
 
 	/* Copy the XID from the skb... */
-	xp = skb_header_pointer(skb, sizeof(struct udphdr),
-				sizeof(_xid), &_xid);
+	xp = skb_header_pointer(skb, 0, sizeof(_xid), &_xid);
 	if (xp == NULL)
 		return;
 
-- 
2.8.0.rc3.226.g39d4020

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net-next 2/2] rxrpc: do not pull udp headers on receive
  2016-04-07 15:44 [PATCH net-next 0/2] fix udp pull header breakage Willem de Bruijn
  2016-04-07 15:44 ` [PATCH net-next 1/2] sunrpc: do not pull udp headers on receive Willem de Bruijn
@ 2016-04-07 15:44 ` Willem de Bruijn
  2016-04-08  7:48   ` [net-next,2/2] " Thierry Reding
  2016-04-11 19:31 ` [PATCH net-next 0/2] fix udp pull header breakage David Miller
  2 siblings, 1 reply; 6+ messages in thread
From: Willem de Bruijn @ 2016-04-07 15:44 UTC (permalink / raw)
  To: netdev; +Cc: davem, fcooper, samanthakumar, Willem de Bruijn

From: Willem de Bruijn <willemb@google.com>

Commit e6afc8ace6dd modified the udp receive path by pulling the udp
header before queuing an skbuff onto the receive queue.

Rxrpc also calls skb_recv_datagram to dequeue an skb from a udp
socket. Modify this receive path to also no longer expect udp
headers.

Fixes: e6afc8ace6dd ("udp: remove headers from UDP packets before queueing")

Signed-off-by: Willem de Bruijn <willemb@google.com>
---
 net/rxrpc/ar-input.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/rxrpc/ar-input.c b/net/rxrpc/ar-input.c
index 63ed75c..4824a82 100644
--- a/net/rxrpc/ar-input.c
+++ b/net/rxrpc/ar-input.c
@@ -612,9 +612,9 @@ int rxrpc_extract_header(struct rxrpc_skb_priv *sp, struct sk_buff *skb)
 	struct rxrpc_wire_header whdr;
 
 	/* dig out the RxRPC connection details */
-	if (skb_copy_bits(skb, sizeof(struct udphdr), &whdr, sizeof(whdr)) < 0)
+	if (skb_copy_bits(skb, 0, &whdr, sizeof(whdr)) < 0)
 		return -EBADMSG;
-	if (!pskb_pull(skb, sizeof(struct udphdr) + sizeof(whdr)))
+	if (!pskb_pull(skb, sizeof(whdr)))
 		BUG();
 
 	memset(sp, 0, sizeof(*sp));
-- 
2.8.0.rc3.226.g39d4020

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [net-next,1/2] sunrpc: do not pull udp headers on receive
  2016-04-07 15:44 ` [PATCH net-next 1/2] sunrpc: do not pull udp headers on receive Willem de Bruijn
@ 2016-04-08  7:47   ` Thierry Reding
  0 siblings, 0 replies; 6+ messages in thread
From: Thierry Reding @ 2016-04-08  7:47 UTC (permalink / raw)
  To: Willem de Bruijn; +Cc: netdev, davem, fcooper, samanthakumar, Willem de Bruijn

[-- Attachment #1: Type: text/plain, Size: 994 bytes --]

On Thu, Apr 07, 2016 at 11:44:58AM -0400, Willem de Bruijn wrote:
> From: Willem de Bruijn <willemb@google.com>
> 
> Commit e6afc8ace6dd modified the udp receive path by pulling the udp
> header before queuing an skbuff onto the receive queue.
> 
> Sunrpc also calls skb_recv_datagram to dequeue an skb from a udp
> socket. Modify this receive path to also no longer expect udp
> headers.
> 
> Fixes: e6afc8ace6dd ("udp: remove headers from UDP packets before queueing")
> 
> Reported-by: Franklin S Cooper Jr. <fcooper@ti.com>
> Signed-off-by: Willem de Bruijn <willemb@google.com>
> ---
>  net/sunrpc/socklib.c  | 2 +-
>  net/sunrpc/svcsock.c  | 5 ++---
>  net/sunrpc/xprtsock.c | 5 ++---
>  3 files changed, 5 insertions(+), 7 deletions(-)

Applying this and patch 2/2 (along with a couple of unrelated regulator
fixes) on top of next-20160408 fixes booting from NFS root for me on
Jetson TK1. Thanks for fixing this.

Tested-by: Thierry Reding <treding@nvidia.com>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [net-next,2/2] rxrpc: do not pull udp headers on receive
  2016-04-07 15:44 ` [PATCH net-next 2/2] rxrpc: " Willem de Bruijn
@ 2016-04-08  7:48   ` Thierry Reding
  0 siblings, 0 replies; 6+ messages in thread
From: Thierry Reding @ 2016-04-08  7:48 UTC (permalink / raw)
  To: Willem de Bruijn; +Cc: netdev, davem, fcooper, samanthakumar, Willem de Bruijn

[-- Attachment #1: Type: text/plain, Size: 703 bytes --]

On Thu, Apr 07, 2016 at 11:44:59AM -0400, Willem de Bruijn wrote:
> From: Willem de Bruijn <willemb@google.com>
> 
> Commit e6afc8ace6dd modified the udp receive path by pulling the udp
> header before queuing an skbuff onto the receive queue.
> 
> Rxrpc also calls skb_recv_datagram to dequeue an skb from a udp
> socket. Modify this receive path to also no longer expect udp
> headers.
> 
> Fixes: e6afc8ace6dd ("udp: remove headers from UDP packets before queueing")
> 
> Signed-off-by: Willem de Bruijn <willemb@google.com>
> ---
>  net/rxrpc/ar-input.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)

To be explicit:

Tested-by: Thierry Reding <treding@nvidia.com>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next 0/2] fix udp pull header breakage
  2016-04-07 15:44 [PATCH net-next 0/2] fix udp pull header breakage Willem de Bruijn
  2016-04-07 15:44 ` [PATCH net-next 1/2] sunrpc: do not pull udp headers on receive Willem de Bruijn
  2016-04-07 15:44 ` [PATCH net-next 2/2] rxrpc: " Willem de Bruijn
@ 2016-04-11 19:31 ` David Miller
  2 siblings, 0 replies; 6+ messages in thread
From: David Miller @ 2016-04-11 19:31 UTC (permalink / raw)
  To: willemdebruijn.kernel; +Cc: netdev, fcooper, samanthakumar, willemb

From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Date: Thu,  7 Apr 2016 11:44:57 -0400

> Commit e6afc8ace6dd ("udp: remove headers from UDP packets before
> queueing") modified udp receive processing to pull headers before
> enqueue and to not expect them on dequeue.
> 
> The patch missed protocols on top of udp with in-kernel
> implementations that have their own skb_recv_datagram calls and
> dequeue logic. Modify these datapaths to also no longer expect
> a udp header at skb->data.
> 
> Sunrpc and rxrpc are the only two protocols that call this
> function and contain references to udphr (some others, like tipc,
> are based on encap_rcv, which acts before enqueue, before the
> the header pull).

Series applied, thanks for fixing this regression so quickly.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2016-04-11 19:31 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-07 15:44 [PATCH net-next 0/2] fix udp pull header breakage Willem de Bruijn
2016-04-07 15:44 ` [PATCH net-next 1/2] sunrpc: do not pull udp headers on receive Willem de Bruijn
2016-04-08  7:47   ` [net-next,1/2] " Thierry Reding
2016-04-07 15:44 ` [PATCH net-next 2/2] rxrpc: " Willem de Bruijn
2016-04-08  7:48   ` [net-next,2/2] " Thierry Reding
2016-04-11 19:31 ` [PATCH net-next 0/2] fix udp pull header breakage David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.