Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1726488

[PATCH 3.18 1/9] i2c: ismt: Dont duplicate the receive length for block reads

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

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar | Unroll thread


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