Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1726488
| From | Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 3.18 1/9] i2c: ismt: Dont duplicate the receive length for block reads |
| Date | 2017-09-05 09:40 +0200 |
| Message-ID | <umgCM-8ei-31@gated-at.bofh.it> (permalink) |
| References | <umg9H-82b-1@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
3.18-stable review patch. If anyone has any objections, please let me know. ------------------ From: Stephen Douthit <stephend@adiengineering.com> commit b6c159a9cb69c2cf0bf59d4e12c3a2da77e4d994 upstream. According to Table 15-14 of the C2000 EDS (Intel doc #510524) the rx data pointed to by the descriptor dptr contains the byte count. desc->rxbytes reports all bytes read on the wire, including the "byte count" byte. So if a device sends 4 bytes in response to a block read, on the wire and in the DMA buffer we see: count data1 data2 data3 data4 0x04 0xde 0xad 0xbe 0xef That's what we want to return in data->block to the next level. Instead we were actually prefixing that with desc->rxbytes: bad count count data1 data2 data3 data4 0x05 0x04 0xde 0xad 0xbe 0xef This was discovered while developing a BMC solution relying on the ipmi_ssif.c driver which was trying to interpret the bogus length field as part of the IPMI response. Signed-off-by: Stephen Douthit <stephend@adiengineering.com> Tested-by: Dan Priamo <danp@adiengineering.com> Acked-by: Neil Horman <nhorman@tuxdriver.com> Signed-off-by: Wolfram Sang <wsa@the-dreams.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> --- drivers/i2c/busses/i2c-ismt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/drivers/i2c/busses/i2c-ismt.c +++ b/drivers/i2c/busses/i2c-ismt.c @@ -340,8 +340,8 @@ static int ismt_process_desc(const struc break; case I2C_SMBUS_BLOCK_DATA: case I2C_SMBUS_I2C_BLOCK_DATA: - memcpy(&data->block[1], dma_buffer, desc->rxbytes); - data->block[0] = desc->rxbytes; + memcpy(data->block, dma_buffer, desc->rxbytes); + data->block[0] = desc->rxbytes - 1; break; } return 0;
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH 3.18 0/9] 3.18.70-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-09-05 09:10 +0200 [PATCH 3.18 3/9] cpumask: fix spurious cpumask_of_node() on non-NUMA multi-node configs Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-09-05 09:20 +0200 [PATCH 3.18 6/9] wl1251: add a missing spin_lock_init() Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-09-05 09:20 +0200 [PATCH 3.18 5/9] CIFS: remove endian related sparse warning Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-09-05 09:40 +0200 [PATCH 3.18 7/9] xfrm: policy: check policy direction value Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-09-05 09:40 +0200 [PATCH 3.18 1/9] i2c: ismt: Dont duplicate the receive length for block reads Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-09-05 09:40 +0200 [PATCH 3.18 2/9] i2c: ismt: Return EMSGSIZE for block reads with bogus length Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-09-05 09:40 +0200 [PATCH 3.18 4/9] CIFS: Fix maximum SMB2 header size Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-09-05 09:40 +0200 Re: [PATCH 3.18 0/9] 3.18.70-stable review Guenter Roeck <linux@roeck-us.net> - 2017-09-05 18:50 +0200 Re: [PATCH 3.18 0/9] 3.18.70-stable review Shuah Khan <shuahkh@osg.samsung.com> - 2017-09-05 19:20 +0200
csiph-web