Message ID | 1448455796-27315-1-git-send-email-clabbe.montjoie@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Nov 25, 2015 at 11:46:45PM +0000, Kuninori Morimoto wrote: > > Hi LABBE > > Thank you for your patch > > > of_match_device could return NULL, and so cause a NULL pointer > > dereference later. > > Even if the probability of this case is very low, fixing it made > > static analyzers happy. > > Solving this with of_device_get_match_data made also code simplier. > > > > Signed-off-by: LABBE Corentin <clabbe.montjoie@gmail.com> > > --- > > sound/soc/sh/rcar/core.c | 5 +++-- > > 1 file changed, 3 insertions(+), 2 deletions(-) > > > > diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c > > index deed48e..54cc44c 100644 > > --- a/sound/soc/sh/rcar/core.c > > +++ b/sound/soc/sh/rcar/core.c > > @@ -1204,7 +1204,6 @@ static int rsnd_probe(struct platform_device *pdev) > > struct rsnd_priv *priv; > > struct device *dev = &pdev->dev; > > struct rsnd_dai *rdai; > > - const struct of_device_id *of_id = of_match_device(rsnd_of_match, dev); > > const struct rsnd_of_data *of_data; > > int (*probe_func[])(struct platform_device *pdev, > > const struct rsnd_of_data *of_data, > > @@ -1221,11 +1220,13 @@ static int rsnd_probe(struct platform_device *pdev) > > }; > > int ret, i; > > > > + of_data = of_device_get_match_data(dev); > > + if (!of_data) > > + return 1; > > return 1 ? > You want to use -EINVAL ? > I do that Uwe Kleine-König said to me to do in others thread: https://lkml.org/lkml/2015/11/12/70 and https://lkml.org/lkml/2015/11/16/211 Regards
On Thu, Nov 26, 2015 at 08:17:15AM +0100, LABBE Corentin wrote: > On Wed, Nov 25, 2015 at 11:46:45PM +0000, Kuninori Morimoto wrote: > > > + of_data = of_device_get_match_data(dev); > > > + if (!of_data) > > > + return 1; > > return 1 ? > > You want to use -EINVAL ? > I do that Uwe Kleine-König said to me to do in others thread: > https://lkml.org/lkml/2015/11/12/70 and https://lkml.org/lkml/2015/11/16/211 What error code to return is going to depend on the context - you need to look at what the caller is expecting and how it will handle the value returned.
diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c index deed48e..54cc44c 100644 --- a/sound/soc/sh/rcar/core.c +++ b/sound/soc/sh/rcar/core.c @@ -1204,7 +1204,6 @@ static int rsnd_probe(struct platform_device *pdev) struct rsnd_priv *priv; struct device *dev = &pdev->dev; struct rsnd_dai *rdai; - const struct of_device_id *of_id = of_match_device(rsnd_of_match, dev); const struct rsnd_of_data *of_data; int (*probe_func[])(struct platform_device *pdev, const struct rsnd_of_data *of_data, @@ -1221,11 +1220,13 @@ static int rsnd_probe(struct platform_device *pdev) }; int ret, i; + of_data = of_device_get_match_data(dev); + if (!of_data) + return 1; info = devm_kzalloc(&pdev->dev, sizeof(struct rcar_snd_info), GFP_KERNEL); if (!info) return -ENOMEM; - of_data = of_id->data; /* * init priv data
of_match_device could return NULL, and so cause a NULL pointer dereference later. Even if the probability of this case is very low, fixing it made static analyzers happy. Solving this with of_device_get_match_data made also code simplier. Signed-off-by: LABBE Corentin <clabbe.montjoie@gmail.com> --- sound/soc/sh/rcar/core.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)