All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Shih-Yuan Lee" <fourdollars@debian.org>
Cc: linux-hwmon@vger.kernel.org
Subject: Re: [PATCH v4 1/1] hwmon: (applesmc) Convert to hwmon_device_register_with_info
Date: Sat, 11 Jul 2026 06:17:08 +0000	[thread overview]
Message-ID: <20260711061708.ACD321F00A3A@smtp.kernel.org> (raw)
In-Reply-To: <20260711060634.5794-2-fourdollars@debian.org>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Migrating to `devm_hwmon_device_register_with_info()` inverts the teardown order, causing a NULL pointer dereference race condition on module exit.
- [Medium] Using `devm` allocations in `module_init` incorrectly ties the hwmon device lifecycle to the driver bind/unbind lifecycle rather than the module lifecycle.
--

--- Patch [1]: [PATCH v4 1/1] hwmon: (applesmc) Convert to hwmon_device_register_with_info ---
commit 64b6fb798f7a912d4278236bbe004e5659b03109
Author: Shih-Yuan Lee <fourdollars@debian.org>

hwmon: (applesmc) Convert to hwmon_device_register_with_info
    
Convert the driver to use the modern hwmon_device_register_with_info()
API. This migration moves the registration of standard sensor attributes
to the HWMON core.

> diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
> index 90a14a7f2c4c0..a93b1f91a35dd 100644
> --- a/drivers/hwmon/applesmc.c
> +++ b/drivers/hwmon/applesmc.c
[ ... ]
> @@ -1343,17 +1434,97 @@ static int __init applesmc_init(void)
>  	if (ret)
>  		goto out_smcreg;
>  
> -	ret = applesmc_create_nodes(fan_group, smcreg.fan_count);
> -	if (ret)
> +	/* allocate hwmon channel configs */
> +	temp_config = devm_kcalloc(&pdev->dev, smcreg.index_count + 1,
> +				   sizeof(*temp_config), GFP_KERNEL);

[Severity: Medium]
Does using devm_ allocations in a module initialization function cause issues
if the driver is unbound via sysfs?

Since this driver performs its setup in applesmc_init() rather than a standard
probe() function, the devm_ allocations are tied to the device-driver binding.

If an admin unbinds the driver via sysfs, devres_release_all() will free the
devm_kcalloc memory and the devm_hwmon device, but will leave non-devm managed
resources like the input device active. Additionally, without a probe()
function, rebinding won't recreate the hwmon device, leaving the driver broken
until a full module reload.

[ ... ]
> @@ -1398,12 +1566,9 @@ static int __init applesmc_init(void)
>  
>  static void __exit applesmc_exit(void)
>  {
> -	hwmon_device_unregister(hwmon_dev);

[Severity: High]
Can this lead to a NULL pointer dereference during module exit?

By replacing the manual hwmon_device_unregister() with a devm managed hwmon
device, the sysfs teardown order is delayed until platform_device_unregister()
is called at the very end of this function.

>  	applesmc_release_key_backlight();
>  	applesmc_release_light_sensor();
>  	applesmc_release_accelerometer();
> -	applesmc_destroy_nodes(temp_group);
> -	applesmc_destroy_nodes(fan_group);
>  	applesmc_destroy_nodes(info_group);
>  	applesmc_destroy_smcreg();
>  	platform_device_unregister(pdev);

However, applesmc_destroy_smcreg() is called right before the platform device
is unregistered, which frees and nullifies smcreg.index and smcreg.cache. This
creates a window where the hwmon sysfs files are still active and accessible,
but their backing structures are gone.

If a concurrent read to a sysfs file occurs during this window, it could
call into the new hwmon read callbacks and dereference the null pointer:

applesmc_hwmon_read() {
    ...
    case hwmon_temp:
        if (attr == hwmon_temp_input) {
            const char *key = smcreg.index[channel];
            s16 value;
    ...
}

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260711060634.5794-2-fourdollars@debian.org?part=1

  reply	other threads:[~2026-07-11  6:17 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-10 12:32 [PATCH 0/1] hwmon: (applesmc) Convert to hwmon_device_register_with_info Shih-Yuan Lee
2026-07-10 12:32 ` [PATCH 1/1] " Shih-Yuan Lee
2026-07-10 12:47   ` sashiko-bot
2026-07-10 14:01   ` Guenter Roeck
2026-07-10 21:10     ` Armin Wolf
2026-07-10 22:28       ` Guenter Roeck
2026-07-11  2:51         ` Shih-Yuan Lee (FourDollars)
2026-07-11  3:36 ` [PATCH v2 0/1] " Shih-Yuan Lee
2026-07-11  3:37   ` [PATCH v2 1/1] " Shih-Yuan Lee
2026-07-11  3:47     ` sashiko-bot
2026-07-11  5:39 ` [PATCH v3 0/1] " Shih-Yuan Lee
2026-07-11  5:39   ` [PATCH v3 1/1] " Shih-Yuan Lee
2026-07-11  5:52     ` sashiko-bot
2026-07-11  6:06 ` [PATCH v4 0/1] " Shih-Yuan Lee
2026-07-11  6:06   ` [PATCH v4 1/1] " Shih-Yuan Lee
2026-07-11  6:17     ` sashiko-bot [this message]
2026-07-11  7:57 ` [PATCH v5 0/3] " Shih-Yuan Lee
2026-07-11  7:57   ` [PATCH v5 1/3] hwmon: (applesmc) Cache fan positions during register initialization Shih-Yuan Lee
2026-07-11  8:06     ` sashiko-bot
2026-07-11  7:57   ` [PATCH v5 2/3] hwmon: (applesmc) Fix lockless cache validation data race Shih-Yuan Lee
2026-07-11  8:10     ` sashiko-bot
2026-07-11  7:57   ` [PATCH v5 3/3] hwmon: (applesmc) Convert to hwmon_device_register_with_info Shih-Yuan Lee
2026-07-11  8:12     ` sashiko-bot
2026-07-11  9:33 ` [PATCH v6 0/3] " Shih-Yuan Lee
2026-07-11  9:33   ` [PATCH v6 1/3] hwmon: (applesmc) Cache fan positions during register initialization Shih-Yuan Lee
2026-07-11  9:42     ` sashiko-bot
2026-07-11  9:33   ` [PATCH v6 2/3] hwmon: (applesmc) Fix lockless cache validation data race Shih-Yuan Lee
2026-07-11  9:43     ` sashiko-bot
2026-07-11  9:33   ` [PATCH v6 3/3] hwmon: (applesmc) Convert to hwmon_device_register_with_info Shih-Yuan Lee
2026-07-11  9:42     ` sashiko-bot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260711061708.ACD321F00A3A@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=fourdollars@debian.org \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.