On 6/22/25 10:40 PM, Florian Westphal wrote:
> Eric Woudstra <[email protected]> wrote:
>> - return nft_do_chain(&pkt, priv);
>> + ret = nft_do_chain(&pkt, priv);
>> +
>> + if (offset) {
>> + __skb_push(skb, offset);
>> + skb_reset_network_header(skb);
>> + skb->protocol = outer_proto;
>> + }
>
> I don't think its a good idea to do this.
>
> nft_do_chain() can mangle packet in arbitrary ways,
> including making a duplicate, sending icmp/tcp resets in response
> to packet. forwarding the packet to another interface, dropping
> the packet, etc.
>
> Wouldn't it be enough to set the skb network header if its not
> set yet, without pull (and a need to push later)?
If I replace the pull + skb_reset_network_header with
skb_set_network_header and remove the push, this also works.
I'll change it in the next version of this patch.
However, if I do the same in nf_ct_bridge_pre() (the other patch in this
patch-set), then packets get dropped. I'll need to look into that furter.