lkml.org 
[lkml]   [2022]   [Jan]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 net-next 6/7] net: udp: use kfree_skb_reason() in udp_queue_rcv_one_skb()
    Date
    From: Menglong Dong <imagedong@tencent.com>

    Replace kfree_skb() with kfree_skb_reason() in udp_queue_rcv_one_skb().

    Signed-off-by: Menglong Dong <imagedong@tencent.com>
    ---
    v2:
    - use SKB_DROP_REASON_SOCKET_FILTER instead of
    SKB_DROP_REASON_UDP_FILTER
    ---
    net/ipv4/udp.c | 12 +++++++++---
    1 file changed, 9 insertions(+), 3 deletions(-)

    diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
    index 464590ea922e..9e28e76e95b8 100644
    --- a/net/ipv4/udp.c
    +++ b/net/ipv4/udp.c
    @@ -2120,14 +2120,17 @@ static int __udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
    */
    static int udp_queue_rcv_one_skb(struct sock *sk, struct sk_buff *skb)
    {
    + int drop_reason = SKB_DROP_REASON_NOT_SPECIFIED;
    struct udp_sock *up = udp_sk(sk);
    int is_udplite = IS_UDPLITE(sk);

    /*
    * Charge it to the socket, dropping if the queue is full.
    */
    - if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb))
    + if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb)) {
    + drop_reason = SKB_DROP_REASON_XFRM_POLICY;
    goto drop;
    + }
    nf_reset_ct(skb);

    if (static_branch_unlikely(&udp_encap_needed_key) && up->encap_type) {
    @@ -2204,8 +2207,10 @@ static int udp_queue_rcv_one_skb(struct sock *sk, struct sk_buff *skb)
    udp_lib_checksum_complete(skb))
    goto csum_error;

    - if (sk_filter_trim_cap(sk, skb, sizeof(struct udphdr)))
    + if (sk_filter_trim_cap(sk, skb, sizeof(struct udphdr))) {
    + drop_reason = SKB_DROP_REASON_SOCKET_FILTER;
    goto drop;
    + }

    udp_csum_pull_header(skb);

    @@ -2213,11 +2218,12 @@ static int udp_queue_rcv_one_skb(struct sock *sk, struct sk_buff *skb)
    return __udp_queue_rcv_skb(sk, skb);

    csum_error:
    + drop_reason = SKB_DROP_REASON_UDP_CSUM;
    __UDP_INC_STATS(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite);
    drop:
    __UDP_INC_STATS(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
    atomic_inc(&sk->sk_drops);
    - kfree_skb(skb);
    + kfree_skb_reason(skb, drop_reason);
    return -1;
    }

    --
    2.34.1
    \
     
     \ /
      Last update: 2022-01-28 08:34    [W:3.642 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site