On Tue, Aug 22, 2023 at 2:12 PM Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> wrote: > > On Tue, Aug 22, 2023 at 09:51:21AM +0200, Bartosz Golaszewski wrote: > > From: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> > > > > If a GPIO simulator device is unbound with interrupts still requested, > > we will hit a use-after-free issue in __irq_domain_deactivate_irq(). The > > owner of the irq domain must dispose of all mappings before destroying > > the domain object. > > ... > > > +static void gpio_sim_dispose_mappings(void *data) > > +{ > > + struct gpio_sim_chip *chip = data; > > + unsigned int i, irq; > > + > > + for (i = 0; i < chip->gc.ngpio; i++) { > > + irq = irq_find_mapping(chip->irq_sim, i); > > > + if (irq) > > This duplicates check in the following call. > Ah so it can be a direct call: irq_dispose_mapping(irq_find_mapping(chip->irq_sim, i)); ? Bart > > + irq_dispose_mapping(irq); > > + } > > +} > > -- > With Best Regards, > Andy Shevchenko > >