[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <e87a85a8c91d96951c4fa923d1563dcd@synology.com>
Date: Mon, 01 Apr 2019 11:00:22 +0800
From: lifonghsu <lifonghsu@...ology.com>
To: David Miller <davem@...emloft.net>
Cc: netdev@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: net: fix routing encapsulated packets when binding a socket to a
tunnel interface
David Miller 於 2019-03-30 01:40 寫到:
> From: lifonghsu <lifonghsu@...ology.com>
> Date: Thu, 28 Mar 2019 16:30:37 +0800
>
>> Indeed, skb_iif is used as receive site indication to present "device
>> the packet arrived on".
>> This commit keeps the previous arrived device (similar to the concept
>> of "device the packet arrived on") in skb_iif field to prevent kernel
>> from referring sk_bound_dev_if again. Otherwise, we might need to add
>> a new field to sk_buff structure for our purpose.
>
> Therefore, you are deciding to arbitrarily repurpose an RX side piece
> of state for TX purposes.
>
> Do not do this.
>
> It confuses anyone trying to understand how skb_iif works.
>
> You must use something with a different name, and clear semantics, to
> achieve this goal.
>
> For example, you could use an anonymous union:
>
> union {
> int skb_iif;
> bool bound_dev_already_applied;
> };
>
> You never actually _USE_ the value of skb_iif, it is just merely a
> boolean indicating whether sk_bound_dev_if was applied already.
Since we are not sure whether there is any code referring to the value
of
skb_iff in transmit site or not, it is risky to set an invalid interface
index to skb_iif in an anonymous union.
What if we add a bit (e.g., __u8 bound_dev_already_applied:1;) to
sk_buff?
Powered by blists - more mailing lists