summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorWilliam A. Kennington III <william@wkennington.com>2026-04-23 10:46:52 +0300
committerPaolo Abeni <pabeni@redhat.com>2026-04-28 14:11:53 +0300
commit4ca07b9239bd0478ae586632a2ed72be37ed8407 (patch)
tree3c7827139d70c8e27aa954e2fbd697564cc522b0 /include/linux
parent0bb05e6adfa99a2ea1fee1125cc0953409f83ed8 (diff)
downloadlinux-4ca07b9239bd0478ae586632a2ed72be37ed8407.tar.xz
net: mctp i2c: check length before marking flow active
Currently, mctp_i2c_get_tx_flow_state() is called before the packet length sanity check. This function marks a new flow as active in the MCTP core. If the sanity check fails, mctp_i2c_xmit() returns early without calling mctp_i2c_lock_nest(). This results in a mismatched locking state: the flow is active, but the I2C bus lock was never acquired for it. When the flow is later released, mctp_i2c_release_flow() will see the active state and queue an unlock marker. The TX thread will then decrement midev->i2c_lock_count from 0, causing it to underflow to -1. This underflow permanently breaks the driver's locking logic, allowing future transmissions to occur without holding the I2C bus lock, leading to bus collisions and potential hardware hangs. Move the mctp_i2c_get_tx_flow_state() call to after the length sanity check to ensure we only transition the flow state if we are actually going to proceed with the transmission and locking. Fixes: f5b8abf9fc3d ("mctp i2c: MCTP I2C binding driver") Signed-off-by: William A. Kennington III <william@wkennington.com> Acked-by: Jeremy Kerr <jk@codeconstruct.com.au> Link: https://patch.msgid.link/20260423074741.201460-1-william@wkennington.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Diffstat (limited to 'include/linux')
0 files changed, 0 insertions, 0 deletions