All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benson Leung <bleung@google.com>
To: Andrei Kuchynski <akuchynski@chromium.org>
Cc: Lee Jones <lee@kernel.org>, Benson Leung <bleung@chromium.org>,
	Sergey Senozhatsky <senozhatsky@chromium.org>,
	Guenter Roeck <groeck@chromium.org>,
	Tzung-Bi Shih <tzungbi@kernel.org>,
	Logan Gunthorpe <logang@deltatee.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	chrome-platform@lists.linux.dev, linux-kernel@vger.kernel.org,
	stable@vger.kernel.org
Subject: Re: [PATCH] mfd: cros_ec: Delay dev_set_drvdata() until probe success
Date: Wed, 6 May 2026 03:45:36 +0000	[thread overview]
Message-ID: <afq5YKI6epFptp_g@google.com> (raw)
In-Reply-To: <20260427131721.1165078-1-akuchynski@chromium.org>

[-- Attachment #1: Type: text/plain, Size: 2666 bytes --]

Hi Andrei,

On Mon, Apr 27, 2026 at 01:17:21PM +0000, Andrei Kuchynski wrote:
> If ec_device_probe() fails, cros_ec_class_release releases memory for the
> cros_ec_dev structure. However, because the drvdata was already set,
> sub-drivers like cros_ec_typec can still retrieve the stale pointer via the
> platform device. This leads to a use-after-free when cros_ec_typec attempts
> to access &typec->ec->ec->dev on a device that has already been released.
> Move dev_set_drvdata() to ensure that the pointer is only made available
> once all initialization steps have succeeded.
> 
>  sysfs: cannot create duplicate filename '/class/chromeos/cros_ec'
>  Call trace:
>   sysfs_do_create_link_sd+0x94/0xdc
>   sysfs_create_link+0x30/0x44
>   device_add_class_symlinks+0x90/0x13c
>   device_add+0xf0/0x50c
>   ec_device_probe+0x150/0x4f0
>   platform_probe+0xa0/0xe0
>  ...
>  BUG: KASAN: invalid-access in __memcpy+0x44/0x230
>  Write at addr f5ffff809e2d33ac by task kworker/u32:5/125
>  Pointer tag: [f5], memory tag: [fe]
>  Tainted : [W]=WARN, [O]=OOT_MODULE
>  Hardware name: Google Navi unprovisioned 0x7FFFFFFF/sku0 board/sku3
>  Workqueue: events_unbound deferred_probe_work_func
>  Call trace:
>   __memcpy+0x44/0x230
>   cros_ec_check_features+0x60/0xcc [cros_ec_proto]
>   cros_typec_probe+0xe8/0x6e0 [cros_ec_typec]
>   platform_probe+0xa0/0xe0
> 
> Cc: stable@vger.kernel.org
> Fixes: 1c1d152cc5ac ("platform/chrome: cros_ec_dev - utilize new cdev_device_add helper function")
> Co-developed-by: Sergey Senozhatsky <senozhatsky@chromium.org>
> Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
> Signed-off-by: Andrei Kuchynski <akuchynski@chromium.org>

Reviewed-by: Benson Leung <bleung@chromium.org>


> ---
>  drivers/mfd/cros_ec_dev.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/mfd/cros_ec_dev.c b/drivers/mfd/cros_ec_dev.c
> index 39430dd44e30c..56fb7cceafc6c 100644
> --- a/drivers/mfd/cros_ec_dev.c
> +++ b/drivers/mfd/cros_ec_dev.c
> @@ -195,7 +195,6 @@ static int ec_device_probe(struct platform_device *pdev)
>  	if (!ec)
>  		return retval;
>  
> -	dev_set_drvdata(dev, ec);
>  	ec->ec_dev = dev_get_drvdata(dev->parent);
>  	ec->dev = dev;
>  	ec->cmd_offset = ec_platform->cmd_offset;
> @@ -237,6 +236,8 @@ static int ec_device_probe(struct platform_device *pdev)
>  	if (retval)
>  		goto failed;
>  
> +	dev_set_drvdata(dev, ec);
> +
>  	/* check whether this EC is a sensor hub. */
>  	if (cros_ec_get_sensor_count(ec) > 0) {
>  		retval = mfd_add_hotplug_devices(ec->dev,
> -- 
> 2.54.0.rc2.544.gc7ae2d5bb8-goog
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

  reply	other threads:[~2026-05-06  3:45 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-27 13:17 [PATCH] mfd: cros_ec: Delay dev_set_drvdata() until probe success Andrei Kuchynski
2026-05-06  3:45 ` Benson Leung [this message]
2026-05-14 14:23 ` (subset) " Lee Jones

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=afq5YKI6epFptp_g@google.com \
    --to=bleung@google.com \
    --cc=akuchynski@chromium.org \
    --cc=bleung@chromium.org \
    --cc=chrome-platform@lists.linux.dev \
    --cc=gregkh@linuxfoundation.org \
    --cc=groeck@chromium.org \
    --cc=lee@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=logang@deltatee.com \
    --cc=senozhatsky@chromium.org \
    --cc=stable@vger.kernel.org \
    --cc=tzungbi@kernel.org \
    /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.