projects/linux·commit adefdcee

V4L/DVB: Fix the risk of an oops at dvb_dmx_release

adefdcee · Mauro Carvalho Chehab <[email protected]> · 2010-02-01 10:35:22 -03:00

dvb_dmx_init tries to allocate virtual memory for 2 pointers: filter and feed.

If the second vmalloc fails, filter is freed, but the pointer keeps pointing
to the old place. Later, when dvb_dmx_release() is called, it will try to
free an already freed memory, causing an OOPS.

Reviewed-by: Andy Walls <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>
Commit
adefdceef4c1cefee2678724cd57824c8ca80091
Parents
6339204e

Changes

1 files changed · +1 −0

FileStatusAddDelContent
drivers/media/dvb/dvb-core/dvb_demux.cmodified+1−0View file

drivers/media/dvb/dvb-core/dvb_demux.c

View file
diff --git a/drivers/media/dvb/dvb-core/dvb_demux.c b/drivers/media/dvb/dvb-core/dvb_demux.c
index b78cfb7..a78408e 100644
--- a/drivers/media/dvb/dvb-core/dvb_demux.c
+++ b/drivers/media/dvb/dvb-core/dvb_demux.c
@@ -1246,6 +1246,7 @@ int dvb_dmx_init(struct dvb_demux *dvbdemux)
dvbdemux->feed = vmalloc(dvbdemux->feednum * sizeof(struct dvb_demux_feed));
if (!dvbdemux->feed) {
vfree(dvbdemux->filter);
+ dvbdemux->filter = NULL;
return -ENOMEM;
}
for (i = 0; i < dvbdemux->filternum; i++) {