diff options
| author | Eric Dumazet <[email protected]> | 2025-02-26 18:34:36 +0000 |
|---|---|---|
| committer | Jakub Kicinski <[email protected]> | 2025-02-28 22:41:33 +0000 |
| commit | daeb6a8f3b00d3b6f40593d80ab6be4f6d3d968d (patch) | |
| tree | 23622661a31a624e3ea58a5b367a086cff27b2c4 | |
| parent | Merge branch 'net-stmmac-cleanup-transmit-clock-setting' (diff) | |
| download | kernel-daeb6a8f3b00d3b6f40593d80ab6be4f6d3d968d.tar.gz kernel-daeb6a8f3b00d3b6f40593d80ab6be4f6d3d968d.zip | |
ipv4: icmp: do not process ICMP_EXT_ECHOREPLY for broadcast/multicast addresses
There is no point processing ICMP_EXT_ECHOREPLY for routes
which would drop ICMP_ECHOREPLY (RFC 1122 3.2.2.6, 3.2.2.8)
This seems an oversight of the initial implementation.
Signed-off-by: Eric Dumazet <[email protected]>
Reviewed-by: David Ahern <[email protected]>
Link: https://patch.msgid.link/[email protected]
Signed-off-by: Jakub Kicinski <[email protected]>
| -rw-r--r-- | net/ipv4/icmp.c | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c index 799775ba97d4..058d4c1e300d 100644 --- a/net/ipv4/icmp.c +++ b/net/ipv4/icmp.c @@ -1248,22 +1248,6 @@ int icmp_rcv(struct sk_buff *skb) goto reason_check; } - if (icmph->type == ICMP_EXT_ECHOREPLY) { - reason = ping_rcv(skb); - goto reason_check; - } - - /* - * 18 is the highest 'known' ICMP type. Anything else is a mystery - * - * RFC 1122: 3.2.2 Unknown ICMP messages types MUST be silently - * discarded. - */ - if (icmph->type > NR_ICMP_TYPES) { - reason = SKB_DROP_REASON_UNHANDLED_PROTO; - goto error; - } - /* * Parse the ICMP message */ @@ -1290,6 +1274,22 @@ int icmp_rcv(struct sk_buff *skb) } } + if (icmph->type == ICMP_EXT_ECHOREPLY) { + reason = ping_rcv(skb); + goto reason_check; + } + + /* + * 18 is the highest 'known' ICMP type. Anything else is a mystery + * + * RFC 1122: 3.2.2 Unknown ICMP messages types MUST be silently + * discarded. + */ + if (icmph->type > NR_ICMP_TYPES) { + reason = SKB_DROP_REASON_UNHANDLED_PROTO; + goto error; + } + reason = icmp_pointers[icmph->type].handler(skb); reason_check: if (!reason) { |
