media: ddbridge: only register frontends in fe2 if fe is not NULL
authorDaniel Scheller <d.scheller@gmx.net>
Sat, 12 Aug 2017 11:55:56 +0000 (07:55 -0400)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Sun, 20 Aug 2017 11:06:51 +0000 (07:06 -0400)
Smatch reported:

  drivers/media/pci/ddbridge/ddbridge-core.c:1602 dvb_input_attach() error: we previously assumed 'dvb->fe' could be null (see line 1595)

dvb->fe2 will ever only be populated when dvb->fe is set. So only handle
registration of dvb->fe2 when dvb->fe got set beforehand by moving the
registration into the "if (dvb->fe)" conditional.

Cc: Ralph Metzler <rjkm@metzlerbros.de>
Signed-off-by: Daniel Scheller <d.scheller@gmx.net>
Tested-by: Richard Scobie <r.scobie@clear.net.nz>
Tested-by: Jasmin Jessich <jasmin@anw.at>
Tested-by: Dietmar Spingler <d_spingler@freenet.de>
Tested-by: Manfred Knick <Manfred.Knick@t-online.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/pci/ddbridge/ddbridge-core.c

index d7bf01f38d98747c90fbf44c92de4dfa043e7b79..759a53e822528760f51a1377dc5813b25249d07b 100644 (file)
@@ -1506,23 +1506,25 @@ static int dvb_input_attach(struct ddb_input *input)
                return 0;
        }
        dvb->attached = 0x30;
+
        if (dvb->fe) {
                if (dvb_register_frontend(adap, dvb->fe) < 0)
                        return -ENODEV;
+
+               if (dvb->fe2) {
+                       if (dvb_register_frontend(adap, dvb->fe2) < 0)
+                               return -ENODEV;
+                       dvb->fe2->tuner_priv = dvb->fe->tuner_priv;
+                       memcpy(&dvb->fe2->ops.tuner_ops,
+                              &dvb->fe->ops.tuner_ops,
+                              sizeof(struct dvb_tuner_ops));
+               }
        }
-       if (dvb->fe2) {
-               if (dvb_register_frontend(adap, dvb->fe2) < 0)
-                       return -ENODEV;
-               dvb->fe2->tuner_priv = dvb->fe->tuner_priv;
-               memcpy(&dvb->fe2->ops.tuner_ops,
-                      &dvb->fe->ops.tuner_ops,
-                      sizeof(struct dvb_tuner_ops));
-       }
+
        dvb->attached = 0x31;
        return 0;
 }
 
-
 static int port_has_encti(struct ddb_port *port)
 {
        struct device *dev = port->dev->dev;