Nikolay Aleksandrov
2021-Apr-26 13:15 UTC
[Bridge] [PATCH net 2/2] net: bridge: fix lockdep multicast_lock false positive splat
On 26/04/2021 15:48, Herbert Xu wrote:> On Sun, Apr 25, 2021 at 07:45:27PM +0300, Nikolay Aleksandrov wrote: >> >> Ugh.. that's just very ugly. :) The setup you've described above is by all means invalid, but >> possible unfortunately. The bridge already checks if it's being added as a port to another >> bridge, but not through multiple levels of indirection. These locks are completely unrelated >> as they're in very different contexts (different devices). > > Surely we should forbid this? Otherwise what's to stop someone > from creating a loop? > > Cheers, >Indeed that would be best, it's very easy to loop them.
Taehee Yoo
2021-Apr-26 15:17 UTC
[Bridge] [PATCH net 2/2] net: bridge: fix lockdep multicast_lock false positive splat
On 4/26/21 10:15 PM, Nikolay Aleksandrov wrote: > On 26/04/2021 15:48, Herbert Xu wrote: Hi Nikolay and Herbert, Thank you for the reviews! >> On Sun, Apr 25, 2021 at 07:45:27PM +0300, Nikolay Aleksandrov wrote: >>> >>> Ugh.. that's just very ugly. :) The setup you've described above is by all means invalid, but >>> possible unfortunately. The bridge already checks if it's being added as a port to another >>> bridge, but not through multiple levels of indirection. These locks are completely unrelated >>> as they're in very different contexts (different devices). >> >> Surely we should forbid this? Otherwise what's to stop someone >> from creating a loop? >> >> Cheers, >> > > Indeed that would be best, it's very easy to loop them. > We can make very various interface graphs with master/slave interface types. So, if we need something to forbid it, I think it should be generic code, not only for the bridge module.
Nikolay Aleksandrov
2021-Apr-26 15:39 UTC
[Bridge] [PATCH net 2/2] net: bridge: fix lockdep multicast_lock false positive splat
On 26/04/2021 18:17, Taehee Yoo wrote:> On 4/26/21 10:15 PM, Nikolay Aleksandrov wrote: >> On 26/04/2021 15:48, Herbert Xu wrote: > > Hi Nikolay and Herbert, > Thank you for the reviews! > >>> On Sun, Apr 25, 2021 at 07:45:27PM +0300, Nikolay Aleksandrov wrote: >>>> >>>> Ugh.. that's just very ugly. :) The setup you've described above is by all means invalid, but >>>> possible unfortunately. The bridge already checks if it's being added as a port to another >>>> bridge, but not through multiple levels of indirection. These locks are completely unrelated >>>> as they're in very different contexts (different devices). >>> >>> Surely we should forbid this? Otherwise what's to stop someone >>> from creating a loop? >>> >>> Cheers, >>> >> >> Indeed that would be best, it's very easy to loop them. >> > > We can make very various interface graphs with master/slave interface types. > So, if we need something to forbid it, I think it should be generic code, not only for the bridge module.Forbidding bridge nesting would be the correct fix. I'm surprised this is the only lock you've seen a splat about, I'd like to avoid littering the code with these custom lock helpers when it's correct. Moreover stacking most interfaces is fine even if it doesn't make any sense, but in this case (there probably are others too) we have to forbid it because looping 2 bridges is obviously bad. Cheers, Nik