[PATCH] server: Use SO_BINDTODEVICE in bind_to_index() if possible.

Paul Gofman pgofman at codeweavers.com
Tue Oct 12 15:32:10 CDT 2021


On 10/12/21 23:21, Erich E. Hoover wrote:
> On Tue, Oct 12, 2021 at 1:34 PM Paul Gofman <pgofman at codeweavers.com> wrote:
>> ...
>> Hm... I am a bit unsure anymore what exactly is 33008, I read there that
>> it is claimed incorrect to have some 1.2.3.4->0.0.0.0 per se as it
>> breaks some NAT rules. But if it is strictly about two Wine processes
>> binding UDP to different interfaces, same port, I think my patch should
>> be fixing that.
> One process is a Wine process and the other is not, but the problem is
> that the Wine process is gobbling the packets meant for the other
> process (packets for the other process come to us since we bind
> second, and we're dropping all packets that are not part of our
> interface bind).  Your patch will fix the issue for newer kernels,
> though it's also possible to fix it for older kernels with an
> incredibly complicated SO_ATTACH_REUSEPORT_CBPF rule (you can make a
> list of your sockets, match against that list, and return the ID that
> corresponds to the correct socket in the list or return -1 for the
> regular Linux behavior if it's not on the list).

Yes, we would need to maintain the ordered 'reuse groups' in the 
wineserver and update the filters on sockets bind and close. That's for 
Wine only operation within a single prefix. As for another non-Wine (or 
other Wine prefix processes) I am not sure how we can track that at all, 
at least I could not find a way to query 'reuse group' information from 
the system. I don't see how returning -1 would make sense as falling 
back to the plain SO_REUSEPORT mechanism can still leave the other app 
without packets routed instead to our (wrongly bound) sockets. Even 
without the non-Wine processes part this seems rather complicated and 
given there seems to be a simple and sure way to do what we need since 
Linux 5.7 I don't see why would we need to implement a nontrivial 
intermediate step to be obsoleted anyway.





More information about the wine-devel mailing list