aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/rxrpc/ar-input.c4
-rw-r--r--net/sunrpc/socklib.c2
-rw-r--r--net/sunrpc/svcsock.c5
-rw-r--r--net/sunrpc/xprtsock.c5
4 files changed, 7 insertions, 9 deletions
diff --git a/net/rxrpc/ar-input.c b/net/rxrpc/ar-input.c
index 63ed75c40e29..4824a827d10d 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)
612 struct rxrpc_wire_header whdr; 612 struct rxrpc_wire_header whdr;
613 613
614 /* dig out the RxRPC connection details */ 614 /* dig out the RxRPC connection details */
615 if (skb_copy_bits(skb, sizeof(struct udphdr), &whdr, sizeof(whdr)) < 0) 615 if (skb_copy_bits(skb, 0, &whdr, sizeof(whdr)) < 0)
616 return -EBADMSG; 616 return -EBADMSG;
617 if (!pskb_pull(skb, sizeof(struct udphdr) + sizeof(whdr))) 617 if (!pskb_pull(skb, sizeof(whdr)))
618 BUG(); 618 BUG();
619 619
620 memset(sp, 0, sizeof(*sp)); 620 memset(sp, 0, sizeof(*sp));
diff --git a/net/sunrpc/socklib.c b/net/sunrpc/socklib.c
index de70c78025d7..f217c348b341 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)
155 struct xdr_skb_reader desc; 155 struct xdr_skb_reader desc;
156 156
157 desc.skb = skb; 157 desc.skb = skb;
158 desc.offset = sizeof(struct udphdr); 158 desc.offset = 0;
159 desc.count = skb->len - desc.offset; 159 desc.count = skb->len - desc.offset;
160 160
161 if (skb_csum_unnecessary(skb)) 161 if (skb_csum_unnecessary(skb))
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
index 1413cdcc131c..71d6072664d2 100644
--- a/net/sunrpc/svcsock.c
+++ b/net/sunrpc/svcsock.c
@@ -617,7 +617,7 @@ static int svc_udp_recvfrom(struct svc_rqst *rqstp)
617 svsk->sk_sk->sk_stamp = skb->tstamp; 617 svsk->sk_sk->sk_stamp = skb->tstamp;
618 set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); /* there may be more data... */ 618 set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); /* there may be more data... */
619 619
620 len = skb->len - sizeof(struct udphdr); 620 len = skb->len;
621 rqstp->rq_arg.len = len; 621 rqstp->rq_arg.len = len;
622 622
623 rqstp->rq_prot = IPPROTO_UDP; 623 rqstp->rq_prot = IPPROTO_UDP;
@@ -641,8 +641,7 @@ static int svc_udp_recvfrom(struct svc_rqst *rqstp)
641 skb_free_datagram_locked(svsk->sk_sk, skb); 641 skb_free_datagram_locked(svsk->sk_sk, skb);
642 } else { 642 } else {
643 /* we can use it in-place */ 643 /* we can use it in-place */
644 rqstp->rq_arg.head[0].iov_base = skb->data + 644 rqstp->rq_arg.head[0].iov_base = skb->data;
645 sizeof(struct udphdr);
646 rqstp->rq_arg.head[0].iov_len = len; 645 rqstp->rq_arg.head[0].iov_len = len;
647 if (skb_checksum_complete(skb)) 646 if (skb_checksum_complete(skb))
648 goto out_free; 647 goto out_free;
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 65e759569e48..c1fc7b20bbc1 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,
995 u32 _xid; 995 u32 _xid;
996 __be32 *xp; 996 __be32 *xp;
997 997
998 repsize = skb->len - sizeof(struct udphdr); 998 repsize = skb->len;
999 if (repsize < 4) { 999 if (repsize < 4) {
1000 dprintk("RPC: impossible RPC reply size %d!\n", repsize); 1000 dprintk("RPC: impossible RPC reply size %d!\n", repsize);
1001 return; 1001 return;
1002 } 1002 }
1003 1003
1004 /* Copy the XID from the skb... */ 1004 /* Copy the XID from the skb... */
1005 xp = skb_header_pointer(skb, sizeof(struct udphdr), 1005 xp = skb_header_pointer(skb, 0, sizeof(_xid), &_xid);
1006 sizeof(_xid), &_xid);
1007 if (xp == NULL) 1006 if (xp == NULL)
1008 return; 1007 return;
1009 1008