linux/drivers/i2c/busses
Tam Nguyen 5a47c2fa0d i2c: designware: Handle invalid SMBus block data response length value
commit 69f035c480 upstream.

In the I2C_FUNC_SMBUS_BLOCK_DATA case, the invalid length byte value
(outside of 1-32) of the SMBus block data response from the Slave device
is not correctly handled by the I2C Designware driver.

In case IC_EMPTYFIFO_HOLD_MASTER_EN==1, which cannot be detected
from the registers, the Master can be disabled only if the STOP bit
is set. Without STOP bit set, the Master remains active, holding the bus
until receiving a block data response length. This hangs the bus and
is unrecoverable.

Avoid this by issuing another dump read to reach the stop condition when
an invalid length byte is received.

Cc: stable@vger.kernel.org
Signed-off-by: Tam Nguyen <tamnguyenchi@os.amperecomputing.com>
Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Link: https://lore.kernel.org/r/20230726080001.337353-3-tamnguyenchi@os.amperecomputing.com
Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
Signed-off-by: Wolfram Sang <wsa@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2023-08-23 17:52:31 +02:00
..
i2c-acorn.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
i2c-ali15x3.c i2c: Use separate MODULE_AUTHOR() statements for multiple authors 2020-07-04 08:25:13 +02:00
i2c-ali1535.c i2c: ali1535: mention that the device should not be disabled 2021-07-02 09:14:46 +02:00
i2c-ali1563.c i2c: busses: i2c-ali1563: File headers are not good candidates for kernel-doc 2021-05-27 21:29:26 +02:00
i2c-altera.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-amd-mp2-pci.c i2c: amd-mp2: Remove useless DMA-32 fallback configuration 2022-02-07 15:32:14 +01:00
i2c-amd-mp2-plat.c i2c: amd-mp2-plat: Refactor _UID handling to use acpi_dev_uid_to_integer() 2022-09-19 18:34:42 +02:00
i2c-amd-mp2.h i2c: amd-mp2: Remove unused macro 2021-02-01 23:01:50 +01:00
i2c-amd756-s4882.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
i2c-amd756.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
i2c-amd8111.c i2c: amd8111: Fix coding style issues 2021-04-15 22:24:11 +02:00
i2c-aspeed.c i2c: aspeed: Assert NAK when slave is busy 2022-10-05 21:06:46 +02:00
i2c-at91-core.c i2c: at91: mark PM ops as __maybe unused 2021-08-11 15:54:01 +02:00
i2c-at91-master.c i2c: at91: Initialize dma_buf in at91_twi_xfer() 2022-05-14 15:41:16 +02:00
i2c-at91-slave.c i2c: at91: added slave mode support 2019-03-24 22:41:51 +01:00
i2c-at91.h i2c: at91: remove legacy DMA left overs 2020-11-03 21:34:40 +01:00
i2c-au1550.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-axxia.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-bcm-iproc.c i2c: bcm-iproc: Fix bcm_iproc_i2c_isr deadlock issue 2023-08-23 17:52:29 +02:00
i2c-bcm-kona.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-bcm2835.c Merge tag 'irq-api-2022-02-21' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into i2c/for-mergewindow 2022-02-23 14:14:15 +01:00
i2c-brcmstb.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-cadence.c i2c: cadence: cdns_i2c_master_xfer(): Fix runtime PM leak on error path 2023-05-11 23:03:30 +09:00
i2c-cbus-gpio.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-ccgx-ucsi.c i2c: Introduce common module to instantiate CCGx UCSI 2022-02-15 10:04:53 +01:00
i2c-ccgx-ucsi.h i2c: Introduce common module to instantiate CCGx UCSI 2022-02-15 10:04:53 +01:00
i2c-cht-wc.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-cp2615.c i2c: cp2615: check for allocation failure in cp2615_i2c_recv() 2021-06-20 23:13:34 +02:00
i2c-cpm.c i2c: cpm: Fix i2c_ram structure 2020-09-27 15:14:16 +02:00
i2c-cros-ec-tunnel.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-davinci.c i2c: davinci: fix PM disable depth imbalance in davinci_i2c_probe 2022-10-02 00:46:42 +02:00
i2c-designware-amdpsp.c i2c: designware: Introduce semaphore reservation timer to AMDPSP driver 2022-08-20 08:29:04 +02:00
i2c-designware-baytrail.c i2c: designware: Add AMD PSP I2C bus support 2022-02-11 15:38:23 +01:00
i2c-designware-common.c i2c: designware: fix i2c_dw_clk_rate() return size to be u32 2023-03-10 09:33:29 +01:00
i2c-designware-core.h i2c: designware: fix i2c_dw_clk_rate() return size to be u32 2023-03-10 09:33:29 +01:00
i2c-designware-master.c i2c: designware: Handle invalid SMBus block data response length value 2023-08-23 17:52:31 +02:00
i2c-designware-pcidrv.c usb: typec: ucsi: Mark dGPUs as DEVICE scope 2023-07-19 16:22:12 +02:00
i2c-designware-platdrv.c i2c: designware: Fix unbalanced suspended flag 2023-02-01 08:34:42 +01:00
i2c-designware-slave.c i2c: designware: slave should do WRITE_REQUESTED before WRITE_RECEIVED 2020-11-06 16:02:00 +01:00
i2c-digicolor.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-diolan-u2c.c i2c: drivers: Use generic definitions for bus frequencies 2020-03-24 22:36:59 +01:00
i2c-dln2.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 372 2019-06-05 17:37:10 +02:00
i2c-eg20t.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-elektor.c Merge branch 'i2c/for-5.12' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2021-02-22 09:02:24 -08:00
i2c-emev2.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-exynos5.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-fsi.c i2c: fsi: Prevent adding adapters for ports without dts nodes 2020-07-24 21:31:33 +02:00
i2c-gpio.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-highlander.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-hisi.c i2c: hisi: Only handle the interrupt of the driver's transfer 2023-08-23 17:52:30 +02:00
i2c-hix5hd2.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-hydra.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
i2c-i801.c i2c: i801: add lis3lv02d's I2C address for Vostro 5568 2022-11-01 13:46:30 +01:00
i2c-ibm_iic.c i2c: Delete error messages for failed memory allocations 2023-08-03 10:23:49 +02:00
i2c-ibm_iic.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
i2c-icy.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-img-scb.c i2c: img-scb: fix reference leak when pm_runtime_get_sync fails 2021-04-14 09:49:06 +02:00
i2c-imx-lpi2c.c i2c: imx-lpi2c: fix type char overflow issue when calculating the clock cycle 2023-06-28 11:12:40 +02:00
i2c-imx.c i2c: imx: Only DMA messages with I2C_M_DMA_SAFE flag set 2022-12-02 00:12:25 +01:00
i2c-iop3xx.c i2c: iop3xx: fix deferred probing 2021-08-19 19:18:17 +02:00
i2c-iop3xx.h Merge branch 'i2c/for-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2019-07-15 21:10:39 -07:00
i2c-isch.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
i2c-ismt.c i2c: ismt: Fix an out-of-bounds bug in ismt_access() 2022-12-31 13:32:42 +01:00
i2c-jz4780.c Merge branch 'i2c/for-5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2021-04-30 13:01:02 -07:00
i2c-kempld.c i2c: kempld: Support ACPI I2C device declaration 2022-08-11 23:02:51 +02:00
i2c-lpc2k.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-mchp-pci1xxxx.c i2c: mchp-pci1xxxx: Avoid cast to incompatible function type 2023-06-28 11:12:39 +02:00
i2c-meson.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-microchip-corei2c.c i2c: microchip-corei2c: fix erroneous late ack send 2022-08-11 14:28:56 +02:00
i2c-mlxbf.c i2c: mlxbf: depend on ACPI; clean away ifdeffage 2022-10-21 07:59:35 +02:00
i2c-mlxcpld.c i2c: fix spelling typos in comments 2022-10-20 23:09:10 +02:00
i2c-mpc.c powerpc/mpc5xxx: Switch mpc5xxx_get_bus_frequency() to use fwnode 2022-06-22 12:51:49 +10:00
i2c-mt65xx.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-mt7621.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-mv64xxx.c i2c: mv64xxx: Fix reading invalid status value in atomic mode 2023-06-14 11:15:31 +02:00
i2c-mxs.c i2c: mxs: ensure that DMA buffers are safe for DMA 2023-03-30 12:49:03 +02:00
i2c-nforce2-s4985.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
i2c-nforce2.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
i2c-nomadik.c i2c: nomadik: Remove a useless call in the remove function 2023-08-03 10:23:50 +02:00
i2c-npcm7xx.c i2c: npcm7xx: Fix error handling in npcm_i2c_init() 2022-11-12 21:27:00 +01:00
i2c-nvidia-gpu.c usb: typec: ucsi: Mark dGPUs as DEVICE scope 2023-07-19 16:22:12 +02:00
i2c-ocores.c i2c: ocores: generate stop condition after timeout in polling mode 2023-04-20 12:35:14 +02:00
i2c-octeon-core.c i2c: octeon: check correct size of maximum RECV_LEN packet 2021-01-17 12:26:55 +01:00
i2c-octeon-core.h i2c: octeon: Prevent error message on bus error 2018-03-02 11:11:15 +01:00
i2c-octeon-platdrv.c i2c: busses: convert to devm_platform_ioremap_resource 2020-04-15 12:09:09 +02:00
i2c-omap.c i2c: omap: Fix standard mode false ACK readings 2023-05-11 23:03:04 +09:00
i2c-opal.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-owl.c i2c: owl: Add compatible for the Actions Semi S500 I2C controller 2020-12-09 21:23:21 +01:00
i2c-parport.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-pasemi-core.c i2c: pasemi: Wait for write xfers to finish 2022-04-15 23:12:02 +02:00
i2c-pasemi-core.h i2c: pasemi: Set enable bit for Apple variant 2021-10-11 11:45:56 +02:00
i2c-pasemi-pci.c i2c: pasemi: Drop I2C classes from platform driver variant 2022-02-15 10:28:34 +01:00
i2c-pasemi-platform.c i2c: pasemi: Add Apple platform driver 2021-10-11 11:45:48 +02:00
i2c-pca-isa.c isa: Make the remove callback for isa drivers return void 2021-01-26 07:42:27 +01:00
i2c-pca-platform.c i2c: pca-platform: drop two members from driver data that are assigned to only 2020-12-02 21:29:31 +01:00
i2c-piix4.c i2c: piix4: Fix adapter not be removed in piix4_remove() 2022-11-01 13:09:33 +01:00
i2c-pnx.c i2c: busses: i2c-pnx: Provide descriptions for 'alg_data' data structure 2021-05-27 21:34:08 +02:00
i2c-powermac.c i2c: powermac: Prepare cleanup of powerpc's asm/prom.h 2022-05-04 22:32:45 +02:00
i2c-pxa-pci.c i2c: pxa-pci: fix missing pci_disable_device() on error in ce4100_i2c_probe 2022-12-31 13:32:42 +01:00
i2c-pxa.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-qcom-cci.c i2c: qcom-cci: Fix ordering of pm_runtime_xx and i2c_add_adapter 2022-10-19 21:36:50 +02:00
i2c-qcom-geni.c i2c: qcom-geni: fix error return code in geni_i2c_gpi_xfer 2022-12-01 23:55:22 +01:00
i2c-qup.c i2c: qup: Add missing unwind goto in qup_i2c_probe() 2023-07-19 16:22:08 +02:00
i2c-rcar.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-riic.c i2c: riic: Use devm_platform_ioremap_resource() 2022-09-17 20:35:34 +02:00
i2c-rk3x.c i2c: rk3x: fix a bunch of kernel-doc warnings 2023-02-09 11:28:13 +01:00
i2c-robotfuzz-osif.c i2c: robotfuzz-osif: fix control-request directions 2021-06-24 22:08:00 +02:00
i2c-rzv2m.c i2c: Add Renesas RZ/V2M controller 2022-07-22 18:46:41 +02:00
i2c-s3c2410.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-scmi.c i2c: scmi: Convert to be a platform driver 2022-09-16 20:44:08 +01:00
i2c-sh7760.c i2c: Improve size determinations 2023-08-03 10:23:49 +02:00
i2c-sh_mobile.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-sibyte.c i2c: Use separate MODULE_AUTHOR() statements for multiple authors 2020-07-04 08:25:13 +02:00
i2c-simtec.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-sis96x.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
i2c-sis630.c i2c: fix spelling typos in comments 2022-10-20 23:09:10 +02:00
i2c-sis5595.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
i2c-sprd.c i2c: sprd: Delete i2c adapter in .remove's error path 2023-06-14 11:15:32 +02:00
i2c-st.c i2c: busses: i2c-st: Fix copy/paste function misnaming issues 2021-05-27 21:39:35 +02:00
i2c-stm32.c i2c: stm32: Simplify with dev_err_probe() 2020-09-21 11:45:43 +02:00
i2c-stm32.h i2c: stm32: Use the correct style for SPDX License Identifier 2019-08-14 14:56:54 +02:00
i2c-stm32f4.c i2c: busses: i2c-stm32f4: Remove incorrectly placed ' ' from function name 2021-05-27 21:39:57 +02:00
i2c-stm32f7.c i2c: stm32: add support for the STM32MP13 soc 2022-07-16 14:24:41 +02:00
i2c-sun6i-p2wi.c i2c: sun6i-pw2i: Prefer strscpy over strlcpy 2021-08-17 21:37:40 +02:00
i2c-synquacer.c i2c: synquacer: fix deferred probing 2021-08-17 21:41:32 +02:00
i2c-taos-evm.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-tegra-bpmp.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-tegra.c i2c: tegra: Fix i2c-tegra DMA config option processing 2023-08-23 17:52:30 +02:00
i2c-thunderx-pcidrv.c drivers: i2c: thunderx: Allow driver to work with ACPI defined TWSI controllers 2022-05-21 13:41:28 +02:00
i2c-tiny-usb.c i2c: Delete error messages for failed memory allocations 2023-08-03 10:23:49 +02:00
i2c-uniphier-f.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-uniphier.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-versatile.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-via.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
i2c-viapro.c i2c: busses: Use fallthrough pseudo-keyword 2020-07-23 22:04:08 +02:00
i2c-viperboard.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
i2c-virtio.c virtio: wrap config->reset calls 2022-01-14 18:50:52 -05:00
i2c-wmt.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-xgene-slimpro.c i2c: xgene-slimpro: Fix out-of-bounds bug in xgene_slimpro_i2c_xfer() 2023-03-30 12:49:30 +02:00
i2c-xiic.c i2c: xiic: Don't try to handle more interrupt events after error 2023-07-19 16:22:07 +02:00
i2c-xlp9xx.c i2c: Remove Netlogic XLP variant 2021-11-23 10:00:12 +01:00
Kconfig i2c: mlxbf: depend on ACPI; clean away ifdeffage 2022-10-21 07:59:35 +02:00
Makefile i2c: microchip: pci1xxxx: Add driver for I2C host controller in multifunction endpoint of pci1xxxx switch 2022-09-28 22:02:17 +02:00
scx200_acb.c i2c: busses: Use fallthrough pseudo-keyword 2020-07-23 22:04:08 +02:00