Re: [PATCH] driver core: faux: fix root device registration

From: Danilo Krummrich

Date: Fri Apr 24 2026 - 07:42:26 EST


On Fri Apr 24, 2026 at 12:22 PM CEST, Johan Hovold wrote:
> diff --git a/drivers/base/faux.c b/drivers/base/faux.c
> index fb3e42f21362..402ed119dfdf 100644
> --- a/drivers/base/faux.c
> +++ b/drivers/base/faux.c
> @@ -133,6 +133,9 @@ struct faux_device *faux_device_create_with_groups(const char *name,
> struct device *dev;
> int ret;
>
> + if (IS_ERR_OR_NULL(faux_bus_root))
> + return NULL;

As Greg mentioned, if this happens we already have a much bigger fundamental
problem earlier in the boot process.

Anyway, I think this check only catches when root_device_register() fails, but
everything that comes after root_device_register() in faux_bus_init() still
leaves us with a dangling pointer.

> +
> faux_obj = kzalloc_obj(*faux_obj);
> if (!faux_obj)
> return NULL;
> @@ -234,17 +237,9 @@ int __init faux_bus_init(void)
> {
> int ret;
>
> - faux_bus_root = kzalloc_obj(*faux_bus_root);
> - if (!faux_bus_root)
> - return -ENOMEM;
> -
> - dev_set_name(faux_bus_root, "faux");
> -
> - ret = device_register(faux_bus_root);
> - if (ret) {
> - put_device(faux_bus_root);
> - return ret;
> - }
> + faux_bus_root = root_device_register("faux");
> + if (IS_ERR(faux_bus_root))
> + return PTR_ERR(faux_bus_root);
>
> ret = bus_register(&faux_bus_type);
> if (ret)
> @@ -260,6 +255,6 @@ int __init faux_bus_init(void)
> bus_unregister(&faux_bus_type);
>
> error_bus:
> - device_unregister(faux_bus_root);
> + root_device_unregister(faux_bus_root);
> return ret;
> }
> --
> 2.53.0