|
|
48f65f6 |
From 526fbce5b0e44c67a97c57656b3be9911f0a9b9b Mon Sep 17 00:00:00 2001
|
|
|
48f65f6 |
From: Laura Abbott <labbott@fedoraproject.org>
|
|
|
48f65f6 |
Date: Tue, 29 Sep 2015 16:59:20 -0700
|
|
|
48f65f6 |
Subject: [PATCH 2/2] si2157: Bounds check firmware
|
|
|
48f65f6 |
To: Antti Palosaari <crope@iki.fi>
|
|
|
48f65f6 |
To: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
|
|
|
48f65f6 |
Cc: Olli Salonen <olli.salonen@iki.fi>
|
|
|
48f65f6 |
Cc: linux-media@vger.kernel.org
|
|
|
48f65f6 |
Cc: linux-kernel@vger.kernel.org
|
|
|
48f65f6 |
|
|
|
48f65f6 |
When reading the firmware and sending commands, the length
|
|
|
48f65f6 |
must be bounds checked to avoid overrunning the size of the command
|
|
|
48f65f6 |
buffer and smashing the stack if the firmware is not in the
|
|
|
48f65f6 |
expected format. Add the proper check.
|
|
|
48f65f6 |
|
|
|
48f65f6 |
Cc: stable@kernel.org
|
|
|
48f65f6 |
Signed-off-by: Laura Abbott <labbott@fedoraproject.org>
|
|
|
48f65f6 |
---
|
|
|
48f65f6 |
drivers/media/tuners/si2157.c | 4 ++++
|
|
|
48f65f6 |
1 file changed, 4 insertions(+)
|
|
|
48f65f6 |
|
|
|
48f65f6 |
diff --git a/drivers/media/tuners/si2157.c b/drivers/media/tuners/si2157.c
|
|
|
48f65f6 |
index 5073821..ce157ed 100644
|
|
|
48f65f6 |
--- a/drivers/media/tuners/si2157.c
|
|
|
48f65f6 |
+++ b/drivers/media/tuners/si2157.c
|
|
|
48f65f6 |
@@ -166,6 +166,10 @@ static int si2157_init(struct dvb_frontend *fe)
|
|
|
48f65f6 |
|
|
|
48f65f6 |
for (remaining = fw->size; remaining > 0; remaining -= 17) {
|
|
|
48f65f6 |
len = fw->data[fw->size - remaining];
|
|
|
48f65f6 |
+ if (len > SI2157_ARGLEN) {
|
|
|
48f65f6 |
+ dev_err(&client->dev, "Bad firmware length\n");
|
|
|
48f65f6 |
+ goto err_release_firmware;
|
|
|
48f65f6 |
+ }
|
|
|
48f65f6 |
memcpy(cmd.args, &fw->data[(fw->size - remaining) + 1], len);
|
|
|
48f65f6 |
cmd.wlen = len;
|
|
|
48f65f6 |
cmd.rlen = 1;
|
|
|
48f65f6 |
--
|
|
|
48f65f6 |
2.4.3
|
|
|
48f65f6 |
|