* [PATCH v2 00/27] mfd: Assorted resource lifetime, teardown, and error-handling fixes
@ 2026-10-27 9:30 Lee Jones
2026-10-27 9:30 ` [PATCH v2 26/27] i2c: cgbc: Propagate hardware errors when polling read status Lee Jones
0 siblings, 1 reply; 2+ messages in thread
From: Lee Jones @ 2026-10-27 9:30 UTC (permalink / raw)
To: lee, Matthias Brugger, AngeloGioacchino Del Regno, linux-kernel,
linux-arm-kernel, linux-mediatek
Cc: Aaro Koskinen, Andi Shyti, Andreas Kemnade, Andy Shevchenko,
AnilKumar Ch, Arnd Bergmann, Binbin Zhou, Brent Casavant,
Chong Qiao, Corey Minyard, David Lechner, Dmitry Torokhov,
Felipe Balbi, Gyungoh Yoo, Heikki Krogerus, Hsin-Hsiung Wang,
Huacai Chen, Jarkko Nikula, Jonathan Cameron, Joshua Kinard,
Kai Svahn, Kevin Hilman, Kumar Sanghvi, Linus Walleij,
linux-crypto, linux-i2c, linux-iio, linux-input, linux-omap,
Mattias Nilsson, Mattias Wallin, Matti Vaittinen, mfd,
Mika Westerberg, Milo Kim, Ming Yu, Nuno Sá,
Pantelis Antoniou, Pat Gefre, Paul Burton, Peter Ujfalusi,
Qunqin Zhao, Rabin Vincent, Rachna Patil, Roger Quadros,
Samuel Ortiz, Sascha Hauer, Sebastian Andrzej Siewior, Shi Hao,
Srinidhi Kasagar, Stanislaw Skowronek, Stephen Warren,
Sundar Iyer, syed khasim, Thomas Bogendoerfer, Thomas Richard,
Tony Lindgren, Yinggang Gu
These issues were reported by Sashiko.
This series addresses a collection of resource lifetime, teardown
ordering, error-handling, and bounds-checking bugs across several MFD
drivers.
v1 => v2:
- Collected Acked-by, Reviewed-by, and Tested-by tags from the list
- Dropped "mfd: cgbc: Zero-initialise version buffer in
cgbc_get_version()" in favour of Thomas Richard's upcoming central
cgbc_command() validation series
- Restored Fixes: tags (without Cc: stable@vger.kernel.org) on the four
non-Stable MFD cell stack-pointer clean-ups (ls2kbmc, bd96801,
ti_am335x_tscadc, and db8500-prcmu)
Cc: Aaro Koskinen <aaro.koskinen@iki.fi>
Cc: Andi Shyti <andi.shyti@kernel.org>
Cc: Andreas Kemnade <andreas@kemnade.info>
Cc: Andy Shevchenko <andy@kernel.org>
Cc: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Cc: AnilKumar Ch <anilkumar@ti.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Binbin Zhou <zhoubinbin@loongson.cn>
Cc: Brent Casavant <bcasavan@sgi.com>
Cc: Chong Qiao <qiaochong@loongson.cn>
Cc: Corey Minyard <corey@minyard.net>
Cc: David Lechner <dlechner@baylibre.com>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Felipe Balbi <balbi@ti.com>
Cc: Gyungoh Yoo <jack.yoo@maxim-ic.com>
Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Cc: Hsin-Hsiung Wang <hsin-hsiung.wang@mediatek.com>
Cc: Huacai Chen <chenhuacai@kernel.org>
Cc: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Cc: Jonathan Cameron <jic23@kernel.org>
Cc: Joshua Kinard <linux@kumba.dev>
Cc: Kai Svahn <kai.svahn@nokia.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc: Kumar Sanghvi <kumar.sanghvi@stericsson.com>
Cc: Linus Walleij <linusw@kernel.org>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-crypto@vger.kernel.org
Cc: linux-i2c@vger.kernel.org
Cc: linux-iio@vger.kernel.org
Cc: linux-input@vger.kernel.org
Cc: linux-mediatek@lists.infradead.org
Cc: linux-omap@vger.kernel.org
Cc: Matthias Brugger <matthias.bgg@gmail.com>
Cc: Mattias Nilsson <mattias.i.nilsson@stericsson.com>
Cc: Mattias Wallin <mattias.wallin@stericsson.com>
Cc: Matti Vaittinen <mazziesaccount@gmail.com>
Cc: mfd@lists.linux.dev
Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
Cc: Milo Kim <woogyom.kim@gmail.com>
Cc: Ming Yu <tmyu0@nuvoton.com>
Cc: "Nuno Sá" <nuno.sa@analog.com>
Cc: Pantelis Antoniou <panto@antoniou-consulting.com>
Cc: Pat Gefre <pfg@sgi.com>
Cc: Paul Burton <paulburton@kernel.org>
Cc: Peter Ujfalusi <peter.ujfalusi@ti.com>
Cc: Qunqin Zhao <zhaoqunqin@loongson.cn>
Cc: Rabin Vincent <rabin.vincent@stericsson.com>
Cc: Rachna Patil <rachna@ti.com>
Cc: Roger Quadros <rogerq@kernel.org>
Cc: Samuel Ortiz <sameo@linux.intel.com>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: Shi Hao <i.shihao.999@gmail.com>
Cc: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
Cc: Stanislaw Skowronek <skylark@unaligned.org>
Cc: Stephen Warren <swarren@nvidia.com>
Cc: Sundar Iyer <sundar.iyer@stericsson.com>
Cc: syed khasim <x0khasim@ti.com>
Cc: Thomas Bogendoerfer <tbogendoerfer@suse.de>
Cc: Thomas Richard <thomas.richard@bootlin.com>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Yinggang Gu <guyinggang@loongson.cn>
Lee Jones (27):
mfd: nct6694: Allocate USB DMA buffers with kzalloc_obj()
mfd: ls2kbmc: Unregister GPIO GSI via devm_add_action_or_reset()
mfd: ls2kbmc: Cancel reset work on teardown via devm_work_autocancel()
mfd: ls2kbmc: Allocate simplefb platform_data on the heap
mfd: bd96801: Allocate watchdog IRQ resource on the heap
mfd: ti_am335x_tscadc: Retrieve parent driver data via
dev_get_drvdata()
mfd: db8500-prcmu: Make AB8500 cell and IRQ resource static
mfd: nct6694: Do not resubmit interrupt URB on endpoint stall (-EPIPE)
mfd: ioc3: Request parent IRQ via request_irq() and free before domain
removal
mfd: intel-lpss: Remove registered MFD child devices on probe failure
mfd: max8907: Manage power-off handler via
devm_register_sys_off_handler()
mfd: twl-core: Clear pm_power_off callback in twl_remove()
mfd: twl-core: Clear twl_priv pointer on teardown and probe failure
mfd: loongson-se: Check return value of dma_set_mask_and_coherent()
mfd: loongson-se: Zero-initialise controller command structures
mfd: loongson-se: Reinitialise completions and wait uninterruptibly
for commands
mfd: loongson-se: Zero-allocate driver data and initialise engine
completions in probe
mfd: loongson-se: Prevent out-of-bounds engine access in
se_irq_handler()
mfd: loongson-se: Stop controller and mask interrupts on teardown and
shutdown
mfd: loongson-se: Validate engine ID, DMA buffer size, and IRQ
registration
mfd: abx500-core: Unregister device ops on devm release
mfd: ab8500-core: Register sysfs attribute groups via
devm_device_add_group()
mfd: tps65217: Manage IRQ domain teardown via devres
mfd: mt6397: Manage IRQ domain lifecycle with devres
mfd: mt6397: Unregister PM notifier on probe failure and unbind
i2c: cgbc: Propagate hardware errors when polling read status
mfd: ti_am335x_tscadc: Remove redundant ti_tscadc_dev_get() helper
drivers/i2c/busses/i2c-cgbc.c | 27 ++++--
drivers/iio/adc/ti_am335x_adc.c | 2 +-
drivers/input/touchscreen/ti_am335x_tsc.c | 2 +-
drivers/mfd/ab8500-core.c | 11 +--
drivers/mfd/abx500-core.c | 29 +++---
drivers/mfd/db8500-prcmu.c | 8 +-
drivers/mfd/intel-lpss.c | 1 +
drivers/mfd/ioc3.c | 32 ++++---
drivers/mfd/loongson-se.c | 110 +++++++++++++++++-----
drivers/mfd/ls2k-bmc-core.c | 27 ++++--
drivers/mfd/max8907.c | 28 ++++--
drivers/mfd/mt6358-irq.c | 17 +++-
drivers/mfd/mt6397-core.c | 4 +-
drivers/mfd/mt6397-irq.c | 31 +++++-
drivers/mfd/nct6694.c | 23 +++--
drivers/mfd/rohm-bd96801.c | 11 ++-
drivers/mfd/ti_am335x_tscadc.c | 7 +-
drivers/mfd/tps65217.c | 40 ++++----
drivers/mfd/twl-core.c | 45 +++++----
include/linux/mfd/loongson-se.h | 8 +-
include/linux/mfd/ti_am335x_tscadc.h | 7 --
21 files changed, 326 insertions(+), 144 deletions(-)
--
2.56.0.307.g5fe7bd680c-goog
^ permalink raw reply [flat|nested] 2+ messages in thread* [PATCH v2 26/27] i2c: cgbc: Propagate hardware errors when polling read status
2026-10-27 9:30 [PATCH v2 00/27] mfd: Assorted resource lifetime, teardown, and error-handling fixes Lee Jones
@ 2026-10-27 9:30 ` Lee Jones
0 siblings, 0 replies; 2+ messages in thread
From: Lee Jones @ 2026-10-27 9:30 UTC (permalink / raw)
To: lee, Thomas Richard, Andi Shyti, linux-i2c, linux-kernel; +Cc: stable
In cgbc_i2c_xfer_msg(), read_poll_timeout() uses the same ret variable
to store the polled return value of cgbc_i2c_get_status() and the
timeout result of the macro itself. When cgbc_i2c_get_status() returns
a negative error code (such as -EIO on an I2C NACK), the loop condition
ret != CGBC_I2C_STAT_BUSY evaluates to true and read_poll_timeout()
overwrites ret with 0. The driver then issues CGBC_I2C_CMD_DATA, which
completes with CGBC_STATUS_CMD_READY without populating msg->buf,
leaving uninitialised heap memory in the caller's read buffer.
Store the polled status in a separate variable, verify that it equals
CGBC_I2C_STAT_DAT, and check that CGBC_I2C_CMD_DATA returns the expected
number of bytes.
Fixes: 6894f640b8f3 ("i2c: Congatec Board Controller i2c bus driver")
Closes: https://sashiko.dev/#/bug/linux-66cbf4b1-a219-4012-969d-236417bf419a
Cc: stable@vger.kernel.org
Reviewed-by: Thomas Richard (congatec GmbH) <thomas.richard@bootlin.com>
Tested-by: Thomas Richard (congatec GmbH) <thomas.richard@bootlin.com>
Signed-off-by: Lee Jones <lee@kernel.org>
---
drivers/i2c/busses/i2c-cgbc.c | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)
diff --git a/drivers/i2c/busses/i2c-cgbc.c b/drivers/i2c/busses/i2c-cgbc.c
index 25a74fa51aa0..9909c25f0b18 100644
--- a/drivers/i2c/busses/i2c-cgbc.c
+++ b/drivers/i2c/busses/i2c-cgbc.c
@@ -205,9 +205,9 @@ static int cgbc_i2c_xfer_msg(struct i2c_adapter *adap)
struct cgbc_device_data *cgbc = i2c->cgbc;
struct i2c_msg *msg = i2c->msg;
u8 cmd[CGBC_I2C_CMD_SIZE];
- int ret, max_len, len, i;
+ int ret, status, max_len, len, i;
unsigned int cmd_len;
- u8 cmd_data;
+ u8 cmd_data, data_len;
struct cgbc_i2c_transfer xfer = {
.bus_id = algo_data->bus_id,
@@ -266,17 +266,32 @@ static int cgbc_i2c_xfer_msg(struct i2c_adapter *adap)
if (ret)
goto err;
- ret = read_poll_timeout(cgbc_i2c_get_status, ret,
- ret != CGBC_I2C_STAT_BUSY, 0,
+ ret = read_poll_timeout(cgbc_i2c_get_status, status,
+ status != CGBC_I2C_STAT_BUSY, 0,
2 * algo_data->read_maxtime_us, false, adap);
- if (ret < 0)
+ if (ret)
goto err;
+ if (status < 0) {
+ ret = status;
+ goto err;
+ }
+
+ if (status != CGBC_I2C_STAT_DAT) {
+ ret = -EIO;
+ goto err;
+ }
+
cmd_data = CGBC_I2C_CMD_DATA | algo_data->bus_id;
ret = cgbc_command(cgbc, &cmd_data, sizeof(cmd_data),
- msg->buf + i2c->pos, len, NULL);
+ msg->buf + i2c->pos, len, &data_len);
if (ret)
goto err;
+
+ if (data_len != len) {
+ ret = -EIO;
+ goto err;
+ }
}
if (len == (msg->len - i2c->pos)) {
--
2.56.0.307.g5fe7bd680c-goog
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-10-27 10:38 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-27 9:30 [PATCH v2 00/27] mfd: Assorted resource lifetime, teardown, and error-handling fixes Lee Jones
2026-10-27 9:30 ` [PATCH v2 26/27] i2c: cgbc: Propagate hardware errors when polling read status Lee Jones
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox