Messages in this thread | | | From | Keith Owens <> | Subject | Re: Driverfs updates | Date | Tue, 09 Jul 2002 09:33:24 +1000 |
| |
On Mon, 8 Jul 2002 11:41:52 -0700 (PDT), Patrick Mochel <mochel@osdl.org> wrote: >- Add struct module * owner field to struct device_driver >- Change {get,put}_driver to use it
struct device_driver * get_driver(struct device_driver * drv) { if (drv && drv->owner) if (!try_inc_mod_count(drv->owner)) return NULL; return drv; }
is racy. The module can be unloaded after if (drv->owner) and before try_inc_mod_count. To prevent that race, drv itself must be locked around calls to get_driver().
The "normal" method is to have a high level lock that controls the drv list and to take that lock in the register and unregister routines and around the call to try_inc_mod_count. drv->bus->lock is no good, anything that relies on reading drv without a lock or module reference count is racy. I suggest you add a global driverfs_lock.
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |