* [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
* 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
* [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,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