nsim_do_psp() takes an extra reference to the PSP skb extension so the
extension survives __dev_forward_skb(). That forward path scrubs the skb
and drops attached skb extensions before nsim_psp_handle_ext() can
reattach the PSP metadata.
If __dev_forward_skb() fails in nsim_forward_skb(), the function returns
before nsim_psp_handle_ext() can attach that extension to the skb, leaving
the extra reference leaked.
Drop the saved PSP extension reference before returning from the
forward-failure path. Guard the put because plain or non-decapsulated
traffic can also fail forwarding without ever taking the extra PSP
reference.
Fixes:
|
||
|---|---|---|
| .. | ||
| Makefile | ||
| bpf.c | ||
| bus.c | ||
| dev.c | ||
| ethtool.c | ||
| fib.c | ||
| health.c | ||
| hwstats.c | ||
| ipsec.c | ||
| macsec.c | ||
| netdev.c | ||
| netdevsim.h | ||
| psample.c | ||
| psp.c | ||
| udp_tunnels.c | ||