[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/2] libxl/devd: fix a race with concurrent device addition/removal
On Wed, May 10, 2017 at 11:43:57AM +0100, Roger Pau Monne wrote: > On Wed, May 10, 2017 at 11:32:45AM +0100, Ian Jackson wrote: > > Roger Pau Monne writes ("[PATCH 1/2] libxl/devd: fix a race with concurrent > > device addition/removal"): > > > Current code can free the libxl__device inside of the > > > libxl__ddomain_device > > > before the addition has finished if a removal happens while an addition is > > > still in process: > > > > > > backend_watch_callback > > > | > > > v > > > add_device > > > | backend_watch_callback > > > (async operation) | > > > | v > > > | remove_device > > > | | > > > | V > > > | device_complete > > > | (free libxl__device) > > > v > > > device_complete > > > (deref libxl__device) > > > > > > Fix this by creating a temporary copy of the libxl__device, that's > > > tracked by the GC of the nested async operation. This ensures that > > > the libxl__device used by the async operations cannot be freed while > > > being used. > > > > Doesn't this arrange that the remove hotplug script will be invoked > > while the add hotplug script is still running ? > > That's indeed possible (either with the current code or with this patch), > although unlikely. The async code called by remove_device will wait for the > backend to switch to state 6, while the add_device code will wait for state 2 > IIRC (one can change those states to make them clash probably). > > > Is that really desirable (or allowed!) ? > > Hm, no, I don't think it's desirable at all. I still think this is better that > the previous code (at lest it doesn't dereference libxl__device anymore), but > clearly needs further improvements. > > Also, it seems to me the same can happen even without driver domains, if a > user > executes concurrent block-{attach/detach} operations, but maybe I'm missing > something? > There is a lot of locking for all the device add / remove code. See libxl_internal.h L2588. > Roger. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |