diff options
author | Dan Carpenter <dan.carpenter@oracle.com> | 2011-10-18 02:12:09 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-11-24 14:26:02 -0200 |
commit | 9369cc96af2d5e093ed7f0ac9671f4b30d30af86 (patch) | |
tree | 0ea5fafaca579eee586994ee309b59a18b7a2452 /drivers/media | |
parent | a23d9d1227f05cf96d195401fe2af2c14ea44b92 (diff) | |
download | op-kernel-dev-9369cc96af2d5e093ed7f0ac9671f4b30d30af86.zip op-kernel-dev-9369cc96af2d5e093ed7f0ac9671f4b30d30af86.tar.gz |
[media] av7110: wrong limiter in av7110_start_feed()
Smatch complains that the wrong limiter is used here:
drivers/media/dvb/ttpci/av7110.c +906 dvb_feed_start_pid(12)
error: buffer overflow 'npids' 5 <= 19
Here is the problem code:
905 i = dvbdmxfeed->pes_type;
906 npids[i] = (pid[i]&0x8000) ? 0 : pid[i];
"npids" is a 5 element array declared on the stack. If
dvbdmxfeed->pes_type is more than 4 we probably put a (u16)0 past
the end of the array.
If dvbdmxfeed->pes_type is over 4 the rest of the function doesn't
do anything. dvbdmxfeed->pes_type is capped at less than
DMX_TS_PES_OTHER (20) in the caller function, but I changed it to
less than or equal to DMX_TS_PES_PCR (4).
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Oliver Endriss <o.endriss@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/dvb/ttpci/av7110.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/media/dvb/ttpci/av7110.c b/drivers/media/dvb/ttpci/av7110.c index 3d20719..abf6b55 100644 --- a/drivers/media/dvb/ttpci/av7110.c +++ b/drivers/media/dvb/ttpci/av7110.c @@ -991,7 +991,7 @@ static int av7110_start_feed(struct dvb_demux_feed *feed) if (feed->type == DMX_TYPE_TS) { if ((feed->ts_type & TS_DECODER) && - (feed->pes_type < DMX_TS_PES_OTHER)) { + (feed->pes_type <= DMX_TS_PES_PCR)) { switch (demux->dmx.frontend->source) { case DMX_MEMORY_FE: if (feed->ts_type & TS_DECODER) |