Re: cdev/devm_* issues (was Re: [TECH TOPIC] Rust for Linux)

Andy Shevchenko
2021-07-21T15:49:57Z

On Wed, Jul 21, 2021 at 4:46 PM Linus Walleij <linus.walleij@linaro.org> wrote:
> On Wed, Jul 14, 2021 at 12:35 AM Andy Shevchenko
> <andy.shevchenko@gmail.com> wrote:
>
> > To me described scenario sounds rather like an object lifetime possible issue.
> > In any case, shouldn’t VFS guarantee by a reference counting that
> > gpiochip_remove() wouldn’t be called while file descriptor is in use?
> > Or am I looking from the wrong end here?
>
> What happens is that the GPIO device disappears (such as unplugging
> a USB GPIO expander) while a multithreaded userspace is hammering
> exotic ioctl() commands to the same device like crazy.
>
> Under these circumstances (which should be rare, but you know,
> developers) it could happen that an ioctl() sneak in before the
> gpio_chip pointer is NULL if I read the code right.

So, gpio_chip is NULL but gpiodev is not NULL, correct?
If so, it means that the above mentioned scenario applies to the
latter one and I understand the checks.

--
With Best Regards,
Andy Shevchenko