On Fri, Oct 06, 2023 at 07:43:12PM +0300, Andy Shevchenko wrote: > The code to create the child platform device is essentially the same as > what platform_device_register_full() does, so change over to use > that same function to reduce duplication. > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> > --- > v2: (hopefully) fixed run-time NULL-dereference (LKP) > drivers/usb/usbip/vhci_hcd.c | 55 +++++++++++++----------------------- > 1 file changed, 20 insertions(+), 35 deletions(-) > > diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c > index 37d1fc34e8a5..f845b91848b9 100644 > --- a/drivers/usb/usbip/vhci_hcd.c > +++ b/drivers/usb/usbip/vhci_hcd.c > - for (i = 0; i < vhci_num_controllers; i++) { > - void *vhci = &vhcis[i]; The void *vhci here is intended platform_device_add_data "Add a copy of platform specific data to the platform device's platform_data pointer" however, vhcis is static so it is not intended to be copied (the pdev inside struct vhci might be the cause) > - ret = platform_device_add_data(vhcis[i].pdev, &vhci, sizeof(void *)); > - if (ret) > - goto err_driver_register; > - } > - > ret = platform_driver_register(&vhci_driver); > if (ret) > goto err_driver_register; > > for (i = 0; i < vhci_num_controllers; i++) { > - ret = platform_device_add(vhcis[i].pdev); > + struct platform_device_info pdevinfo = { > + .name = driver_name, > + .id = i, > + .data = &vhcis[i], here should be a &vhci > + .size_data = sizeof(void *), > + }; > + > + vhcis[i].pdev = platform_device_register_full(&pdevinfo); > + ret = PTR_ERR_OR_ZERO(vhcis[i].pdev); > } > -- > 2.40.0.1.gaa8946217a0b I have reproduced the boot error reported by syzbot in https://lore.kernel.org/linux-usb/00000000000029242706077f3145@xxxxxxxxxx/ https://lore.kernel.org/linux-usb/0000000000007634c1060793197c@xxxxxxxxxx/ and adding back void *vhci fixed it I'll send a patch.