diff options
-rw-r--r-- | drivers/bluetooth/btmrvl_sdio.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c index ec5c45672f1d..1896e916ff7d 100644 --- a/drivers/bluetooth/btmrvl_sdio.c +++ b/drivers/bluetooth/btmrvl_sdio.c | |||
@@ -552,7 +552,16 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv) | |||
552 | */ | 552 | */ |
553 | 553 | ||
554 | buf_len = payload[0]; | 554 | buf_len = payload[0]; |
555 | buf_len |= (u16) payload[1] << 8; | 555 | buf_len |= payload[1] << 8; |
556 | buf_len |= payload[2] << 16; | ||
557 | |||
558 | if (buf_len > blksz * num_blocks) { | ||
559 | BT_ERR("Skip incorrect packet: hdrlen %d buffer %d", | ||
560 | buf_len, blksz * num_blocks); | ||
561 | ret = -EIO; | ||
562 | goto exit; | ||
563 | } | ||
564 | |||
556 | type = payload[3]; | 565 | type = payload[3]; |
557 | 566 | ||
558 | switch (type) { | 567 | switch (type) { |