X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fsunrpc%2Fxprt.c;h=de4bccc1c25ddf3baa9e550034ac867d32d17096;hb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;hp=a7ab07fe5cc04dd38a762630d90fe2aa31ec4d02;hpb=a2c21200f1c81b08cb55e417b68150bba439b646;p=linux-2.6.git diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c index a7ab07fe5..de4bccc1c 100644 --- a/net/sunrpc/xprt.c +++ b/net/sunrpc/xprt.c @@ -753,7 +753,7 @@ udp_data_ready(struct sock *sk, int len) struct rpc_rqst *rovr; struct sk_buff *skb; int err, repsize, copied; - u32 xid; + u32 _xid, *xp; read_lock(&sk->sk_callback_lock); dprintk("RPC: udp_data_ready...\n"); @@ -777,12 +777,14 @@ udp_data_ready(struct sock *sk, int len) } /* Copy the XID from the skb... */ - if (skb_copy_bits(skb, sizeof(struct udphdr), &xid, sizeof(xid)) < 0) + xp = skb_header_pointer(skb, sizeof(struct udphdr), + sizeof(_xid), &_xid); + if (xp == NULL) goto dropit; /* Look up and lock the request corresponding to the given XID */ spin_lock(&xprt->sock_lock); - rovr = xprt_lookup_rqst(xprt, xid); + rovr = xprt_lookup_rqst(xprt, *xp); if (!rovr) goto out_unlock; task = rovr->rq_task;