Message ID | 12d4d81f-40c7-c83d-11d6-290acc084695@huawei.com |
---|---|
State | New |
Headers | show |
On Wed, May 03, 2017 at 03:02:32PM +0800, Ding Tianhong wrote: > The patch 327868212381 (make skb_copy_datagram_msg() et.al. preserve > ->msg_iter on error) will revert the iov buffer if copy to iter > failed, but it didn't copy any datagram if the skb_checksum_complete > error, so no need to revert any data at this place. See a6a5993243550b09f620941dea741b7421fdf79c in mainline...
Miss it, it is already in the kernel tree, sorry for the noisy. On 2017/5/3 15:02, Ding Tianhong wrote: > The patch 327868212381 (make skb_copy_datagram_msg() et.al. preserve > ->msg_iter on error) will revert the iov buffer if copy to iter > failed, but it didn't copy any datagram if the skb_checksum_complete > error, so no need to revert any data at this place. > > v2: Sabrina notice that return -EFAULT when checksum error is not correct > here, it would confuse the caller about the return value, so fix it. > > v3: According AI's suggestion, directly return -EINVAL when __skb_checksum_complete() > return error is a more simple solution. > > Fixes: 327868212381 ("make skb_copy_datagram_msg() et.al. preserve->msg_iter on error") > Signed-off-by: Ding Tianhong <dingtianhong@huawei.com> > Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com> > --- > net/core/datagram.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/net/core/datagram.c b/net/core/datagram.c > index 0306543..726bf8a 100644 > --- a/net/core/datagram.c > +++ b/net/core/datagram.c > @@ -719,7 +719,7 @@ int skb_copy_and_csum_datagram_msg(struct sk_buff *skb, > > if (msg_data_left(msg) < chunk) { > if (__skb_checksum_complete(skb)) > - goto csum_error; > + return -EINVAL; > if (skb_copy_datagram_msg(skb, hlen, msg, chunk)) > goto fault; > } else { >
diff --git a/net/core/datagram.c b/net/core/datagram.c index 0306543..726bf8a 100644 --- a/net/core/datagram.c +++ b/net/core/datagram.c @@ -719,7 +719,7 @@ int skb_copy_and_csum_datagram_msg(struct sk_buff *skb, if (msg_data_left(msg) < chunk) { if (__skb_checksum_complete(skb)) - goto csum_error; + return -EINVAL; if (skb_copy_datagram_msg(skb, hlen, msg, chunk)) goto fault; } else {