diff options
| author | Dmitry Skorodumov <skorodumov.dmitry@huawei.com> | 2025-12-02 13:39:03 +0300 |
|---|---|---|
| committer | Paolo Abeni <pabeni@redhat.com> | 2025-12-04 13:43:12 +0100 |
| commit | 0c57ff008a11f24f7f05fa760222692a00465fec (patch) | |
| tree | 199215cfa04409dffc4b72bff72183a65a8ed664 | |
| parent | 5b48f49ee94888f3cd4360286ee9921eff2b2e46 (diff) | |
| download | net-0c57ff008a11f24f7f05fa760222692a00465fec.tar.gz | |
ipvlan: Ignore PACKET_LOOPBACK in handle_mode_l2()
Packets with pkt_type == PACKET_LOOPBACK are captured by
handle_frame() function, but they don't have L2 header.
We should not process them in handle_mode_l2().
This doesn't affect old L2 functionality, since handling
was anyway incorrect.
Handle them the same way as in br_handle_frame():
just pass the skb.
To observe invalid behaviour, just start "ping -b" on bcast address
of port-interface.
Fixes: 2ad7bf363841 ("ipvlan: Initial check-in of the IPVLAN driver.")
Signed-off-by: Dmitry Skorodumov <skorodumov.dmitry@huawei.com>
Link: https://patch.msgid.link/20251202103906.4087675-1-skorodumov.dmitry@huawei.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
| -rw-r--r-- | drivers/net/ipvlan/ipvlan_core.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/net/ipvlan/ipvlan_core.c b/drivers/net/ipvlan/ipvlan_core.c index dea411e132dba1..2efa3ba148aa7e 100644 --- a/drivers/net/ipvlan/ipvlan_core.c +++ b/drivers/net/ipvlan/ipvlan_core.c @@ -737,6 +737,9 @@ static rx_handler_result_t ipvlan_handle_mode_l2(struct sk_buff **pskb, struct ethhdr *eth = eth_hdr(skb); rx_handler_result_t ret = RX_HANDLER_PASS; + if (unlikely(skb->pkt_type == PACKET_LOOPBACK)) + return RX_HANDLER_PASS; + if (is_multicast_ether_addr(eth->h_dest)) { if (ipvlan_external_frame(skb, port)) { struct sk_buff *nskb = skb_clone(skb, GFP_ATOMIC); |
