Commit 2856a627 authored by Jeremy Kerr's avatar Jeremy Kerr Committed by David S. Miller
Browse files

mctp: serial: Fix starting value for frame check sequence



RFC1662 defines the start state for the crc16 FCS to be 0xffff, but
we're currently starting at zero.

This change uses the correct start state. We're only early in the
adoption for the serial binding, so there aren't yet any other users to
interface to.

Fixes: a0c2ccd9 ("mctp: Add MCTP-over-serial transport binding")
Reported-by: default avatarHarsh Tyagi <harshtya@google.com>
Tested-by: default avatarHarsh Tyagi <harshtya@google.com>
Signed-off-by: default avatarJeremy Kerr <jk@codeconstruct.com.au>
Reviewed-by: default avatarAlexander Duyck <alexanderduyck@fb.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1b0c84a3
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -35,6 +35,8 @@
#define BYTE_FRAME		0x7e
#define BYTE_ESC		0x7d

#define FCS_INIT		0xffff

static DEFINE_IDA(mctp_serial_ida);

enum mctp_serial_state {
@@ -123,7 +125,7 @@ static void mctp_serial_tx_work(struct work_struct *work)
		buf[2] = dev->txlen;

		if (!dev->txpos)
			dev->txfcs = crc_ccitt(0, buf + 1, 2);
			dev->txfcs = crc_ccitt(FCS_INIT, buf + 1, 2);

		txlen = write_chunk(dev, buf + dev->txpos, 3 - dev->txpos);
		if (txlen <= 0) {
@@ -303,7 +305,7 @@ static void mctp_serial_push_header(struct mctp_serial *dev, unsigned char c)
	case 1:
		if (c == MCTP_SERIAL_VERSION) {
			dev->rxpos++;
			dev->rxfcs = crc_ccitt_byte(0, c);
			dev->rxfcs = crc_ccitt_byte(FCS_INIT, c);
		} else {
			dev->rxstate = STATE_ERR;
		}