lkml.org 
[lkml]   [2021]   [Jun]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 59/71] ping: Check return value of function 'ping_queue_rcv_skb'
    Date
    From: Zheng Yongjun <zhengyongjun3@huawei.com>

    [ Upstream commit 9d44fa3e50cc91691896934d106c86e4027e61ca ]

    Function 'ping_queue_rcv_skb' not always return success, which will
    also return fail. If not check the wrong return value of it, lead to function
    `ping_rcv` return success.

    Signed-off-by: Zheng Yongjun <zhengyongjun3@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/ipv4/ping.c | 12 +++++++-----
    1 file changed, 7 insertions(+), 5 deletions(-)

    diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
    index 4fda9abf38ee..dd4e46af1e53 100644
    --- a/net/ipv4/ping.c
    +++ b/net/ipv4/ping.c
    @@ -976,6 +976,7 @@ bool ping_rcv(struct sk_buff *skb)
    struct sock *sk;
    struct net *net = dev_net(skb->dev);
    struct icmphdr *icmph = icmp_hdr(skb);
    + bool rc = false;

    /* We assume the packet has already been checked by icmp_rcv */

    @@ -990,14 +991,15 @@ bool ping_rcv(struct sk_buff *skb)
    struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC);

    pr_debug("rcv on socket %p\n", sk);
    - if (skb2)
    - ping_queue_rcv_skb(sk, skb2);
    + if (skb2 && !ping_queue_rcv_skb(sk, skb2))
    + rc = true;
    sock_put(sk);
    - return true;
    }
    - pr_debug("no socket, dropping\n");

    - return false;
    + if (!rc)
    + pr_debug("no socket, dropping\n");
    +
    + return rc;
    }
    EXPORT_SYMBOL_GPL(ping_rcv);

    --
    2.30.2
    \
     
     \ /
      Last update: 2021-06-28 17:23    [W:5.803 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site