RE: [PATCH 2/4] pinctrl: Fix pinmux_hog_maps when ctrl_dev_name isnot set

From: Stephen Warren
Date: Fri Jan 20 2012 - 11:57:12 EST


Tony Lindgren wrote at Friday, January 20, 2012 9:17 AM:
> The ctrl_dev_name is optional for struct pinmux_map assuming
> that ctrl_dev is set. Without this patch we can get:
>
> Unable to handle kernel NULL pointer dereference at virtual address 00000000

> diff --git a/drivers/pinctrl/pinmux.c b/drivers/pinctrl/pinmux.c


> @@ -992,9 +992,12 @@ int pinmux_hog_maps(struct pinctrl_dev *pctldev)
>
> for (i = 0; i < pinmux_maps_num; i++) {
> struct pinmux_map const *map = &pinmux_maps[i];
> + int match_found = 0;
>
> - if (((map->ctrl_dev == dev) ||
> - !strcmp(map->ctrl_dev_name, devname)) &&
> + if (map->ctrl_dev_name && !strcmp(map->ctrl_dev_name, devname))
> + match_found = 1;
> +
> + if (((map->ctrl_dev == dev) || match_found) &&
> map->hog_on_boot) {
> /* OK time to hog! */
> ret = pinmux_hog_map(pctldev, map);

Wouldn't it be better if match_found was true for all matching cases,
in other words for the new code to be:

int match_found = 0;

if (map->ctrl_dev_name && !strcmp(map->ctrl_dev_name, devname))
match_found = 1;
if (map->ctrl_dev == dev)
match_found = 1;
if (match_found && map->hog_on_boot) {

--
nvpublic

¢éì®&Þ~º&¶¬–+-±éÝ¥Šw®žË±Êâmébžìdz¹Þ)í…æèw*jg¬±¨¶‰šŽŠÝj/êäz¹ÞŠà2ŠÞ¨è­Ú&¢)ß«a¶Úþø®G«éh®æj:+v‰¨Šwè†Ù>Wš±êÞiÛaxPjØm¶Ÿÿà -»+ƒùdš_