On Wed, Feb 10, 2021 at 02:28:54PM -0800, Drew Fustini wrote:
> +     ret = strncpy_from_user(buf, user_buf, PINMUX_MAX_NAME * 2);
> +     if (ret < 0) {
> +             dev_err(pctldev->dev, "failed to copy buffer from userspace");
> +             goto free_gname;
> +     }
> +     buf[len-1] = '\0';
> +
> +     ret = sscanf(buf, "%s %s", fname, gname);
> +     if (ret != 2) {
> +             dev_err(pctldev->dev, "expected format: <function-name> 
> <group-name>");
> +             goto free_gname;

We need a "ret = -EINVAL;" before the goto.  sscanf doesn't return error
codes.  Normally we would write it like so:

        if (sscanf(buf, "%s %s", fname, gname) != 2) {
                dev_err(pctldev->dev, "expected format: <function-name> 
<group-name>");
                ret = -EINVAL;
                goto free_gname;
        }

I'm going to write a Smatch check for this today.

> +     }
> +
> +     fsel = pinmux_func_name_to_selector(pctldev, fname);
> +     if (fsel < 0) {
> +             dev_err(pctldev->dev, "invalid function %s in map table\n", 
> fname);
> +             ret = -EINVAL;

ret = fsel;

> +             goto free_gname;
> +     }
> +

regards,
dan carpenter

Reply via email to