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_