All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: Justin Forbes <jmforbes@linuxtx.org>,
	Zwane Mwaikambo <zwane@arm.linux.org.uk>,
	"Theodore Ts'o" <tytso@mit.edu>,
	Randy Dunlap <rdunlap@xenotime.net>,
	Dave Jones <davej@redhat.com>,
	Chuck Wolber <chuckw@quantumlinux.com>,
	Chris Wedgwood <reviews@ml.cw.f00f.org>,
	Michael Krufky <mkrufky@linuxtv.org>,
	Chuck Ebbert <cebbert@redhat.com>,
	Domenico Andreoli <cavokz@gmail.com>, Willy Tarreau <w@1wt.eu>,
	Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
	Jake Edge <jake@lwn.net>, Eugene Teo <eteo@redhat.com>,
	torvalds@linux-foundation.org, akpm@linux-foundation.org,
	alan@lxorguk.ukuu.org.uk,
	Mauro Carvalho Chehab <mchehab@redhat.com>
Subject: [patch 21/22] V4L/DVB (9621): Avoid writing outside shadow.bytes[] array
Date: Tue, 16 Dec 2008 16:04:41 -0800	[thread overview]
Message-ID: <20081217000441.GV4504@kroah.com> (raw)
In-Reply-To: <20081217000306.GA4504@kroah.com>

[-- Attachment #1: v4l-dvb-avoid-writing-outside-shadow.bytes-array.patch --]
[-- Type: text/plain, Size: 2549 bytes --]

2.6.27-stable review patch.  If anyone has any objections, please let us know.

------------------

From: Mauro Carvalho Chehab <mchehab@redhat.com>

commit 494264379d186bf806613d27aafb7d88d42f4212 upstream.

There were no check about the limits of shadow.bytes array. This offers
a risk of writing values outside the limits, overriding other data
areas.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 drivers/media/video/tvaudio.c |   30 +++++++++++++++++++++++++++---
 1 file changed, 27 insertions(+), 3 deletions(-)

--- a/drivers/media/video/tvaudio.c
+++ b/drivers/media/video/tvaudio.c
@@ -152,7 +152,7 @@ static int chip_write(struct CHIPSTATE *
 {
 	unsigned char buffer[2];
 
-	if (-1 == subaddr) {
+	if (subaddr < 0) {
 		v4l_dbg(1, debug, chip->c, "%s: chip_write: 0x%x\n",
 			chip->c->name, val);
 		chip->shadow.bytes[1] = val;
@@ -163,6 +163,13 @@ static int chip_write(struct CHIPSTATE *
 			return -1;
 		}
 	} else {
+		if (subaddr + 1 >= ARRAY_SIZE(chip->shadow.bytes)) {
+			v4l_info(chip->c,
+				"Tried to access a non-existent register: %d\n",
+				subaddr);
+			return -EINVAL;
+		}
+
 		v4l_dbg(1, debug, chip->c, "%s: chip_write: reg%d=0x%x\n",
 			chip->c->name, subaddr, val);
 		chip->shadow.bytes[subaddr+1] = val;
@@ -177,12 +184,20 @@ static int chip_write(struct CHIPSTATE *
 	return 0;
 }
 
-static int chip_write_masked(struct CHIPSTATE *chip, int subaddr, int val, int mask)
+static int chip_write_masked(struct CHIPSTATE *chip,
+			     int subaddr, int val, int mask)
 {
 	if (mask != 0) {
-		if (-1 == subaddr) {
+		if (subaddr < 0) {
 			val = (chip->shadow.bytes[1] & ~mask) | (val & mask);
 		} else {
+			if (subaddr + 1 >= ARRAY_SIZE(chip->shadow.bytes)) {
+				v4l_info(chip->c,
+					"Tried to access a non-existent register: %d\n",
+					subaddr);
+				return -EINVAL;
+			}
+
 			val = (chip->shadow.bytes[subaddr+1] & ~mask) | (val & mask);
 		}
 	}
@@ -228,6 +243,15 @@ static int chip_cmd(struct CHIPSTATE *ch
 	if (0 == cmd->count)
 		return 0;
 
+	if (cmd->count + cmd->bytes[0] - 1 >= ARRAY_SIZE(chip->shadow.bytes)) {
+		v4l_info(chip->c,
+			 "Tried to access a non-existent register range: %d to %d\n",
+			 cmd->bytes[0] + 1, cmd->bytes[0] + cmd->count - 1);
+		return -EINVAL;
+	}
+
+	/* FIXME: it seems that the shadow bytes are wrong bellow !*/
+
 	/* update our shadow register set; print bytes if (debug > 0) */
 	v4l_dbg(1, debug, chip->c, "%s: chip_cmd(%s): reg=%d, data:",
 		chip->c->name, name,cmd->bytes[0]);


  parent reply	other threads:[~2008-12-17  0:13 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20081216235704.347182084@mini.kroah.org>
2008-12-17  0:03 ` [patch 00/22] 2.6.27.10 stable review Greg KH
2008-12-17  0:03   ` [patch 01/22] AMD IOMMU: enable device isolation per default Greg KH
2008-12-18 13:00     ` Pavel Machek
2008-12-19 11:21       ` Joerg Roedel
2008-12-20 11:26         ` Pavel Machek
2008-12-20 21:48           ` Joerg Roedel
2008-12-19 16:14       ` Greg KH
2008-12-17  0:04   ` [patch 02/22] bonding: fix miimon failure counter Greg KH
2008-12-17  0:04   ` [patch 03/22] Revert "sched_clock: prevent scd->clock from moving backwards" Greg KH
2008-12-17  0:04   ` [patch 04/22] x86 Fix VMI crash on boot in 2.6.28-rc8 Greg KH
2008-12-17  0:04   ` [patch 05/22] lib/idr.c: Fix bug introduced by RCU fix Greg KH
2008-12-17  0:04   ` [patch 06/22] libata: fix Seagate NCQ+FLUSH blacklist Greg KH
2008-12-17  0:04   ` [patch 07/22] e1000e: fix double release of mutex Greg KH
2008-12-17  0:04   ` [patch 08/22] can: Fix CAN_(EFF|RTR)_FLAG handling in can_filter Greg KH
2008-12-17  0:04   ` [patch 09/22] can: omit received RTR frames for single ID filter lists Greg KH
2008-12-17  0:04   ` [patch 10/22] iwlwifi: clean key table in iwl_clear_stations_table function Greg KH
2008-12-17  0:04   ` [patch 11/22] net: eliminate warning from NETIF_F_UFO on bridge Greg KH
2008-12-17  0:04   ` [patch 12/22] unicode table for cp437 Greg KH
2008-12-17  0:04   ` [patch 13/22] console ASCII glyph 1:1 mapping Greg KH
2008-12-17  0:04   ` [patch 14/22] iwlagn: fix RX skb alignment Greg KH
2008-12-17  0:04   ` [patch 15/22] key: fix setkey(8) policy set breakage Greg KH
2008-12-17  0:04   ` [patch 16/22] firewire: fw-ohci: fix IOMMU resource exhaustion Greg KH
2008-12-17  0:04   ` [patch 17/22] ieee1394: add quirk fix for Freecom HDD Greg KH
2008-12-17  0:04   ` [patch 18/22] SUNRPC: Fix a performance regression in the RPC authentication code Greg KH
2008-12-17  0:04   ` [patch 19/22] b1isa: fix b1isa_exit() to really remove registered capi controllers Greg KH
2008-12-17  0:04   ` [patch 20/22] macfb: Do not overflow fb_fix_screeninfo.id Greg KH
2008-12-17  0:04   ` Greg KH [this message]
2008-12-17  0:04   ` [patch 22/22] setup_per_zone_pages_min(): take zone->lock instead of zone->lru_lock Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20081217000441.GV4504@kroah.com \
    --to=gregkh@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=cavokz@gmail.com \
    --cc=cebbert@redhat.com \
    --cc=chuckw@quantumlinux.com \
    --cc=davej@redhat.com \
    --cc=eteo@redhat.com \
    --cc=jake@lwn.net \
    --cc=jmforbes@linuxtx.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mchehab@redhat.com \
    --cc=mkrufky@linuxtv.org \
    --cc=rbranco@la.checkpoint.com \
    --cc=rdunlap@xenotime.net \
    --cc=reviews@ml.cw.f00f.org \
    --cc=stable@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=tytso@mit.edu \
    --cc=w@1wt.eu \
    --cc=zwane@arm.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.