cxd2820r: fix gpio null pointer dereference
authorAntti Palosaari <crope@iki.fi>
Mon, 16 Jan 2017 21:27:41 +0000 (19:27 -0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 12 Mar 2017 05:41:41 +0000 (06:41 +0100)
commit 0ffb94b6cc5df6376ab6bff5b80075641f6716f8 upstream.

Setting GPIOs during probe causes null pointer deference when
GPIOLIB was not selected by Kconfig. Initialize driver private
field before calling set gpios.

It is regressing bug since 4.9.

Fixes: 07fdf7d9f19f ("[media] cxd2820r: add I2C driver bindings")

Reported-by: Chris Rankin <rankincj@gmail.com>
Tested-by: Chris Rankin <rankincj@gmail.com>
Tested-by: Håkan Lennestål <hakan.lennestal@gmail.com>
Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/media/dvb-frontends/cxd2820r_core.c

index 95267c6..f6ebbb4 100644 (file)
@@ -615,6 +615,7 @@ static int cxd2820r_probe(struct i2c_client *client,
        }
 
        priv->client[0] = client;
+       priv->fe.demodulator_priv = priv;
        priv->i2c = client->adapter;
        priv->ts_mode = pdata->ts_mode;
        priv->ts_clk_inv = pdata->ts_clk_inv;
@@ -697,7 +698,6 @@ static int cxd2820r_probe(struct i2c_client *client,
        memcpy(&priv->fe.ops, &cxd2820r_ops, sizeof(priv->fe.ops));
        if (!pdata->attach_in_use)
                priv->fe.ops.release = NULL;
-       priv->fe.demodulator_priv = priv;
        i2c_set_clientdata(client, priv);
 
        /* Setup callbacks */