lkml.org 
[lkml]   [2017]   [May]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 39/80] iov_iter: dont revert iov buffer if csum error
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Ding Tianhong <dingtianhong@huawei.com>

    commit a6a5993243550b09f620941dea741b7421fdf79c upstream.

    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.

    Fixes: 327868212381 ("make skb_copy_datagram_msg() et.al. preserve->msg_iter on error")
    Signed-off-by: Ding Tianhong <dingtianhong@huawei.com>
    Acked-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    net/core/datagram.c | 13 +++++++------
    1 file changed, 7 insertions(+), 6 deletions(-)

    --- a/net/core/datagram.c
    +++ b/net/core/datagram.c
    @@ -740,7 +740,7 @@ int skb_copy_and_csum_datagram_msg(struc

    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 {
    @@ -748,15 +748,16 @@ int skb_copy_and_csum_datagram_msg(struc
    if (skb_copy_and_csum_datagram(skb, hlen, &msg->msg_iter,
    chunk, &csum))
    goto fault;
    - if (csum_fold(csum))
    - goto csum_error;
    +
    + if (csum_fold(csum)) {
    + iov_iter_revert(&msg->msg_iter, chunk);
    + return -EINVAL;
    + }
    +
    if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE))
    netdev_rx_csum_fault(skb->dev);
    }
    return 0;
    -csum_error:
    - iov_iter_revert(&msg->msg_iter, chunk);
    - return -EINVAL;
    fault:
    return -EFAULT;
    }

    \
     
     \ /
      Last update: 2017-05-18 13:25    [W:4.077 / U:0.264 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site