Merge branch 'v4l_for_linus' of git://linuxtv.org/fixes

* 'v4l_for_linus' of git://linuxtv.org/fixes:
V4L/DVB: dvb-core: fix initialization of feeds list in demux filter
V4L/DVB: dvb_demux: Don't use vmalloc at dvb_dmx_swfilter_packet
V4L/DVB: Fix the risk of an oops at dvb_dmx_release

+10 -12
+1 -1
drivers/media/dvb/dvb-core/dmxdev.c
··· 761 761 dvb_ringbuffer_init(&dmxdevfilter->buffer, NULL, 8192); 762 762 dmxdevfilter->type = DMXDEV_TYPE_NONE; 763 763 dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_ALLOCATED); 764 - INIT_LIST_HEAD(&dmxdevfilter->feed.ts); 765 764 init_timer(&dmxdevfilter->timer); 766 765 767 766 dvbdev->users++; ··· 886 887 dmxdevfilter->type = DMXDEV_TYPE_PES; 887 888 memcpy(&dmxdevfilter->params, params, 888 889 sizeof(struct dmx_pes_filter_params)); 890 + INIT_LIST_HEAD(&dmxdevfilter->feed.ts); 889 891 890 892 dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_SET); 891 893
+9 -11
drivers/media/dvb/dvb-core/dvb_demux.c
··· 426 426 }; 427 427 }; 428 428 429 - if (dvb_demux_tscheck) { 430 - if (!demux->cnt_storage) 431 - demux->cnt_storage = vmalloc(MAX_PID + 1); 432 - 433 - if (!demux->cnt_storage) { 434 - printk(KERN_WARNING "Couldn't allocate memory for TS/TEI check. Disabling it\n"); 435 - dvb_demux_tscheck = 0; 436 - goto no_dvb_demux_tscheck; 437 - } 438 - 429 + if (demux->cnt_storage) { 439 430 /* check pkt counter */ 440 431 if (pid < MAX_PID) { 441 432 if (buf[1] & 0x80) ··· 445 454 }; 446 455 /* end check */ 447 456 }; 448 - no_dvb_demux_tscheck: 449 457 450 458 list_for_each_entry(feed, &demux->feed_list, list_head) { 451 459 if ((feed->pid != pid) && (feed->pid != 0x2000)) ··· 1236 1246 dvbdemux->feed = vmalloc(dvbdemux->feednum * sizeof(struct dvb_demux_feed)); 1237 1247 if (!dvbdemux->feed) { 1238 1248 vfree(dvbdemux->filter); 1249 + dvbdemux->filter = NULL; 1239 1250 return -ENOMEM; 1240 1251 } 1241 1252 for (i = 0; i < dvbdemux->filternum; i++) { ··· 1246 1255 for (i = 0; i < dvbdemux->feednum; i++) { 1247 1256 dvbdemux->feed[i].state = DMX_STATE_FREE; 1248 1257 dvbdemux->feed[i].index = i; 1258 + } 1259 + 1260 + if (dvb_demux_tscheck) { 1261 + dvbdemux->cnt_storage = vmalloc(MAX_PID + 1); 1262 + 1263 + if (!dvbdemux->cnt_storage) 1264 + printk(KERN_WARNING "Couldn't allocate memory for TS/TEI check. Disabling it\n"); 1249 1265 } 1250 1266 1251 1267 INIT_LIST_HEAD(&dvbdemux->frontend_list);