Re: Several races in "usbnet" module (kernel 4.1.x)

From: Oliver Neukum
Date: Mon Jul 27 2015 - 06:00:49 EST


On Fri, 2015-07-24 at 17:41 +0300, Eugene Shatokhin wrote:
> 23.07.2015 12:15, Oliver Neukum ÐÐÑÐÑ:

> From what I see now in Documentation/atomic_ops.txt, stores to the
> properly aligned memory locations are in fact atomic.

They are, but again only with respect to each other.

> So, I think, the situation you described above cannot happen for
> dev->flags, which is good. No need to address that in the patch. The
> race might be harmless after all.
>
> If I understand the code correctly now, dev->flags is set to 0 in
> usbnet_stop() so that the worker function (usbnet_deferred_kevent) would

Yes, particularly not reschedule itself.

> do nothing, should it start later. If so, how about adding memory
> barriers for all CPUs to see dev->flags is 0 before other things?

Taking a lock, as del_timer_sync() does, implies a memory barrier,
as does a work.

Regards
Oliver


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/