On Thu, Apr 25, 2019 at 04:58:20PM -0400, Alan Stern wrote: > On Thu, 25 Apr 2019, Johan Hovold wrote: > > > This series fixes a couple of long-standing issues in USB serial and > > cdc-acm which essentially share the same implementation. > > > > As noted by Oliver a few years back, read-urb completion can race with > > unthrottle() running on another CPU and this can potentially lead to > > memory corruption. This particular bug in cdc-acm was unfortunately > > reintroduced a year later. > > > > There's also a second race due to missing memory barriers which could > > theoretically lead to the port staying throttled until reopened on > > weakly ordered systems. A second set of memory barriers should address > > that. > > > > I would appreciate your keen eyes on this one to make sure I got the > > barriers right. > > > > I noticed there's some on-going discussion about the atomic memory > > barriers that Alan's involved in, and I'll try to catch up on his > > data-race work as well. I'm still a little concerned about whether the > > smp_mb__before_atomic() is sufficient to prevent the compiler from > > messing things up without adding READ_ONCE(). > > I think your changes in patches 1 and 4 are correct. Regardless of the > issues still undergoing discussion elsewhere, smp_mb__before_atomic() > should cause both the compiler and the CPU to order every preceding > operation (READ_ONCE or not) before the atomic op. Ok, thanks for taking a look! Johan