All of lore.kernel.org
 help / color / mirror / Atom feed
From: Adrian Hunter <adrian.hunter@intel.com>
To: alexandre.belloni@bootlin.com
Cc: Frank.Li@nxp.com, akhilrajeev@nvidia.com, rafael@kernel.org,
	linux-i3c@lists.infradead.org, linux-kernel@vger.kernel.org,
	linux-pci@vger.kernel.org, linux-pm@vger.kernel.org
Subject: [PATCH V3 04/14] i3c: master: Fix use-after-free of master->this
Date: Tue,  4 Aug 2026 16:38:00 +0300	[thread overview]
Message-ID: <20260804133810.184905-5-adrian.hunter@intel.com> (raw)
In-Reply-To: <20260804133810.184905-1-adrian.hunter@intel.com>

sysfs attribute callbacks for the master controller device dereference
master->this.  However, master->this is currently freed in
i3c_master_detach_free_devs(), before the master device itself is
released.

As a result, sysfs accesses can dereference a freed master->this
pointer, leading to a use-after-free.

Keep master->this alive until i3c_masterdev_release(), where all users
of the master device have gone away and the associated sysfs state is
being torn down.  Do not free master->this as part of the normal device
detach path.

Fixes: 3a379bbcea0a ("i3c: Add core I3C infrastructure")
Cc: stable@vger.kernel.org
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---


Changes in V3:

	New patch


 drivers/i3c/master.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
index abb582645a2e..4839c1c186eb 100644
--- a/drivers/i3c/master.c
+++ b/drivers/i3c/master.c
@@ -842,6 +842,11 @@ static struct attribute *i3c_masterdev_attrs[] = {
 };
 ATTRIBUTE_GROUPS(i3c_masterdev);
 
+static void i3c_master_free_i3c_dev(struct i3c_dev_desc *dev)
+{
+	kfree(dev);
+}
+
 static void i3c_masterdev_release(struct device *dev)
 {
 	struct i3c_master_controller *master = dev_to_i3cmaster(dev);
@@ -854,6 +859,8 @@ static void i3c_masterdev_release(struct device *dev)
 	i3c_bus_cleanup(bus);
 
 	fwnode_handle_put(dev->fwnode);
+
+	i3c_master_free_i3c_dev(master->this);
 }
 
 static const struct device_type i3c_masterdev_type = {
@@ -1125,11 +1132,6 @@ static void i3c_device_release(struct device *dev)
 	kfree(i3cdev);
 }
 
-static void i3c_master_free_i3c_dev(struct i3c_dev_desc *dev)
-{
-	kfree(dev);
-}
-
 static struct i3c_dev_desc *
 i3c_master_alloc_i3c_dev(struct i3c_master_controller *master,
 			 const struct i3c_device_info *info)
@@ -2286,7 +2288,8 @@ static void i3c_master_detach_free_devs(struct i3c_master_controller *master)
 					i3cdev->boardinfo->init_dyn_addr,
 					I3C_ADDR_SLOT_FREE);
 
-		i3c_master_free_i3c_dev(i3cdev);
+		if (i3cdev != master->this)
+			i3c_master_free_i3c_dev(i3cdev);
 	}
 
 	list_for_each_entry_safe(i2cdev, i2ctmp, &master->bus.devs.i2c,
-- 
2.53.0


-- 
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c

WARNING: multiple messages have this Message-ID (diff)
From: Adrian Hunter <adrian.hunter@intel.com>
To: alexandre.belloni@bootlin.com
Cc: Frank.Li@nxp.com, akhilrajeev@nvidia.com, rafael@kernel.org,
	linux-i3c@lists.infradead.org, linux-kernel@vger.kernel.org,
	linux-pci@vger.kernel.org, linux-pm@vger.kernel.org
Subject: [PATCH V3 04/14] i3c: master: Fix use-after-free of master->this
Date: Tue,  4 Aug 2026 16:38:00 +0300	[thread overview]
Message-ID: <20260804133810.184905-5-adrian.hunter@intel.com> (raw)
In-Reply-To: <20260804133810.184905-1-adrian.hunter@intel.com>

sysfs attribute callbacks for the master controller device dereference
master->this.  However, master->this is currently freed in
i3c_master_detach_free_devs(), before the master device itself is
released.

As a result, sysfs accesses can dereference a freed master->this
pointer, leading to a use-after-free.

Keep master->this alive until i3c_masterdev_release(), where all users
of the master device have gone away and the associated sysfs state is
being torn down.  Do not free master->this as part of the normal device
detach path.

Fixes: 3a379bbcea0a ("i3c: Add core I3C infrastructure")
Cc: stable@vger.kernel.org
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---


Changes in V3:

	New patch


 drivers/i3c/master.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
index abb582645a2e..4839c1c186eb 100644
--- a/drivers/i3c/master.c
+++ b/drivers/i3c/master.c
@@ -842,6 +842,11 @@ static struct attribute *i3c_masterdev_attrs[] = {
 };
 ATTRIBUTE_GROUPS(i3c_masterdev);
 
+static void i3c_master_free_i3c_dev(struct i3c_dev_desc *dev)
+{
+	kfree(dev);
+}
+
 static void i3c_masterdev_release(struct device *dev)
 {
 	struct i3c_master_controller *master = dev_to_i3cmaster(dev);
@@ -854,6 +859,8 @@ static void i3c_masterdev_release(struct device *dev)
 	i3c_bus_cleanup(bus);
 
 	fwnode_handle_put(dev->fwnode);
+
+	i3c_master_free_i3c_dev(master->this);
 }
 
 static const struct device_type i3c_masterdev_type = {
@@ -1125,11 +1132,6 @@ static void i3c_device_release(struct device *dev)
 	kfree(i3cdev);
 }
 
-static void i3c_master_free_i3c_dev(struct i3c_dev_desc *dev)
-{
-	kfree(dev);
-}
-
 static struct i3c_dev_desc *
 i3c_master_alloc_i3c_dev(struct i3c_master_controller *master,
 			 const struct i3c_device_info *info)
@@ -2286,7 +2288,8 @@ static void i3c_master_detach_free_devs(struct i3c_master_controller *master)
 					i3cdev->boardinfo->init_dyn_addr,
 					I3C_ADDR_SLOT_FREE);
 
-		i3c_master_free_i3c_dev(i3cdev);
+		if (i3cdev != master->this)
+			i3c_master_free_i3c_dev(i3cdev);
 	}
 
 	list_for_each_entry_safe(i2cdev, i2ctmp, &master->bus.devs.i2c,
-- 
2.53.0


  parent reply	other threads:[~2026-08-04 13:38 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-04 13:37 [PATCH V3 00/14] i3c: Support IBI-based system wakeup Adrian Hunter
2026-08-04 13:37 ` Adrian Hunter
2026-08-04 13:37 ` [PATCH V3 01/14] i3c: master: Fix recursive locking during device registration Adrian Hunter
2026-08-04 13:37   ` Adrian Hunter
2026-08-04 14:51   ` sashiko-bot
2026-08-04 14:51     ` sashiko-bot
2026-08-04 16:46   ` Frank Li
2026-08-04 16:46     ` Frank Li
2026-08-04 16:50     ` Adrian Hunter
2026-08-04 16:50       ` Adrian Hunter
2026-08-04 22:10       ` Frank Li
2026-08-04 22:10         ` Frank Li
2026-08-04 13:37 ` [PATCH V3 02/14] i3c: Fix unlocked dereference of dev->desc in i3c_device_get_supported_xfer_mode() Adrian Hunter
2026-08-04 13:37   ` Adrian Hunter
2026-08-04 15:09   ` sashiko-bot
2026-08-04 15:09     ` sashiko-bot
2026-08-04 15:38     ` Adrian Hunter
2026-08-04 15:38       ` Adrian Hunter
2026-08-04 13:37 ` [PATCH V3 03/14] i3c: master: Do not treat master device as a duplicate target Adrian Hunter
2026-08-04 13:37   ` Adrian Hunter
2026-08-04 14:17   ` sashiko-bot
2026-08-04 14:17     ` sashiko-bot
2026-08-04 16:50   ` Frank Li
2026-08-04 16:50     ` Frank Li
2026-08-04 17:33   ` Mukesh Savaliya
2026-08-04 17:33     ` Mukesh Savaliya
2026-08-04 13:38 ` Adrian Hunter [this message]
2026-08-04 13:38   ` [PATCH V3 04/14] i3c: master: Fix use-after-free of master->this Adrian Hunter
2026-08-04 14:10   ` sashiko-bot
2026-08-04 14:10     ` sashiko-bot
2026-08-04 15:50     ` Adrian Hunter
2026-08-04 15:50       ` Adrian Hunter
2026-08-04 13:38 ` [PATCH V3 05/14] i3c: Make dev->desc locking assumptions explicit Adrian Hunter
2026-08-04 13:38   ` Adrian Hunter
2026-08-04 14:18   ` sashiko-bot
2026-08-04 14:18     ` sashiko-bot
2026-08-04 18:08   ` Mukesh Savaliya
2026-08-04 18:08     ` Mukesh Savaliya
2026-08-04 13:38 ` [PATCH V3 06/14] i3c: master: Fix potential UAF in i3c_device_uevent() Adrian Hunter
2026-08-04 13:38   ` Adrian Hunter
2026-08-04 15:08   ` sashiko-bot
2026-08-04 15:08     ` sashiko-bot
2026-08-04 18:12   ` Mukesh Savaliya
2026-08-04 18:12     ` Mukesh Savaliya
2026-08-04 13:38 ` [PATCH V3 07/14] i3c: master: Fix potential UAF in i3c_device_match() Adrian Hunter
2026-08-04 13:38   ` Adrian Hunter
2026-08-04 15:11   ` sashiko-bot
2026-08-04 15:11     ` sashiko-bot
2026-08-04 17:14     ` Adrian Hunter
2026-08-04 17:14       ` Adrian Hunter
2026-08-04 13:38 ` [PATCH V3 08/14] i3c: master: Support IBI-based wakeup capability Adrian Hunter
2026-08-04 13:38   ` Adrian Hunter
2026-08-04 14:05   ` sashiko-bot
2026-08-04 14:05     ` sashiko-bot
2026-08-04 18:21   ` Mukesh Savaliya
2026-08-04 18:21     ` Mukesh Savaliya
2026-08-04 13:38 ` [PATCH V3 09/14] i3c: master: Report wakeup events for IBIs Adrian Hunter
2026-08-04 13:38   ` Adrian Hunter
2026-08-04 15:10   ` sashiko-bot
2026-08-04 15:10     ` sashiko-bot
2026-08-04 16:12     ` Adrian Hunter
2026-08-04 16:12       ` Adrian Hunter
2026-08-04 13:38 ` [PATCH V3 10/14] i3c: master: Add helper to query bus wakeup requirements Adrian Hunter
2026-08-04 13:38   ` Adrian Hunter
2026-08-04 13:53   ` sashiko-bot
2026-08-04 13:53     ` sashiko-bot
2026-08-04 18:52   ` Mukesh Savaliya
2026-08-04 18:52     ` Mukesh Savaliya
2026-08-04 13:38 ` [PATCH V3 11/14] i3c: master: Reject IBI requests from non-IBI-capable devices Adrian Hunter
2026-08-04 13:38   ` Adrian Hunter
2026-08-04 14:28   ` sashiko-bot
2026-08-04 14:28     ` sashiko-bot
2026-08-04 13:38 ` [PATCH V3 12/14] i3c: mipi-i3c-hci-pci: Propagate I3C wakeup requirements to PCI Adrian Hunter
2026-08-04 13:38   ` Adrian Hunter
2026-08-04 15:05   ` sashiko-bot
2026-08-04 15:05     ` sashiko-bot
2026-08-04 13:38 ` [PATCH V3 13/14] i3c: mipi-i3c-hci: Factor out i3c_hci_sysdev() Adrian Hunter
2026-08-04 13:38   ` Adrian Hunter
2026-08-04 14:40   ` sashiko-bot
2026-08-04 14:40     ` sashiko-bot
2026-08-04 19:28   ` Mukesh Savaliya
2026-08-04 19:28     ` Mukesh Savaliya
2026-08-04 13:38 ` [PATCH V3 14/14] i3c: mipi-i3c-hci: Advertise IBI wakeup capability Adrian Hunter
2026-08-04 13:38   ` Adrian Hunter
2026-08-04 14:45   ` sashiko-bot
2026-08-04 14:45     ` 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=20260804133810.184905-5-adrian.hunter@intel.com \
    --to=adrian.hunter@intel.com \
    --cc=Frank.Li@nxp.com \
    --cc=akhilrajeev@nvidia.com \
    --cc=alexandre.belloni@bootlin.com \
    --cc=linux-i3c@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rafael@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.