Hi Vicki, On Wed, Dec 06, 2023 at 10:34:06PM -0800, Vicki Pfau wrote: > Any pending requests may be holding a mutex from its own subsystem, e.g. > evdev, while waiting to be able to claim the uinput device mutex. > However, unregistering the device may try to claim that mutex, leading > to a deadlock. To prevent this from happening, we need to temporarily > give up the lock before calling input_unregister_device. I do not think we can simply give up the lock, the whole thing with UI_DEV_DESTROY allowing reusing connection to create a new input device was a huge mistake because if you try to do UI_DEV_CREATE again on the same fd you'll end up reusing whatever is in udev instance, including the state and the mutex, and will make a huge mess. I think the only reasonable way forward is change the driver so that no ioctls are accepted after UI_DEV_DESTROY and then start untangling the locking issues (possibly by dropping the lock on destroy after setting the status - I think you will not observe the lockups you mention if your application will stop using UI_DEV_DESTROY and simply closes the fd). > > Fixes: e8b95728f724 ("Input: uinput - avoid FF flush when destroying device") This is not the commit that introduced the problem, it has been there since forever. Thanks. -- Dmitry