lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20250625-irate-cursive-fa0de9009012@spud>
Date: Wed, 25 Jun 2025 14:27:51 +0100
From: Conor Dooley <conor@...nel.org>
To: Conor Dooley <conor.dooley@...rochip.com>
Cc: linux-i2c@...r.kernel.org,
	Daire McNamara <daire.mcnamara@...rochip.com>,
	Andi Shyti <andi.shyti@...nel.org>, linux-kernel@...r.kernel.org
Subject: Re: [RESEND PATCH v1] i2c: microchip-core: re-fix fake detections w/
 i2cdetect

On Thu, Jun 12, 2025 at 12:12:49PM +0100, Conor Dooley wrote:
> Introducing support for smbus re-broke i2cdetect, causing it to detect
> devices at every i2c address, just as it did prior to being fixed in
> commit 49e1f0fd0d4cb ("i2c: microchip-core: fix "ghost" detections").
> This was caused by an oversight, where the new smbus code failed to
> check the return value of mchp_corei2c_xfer(). Check it, and propagate
> any errors.
> 
> Fixes: d6ceb40538263 ("i2c: microchip-corei2c: add smbus support")
> Signed-off-by: Conor Dooley <conor.dooley@...rochip.com>
> ---
> 
> Resending cos I think it attempted a send using my korg address on a
> network where that is not possible.

Seemingly this patch has exposed an issue that causes a hang that was
not noticed previously:
# cd /sys/bus/iio/devices/iio\:device0
# cat *
VDDREG_IBUS_1
0
[   92.178899] ------------[ cut here ]------------
[   92.178921] WARNING: CPU: 0 PID: 291 at kernel/workqueue.c:2496 __queue_delayed_work+0xb4/0xbe
[   92.178981] Modules linked in: pac1934 industrialio autofs4
[   92.179024] CPU: 0 UID: 0 PID: 291 Comm: cat Not tainted 6.12.22 #1
[   92.179045] Hardware name: Microchip PolarFire-SoC Icicle Kit (DT)
[   92.179055] epc : __queue_delayed_work+0xb4/0xbe
[   92.179081]  ra : mod_delayed_work_on+0x4a/0xa6
[   92.179107] epc : ffffffff8002b2f0 ra : ffffffff8002b3ba sp : ffffffc600863b70
[   92.179122]  gp : ffffffff812d6068 tp : ffffffe5a5bc24c0 t0 : 0000000000000000
[   92.179136]  t1 : 000000000000ff00 t2 : ffffffff80c01210 s0 : ffffffc600863b90
[   92.179150]  s1 : ffffffe5a2aa7568 a0 : 0000000000000040 a1 : ffffffe5a2054000
[   92.179164]  a2 : ffffffe5a2aa7568 a3 : 0000000000003a98 a4 : 0000000000000000
[   92.179178]  a5 : ffffffff8002b1fa a6 : 0000000000000000 a7 : 0000000000000000
[   92.179191]  s2 : 0000000000000040 s3 : ffffffe5a2054000 s4 : 0000000000003a98
[   92.179205]  s5 : 0000000000000000 s6 : ffffffc600863c5c s7 : ffffffc600863c58
[   92.179219]  s8 : 0000000000400cc0 s9 : fffffffffffff000 s10: 000000007ffff000
[   92.179233]  s11: ffffffe5a2806128 t3 : 0000000000ff0000 t4 : 0000000000000000
[   92.179247]  t5 : 0000000000000000 t6 : 0000000000000000
[   92.179258] status: 0000000200000100 badaddr: 0000000000000000 cause: 0000000000000003
[   92.179273] [<ffffffff8002b2f0>] __queue_delayed_work+0xb4/0xbe
[   92.179302] [<ffffffff8002b3ba>] mod_delayed_work_on+0x4a/0xa6
[   92.179331] [<ffffffff01375980>] pac1934_read_raw+0xba/0x1fc [pac1934]
[   92.179392] [<ffffffff0134942e>] iio_read_channel_info+0xae/0xc4 [industrialio]
[   92.179704] [<ffffffff80442fde>] dev_attr_show+0x14/0x46
[   92.179748] [<ffffffff8020ca3e>] sysfs_kf_seq_show+0x6c/0xe2
[   92.179788] [<ffffffff8020b15c>] kernfs_seq_show+0x18/0x20
[   92.179814] [<ffffffff801bc1ca>] seq_read_iter+0xd0/0x328
[   92.179844] [<ffffffff8020b634>] kernfs_fop_read_iter+0xfa/0x15c
[   92.179871] [<ffffffff8018e128>] vfs_read+0x1aa/0x25a
[   92.179895] [<ffffffff8018e998>] ksys_read+0x5a/0xcc
[   92.179915] [<ffffffff8018ea1e>] __riscv_sys_read+0x14/0x1c
[   92.179936] [<ffffffff807662f8>] do_trap_ecall_u+0x1ac/0x1d8
[   92.179981] [<ffffffff8076e3ba>] handle_exception+0x146/0x152
[   92.180018] ---[ end trace 0000000000000000 ]---
(The issue was detected on an internal 6.12 based branch, but the
content there is identical to what's in mainline + this patch).

Obviously adding the check for an error here doesn't cause there to be
problems with a transfer, only actually report problems that have
occurred. I have not yet been able to reproduce this on my setup, but
the reporter saw the issues going away when they disabled hardware smbus
support and used software emulation instead.

I don't know if this has any bearing on applying the patch, but I wanted
to mention it for reasons that should be apparent. I'm looking into the
issue still and hope to figure out what's going wrong.

Cheers,
Conor.

> 
> CC: Conor Dooley <conor.dooley@...rochip.com>
> CC: Daire McNamara <daire.mcnamara@...rochip.com>
> CC: Andi Shyti <andi.shyti@...nel.org>
> CC: linux-i2c@...r.kernel.org
> CC: linux-kernel@...r.kernel.org
> ---
>  drivers/i2c/busses/i2c-microchip-corei2c.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/i2c/busses/i2c-microchip-corei2c.c b/drivers/i2c/busses/i2c-microchip-corei2c.c
> index 492bf4c34722c..a4611381c4f0b 100644
> --- a/drivers/i2c/busses/i2c-microchip-corei2c.c
> +++ b/drivers/i2c/busses/i2c-microchip-corei2c.c
> @@ -435,6 +435,7 @@ static int mchp_corei2c_smbus_xfer(struct i2c_adapter *adap, u16 addr, unsigned
>  	u8 tx_buf[I2C_SMBUS_BLOCK_MAX + 2];
>  	u8 rx_buf[I2C_SMBUS_BLOCK_MAX + 1];
>  	int num_msgs = 1;
> +	int ret;
>  
>  	msgs[CORE_I2C_SMBUS_MSG_WR].addr = addr;
>  	msgs[CORE_I2C_SMBUS_MSG_WR].flags = 0;
> @@ -505,7 +506,10 @@ static int mchp_corei2c_smbus_xfer(struct i2c_adapter *adap, u16 addr, unsigned
>  		return -EOPNOTSUPP;
>  	}
>  
> -	mchp_corei2c_xfer(&idev->adapter, msgs, num_msgs);
> +	ret = mchp_corei2c_xfer(&idev->adapter, msgs, num_msgs);
> +	if (ret)
> +		return ret;
> +
>  	if (read_write == I2C_SMBUS_WRITE || size <= I2C_SMBUS_BYTE_DATA)
>  		return 0;
>  
> -- 
> 2.49.0
> 

Download attachment "signature.asc" of type "application/pgp-signature" (229 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ