Commit f8319dfd authored by Menglong Dong's avatar Menglong Dong Committed by David S. Miller

net: tcp: reset 'drop_reason' to NOT_SPCIFIED in tcp_v{4,6}_rcv()

The 'drop_reason' that passed to kfree_skb_reason() in tcp_v4_rcv()
and tcp_v6_rcv() can be SKB_NOT_DROPPED_YET(0), as it is used as the
return value of tcp_inbound_md5_hash().

And it can panic the kernel with NULL pointer in
net_dm_packet_report_size() if the reason is 0, as drop_reasons[0]
is NULL.

Fixes: 1330b6ef ("skb: make drop reason booleanable")
Reviewed-by: default avatarJiang Biao <benbjiang@tencent.com>
Reviewed-by: default avatarHao Peng <flyingpeng@tencent.com>
Signed-off-by: default avatarMenglong Dong <imagedong@tencent.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7ebd3f3e
...@@ -2101,6 +2101,7 @@ int tcp_v4_rcv(struct sk_buff *skb) ...@@ -2101,6 +2101,7 @@ int tcp_v4_rcv(struct sk_buff *skb)
} }
discard_it: discard_it:
SKB_DR_OR(drop_reason, NOT_SPECIFIED);
/* Discard frame. */ /* Discard frame. */
kfree_skb_reason(skb, drop_reason); kfree_skb_reason(skb, drop_reason);
return 0; return 0;
......
...@@ -1509,6 +1509,7 @@ int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) ...@@ -1509,6 +1509,7 @@ int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
discard: discard:
if (opt_skb) if (opt_skb)
__kfree_skb(opt_skb); __kfree_skb(opt_skb);
SKB_DR_OR(reason, NOT_SPECIFIED);
kfree_skb_reason(skb, reason); kfree_skb_reason(skb, reason);
return 0; return 0;
csum_err: csum_err:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment