<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman, new york, times, serif;font-size:12pt"><br>I have tested the patch below (included at the end) and seems to kill the "NULL
Pointer dereference" bug when initializing the PCTV200e driver.<br>
  <br>
The
reason I found for the bug is that in the function "pctv200e_frontend_attach" "adap-&gt;fe"
is NULL, and when the mt352 registration fails it continues being NULL.
When the mt2060 is attached using: "(adap-&gt;fe = dvb_attach(mt2060_attach, &amp;adap-&gt;fe-&gt;ops.tuner_ops, &amp;adap-&gt;dev-&gt;i2c_adap, &amp;pctv200e_mt2060_config, if1)". The "&amp;adap-&gt;fe-&gt;ops.tuner_ops" is non existent since "adap-&gt;fe" is null. And when in "mt2060.c"&nbsp; the following line: <br><br>
&nbsp;&nbsp;&nbsp; struct dvb_frontend *fe = ops-&gt;fe;<br>
  <br>
tries to reference the NULL pointer.<br><br>With this patch the initialization and deinitialization works fine.<br><br>I have tested it in a 2.6.20.16 Ubuntu Kernel.<br><br>Any way in my PCTV200e tuner still non of the frontends is attached, I get: <br><br>dvb-usb: no frontend was attached by 'Pinnacle PCTV 200e DVB-T'<br><br>Does anyone gets it attached?<br><br>Regards,<br><br>Juan<br><br><br>Patch file:<br>
<br>--- pctv200e.c.orig&nbsp;&nbsp;&nbsp; 2007-07-14 09:43:49.000000000 +0300<br>+++ pctv200e.c&nbsp;&nbsp;&nbsp; 2007-07-14 10:33:26.000000000 +0300<br>@@ -159,20 +159,31 @@ static u16 if1 = 1220; // this is probab<br>&nbsp;// source (for the tuner attach: dibusb-common.c)<br>&nbsp;static int pctv200e_frontend_attach(struct dvb_usb_adapter *adap)<br>&nbsp;{<br>+&nbsp;&nbsp;&nbsp; struct dvb_frontend *fe;<br>+<br>&nbsp;&nbsp;&nbsp;&nbsp; if ((adap-&gt;fe = dvb_attach(mt352_attach, &amp;pctv200e_mt352_config, &amp;adap-&gt;dev-&gt;i2c_adap)) != NULL) {<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; adap-&gt;fe-&gt;ops.tuner_ops.calc_regs = dvb_usb_tuner_calc_regs;<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 0;<br>-&nbsp;&nbsp;&nbsp; } else<br>+&nbsp;&nbsp;&nbsp; } else&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; warn("frontend_attach failed (mt352)");<br>&nbsp;<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fe = kzalloc(sizeof(struct dvb_frontend),
 GFP_KERNEL);<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (fe == NULL)<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return -EIO;<br>+<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; adap-&gt;fe = fe;&nbsp;&nbsp;&nbsp; <br>+&nbsp;&nbsp;&nbsp; }<br>+<br>&nbsp;&nbsp;&nbsp;&nbsp; warn("next: attaching tuner.");<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; if ((adap-&gt;fe = dvb_attach(mt2060_attach, &amp;adap-&gt;fe-&gt;ops.tuner_ops, &amp;adap-&gt;dev-&gt;i2c_adap, &amp;pctv200e_mt2060_config, if1)) != NULL) {<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; adap-&gt;fe-&gt;ops.tuner_ops.fe = adap-&gt;fe;<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; adap-&gt;fe-&gt;ops.tuner_ops.set_params = pctv200e_mt2060_tuner_set_params;<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 0;<br>-&nbsp;&nbsp;&nbsp; }else<br>+&nbsp;&nbsp;&nbsp; } else&nbsp; {<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; kfree(fe);<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; warn("frontend_attach failed
 (mt2060)");<br>+&nbsp;&nbsp;&nbsp; }<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; warn(" frontend attached.");<br>&nbsp;&nbsp;&nbsp;&nbsp; return -EIO;<br><br></div><br>
                <hr size=1><br><font face="Verdana" size="-2">LLama Gratis a cualquier PC del Mundo.<br>Llamadas a fijos y móviles desde 1 céntimo por minuto.<br><a href="http://us.rd.yahoo.com/mail/es/tagline/messenger/*http://es.voice.yahoo.com/">http://es.voice.yahoo.com</a></font></body></html>