All of lore.kernel.org
 help / color / mirror / Atom feed
From: Geert Uytterhoeven <geert@linux-m68k.org>
To: Brian Norris <briannorris@chromium.org>
Cc: Thierry Reding <thierry.reding@gmail.com>,
	Linux PWM List <linux-pwm@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Brian Norris <computersforpeace@gmail.com>,
	Boris Brezillon <boris.brezillon@free-electrons.com>,
	Doug Anderson <dianders@chromium.org>,
	linux-renesas-soc@vger.kernel.org,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Subject: Re: [PATCH v2] pwm: improve args checking in pwm_apply_state()
Date: Tue, 21 Jun 2016 16:42:04 +0200	[thread overview]
Message-ID: <CAMuHMdUVgwb8QwKcORDuoJUCJJKE7Xmzg3R45S1VdnupAXUx0w@mail.gmail.com> (raw)
In-Reply-To: <1464367549-111530-1-git-send-email-briannorris@chromium.org>

Hi Brian,

On Fri, May 27, 2016 at 6:45 PM, Brian Norris <briannorris@chromium.org> wrote:
> It seems like in the process of refactoring pwm_config() to utilize the
> newly-introduced pwm_apply_state() API, some args/bounds checking was
> dropped.
>
> In particular, I noted that we are now allowing invalid period
> selections. e.g.:
>
>   # echo 1 > /sys/class/pwm/pwmchip0/export
>   # cat /sys/class/pwm/pwmchip0/pwm1/period
>   100
>   # echo 101 > /sys/class/pwm/pwmchip0/pwm1/duty_cycle
>   [... driver may or may not reject the value, or trigger some logic bug ...]
>
> It's better to see:
>
>   # echo 1 > /sys/class/pwm/pwmchip0/export
>   # cat /sys/class/pwm/pwmchip0/pwm1/period
>   100
>   # echo 101 > /sys/class/pwm/pwmchip0/pwm1/duty_cycle
>   -bash: echo: write error: Invalid argument
>
> This patch reintroduces some bounds checks in both pwm_config() (for its
> signed parameters; we don't want to convert negative values into large
> unsigned values) and in pwm_apply_state() (which fix the above described
> behavior, as well as other potential API misuses).
>
> Fixes: 5ec803edcb70 ("pwm: Add core infrastructure to allow atomic updates")
> Signed-off-by: Brian Norris <briannorris@chromium.org>
> ---
> v2:
>  * changed subject, as this covers more scope now
>  * add Fixes tag, as this is a v4.7-rc regression
>  * add more bounds/args checks in pwm_apply_state() and pwm_config()
>
>  drivers/pwm/core.c  | 3 ++-
>  include/linux/pwm.h | 3 +++
>  2 files changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
> index dba3843c53b8..ed337a8c34ab 100644
> --- a/drivers/pwm/core.c
> +++ b/drivers/pwm/core.c
> @@ -457,7 +457,8 @@ int pwm_apply_state(struct pwm_device *pwm, struct pwm_state *state)
>  {
>         int err;
>
> -       if (!pwm)
> +       if (!pwm || !state || !state->period ||
> +           state->duty_cycle > state->period)
>                 return -EINVAL;

This check breaks the LCD backlight on r8a7740/armadillo.
Apparently both period and duty_cycle are zero during the first invocation.
Later, these are initialized from DT, cfr.

        pwms = <&tpu 2 33333 PWM_POLARITY_INVERTED>;

in arch/arm/boot/dts/r8a7740-armadillo800eva.dts.

With added debug printing, the difference between failure and success is:

 renesas-tpu-pwm e6600000.pwm: TPU PWM -1 registered
 tpu_pwm_request:223
 pwm_apply_state:460: pwm backlight/2: period 0, duty_cycle 0
+Ignoring failure
+pwm_apply_state:479: polarity 0 -> 1
+tpu_pwm_set_polarity:343
+pwm_apply_state:502: period 0 -> 0
+pwm_apply_state:503: duty_cycle 0 -> 0
+pwm_apply_state:516: enabled 0 -> 0
 pwm_config:238: pwm backlight/2: duty_ns 33333, period_ns 33333
 pwm_apply_state:460: pwm backlight/2: period 33333, duty_cycle 33333
-pwm_apply_state:479: polarity 0 -> 0
+pwm_apply_state:479: polarity 1 -> 1
 pwm_apply_state:502: period 0 -> 33333
 pwm_apply_state:503: duty_cycle 0 -> 33333
 tpu_pwm_config:267
 pwm_apply_state:516: enabled 0 -> 0
 pwm_apply_state:460: pwm backlight/2: period 33333, duty_cycle 33333
-pwm_apply_state:479: polarity 0 -> 0
+pwm_apply_state:479: polarity 1 -> 1
 pwm_apply_state:502: period 33333 -> 33333
 pwm_apply_state:503: duty_cycle 33333 -> 33333
 pwm_apply_state:516: enabled 0 -> 1
 tpu_pwm_enable:354

Sorry for not noticing last week, before it hit mainline.

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

  parent reply	other threads:[~2016-06-21 14:42 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-27 16:45 [PATCH v2] pwm: improve args checking in pwm_apply_state() Brian Norris
2016-05-27 16:45 ` Brian Norris
2016-05-27 16:54 ` Boris Brezillon
2016-05-27 16:54   ` Boris Brezillon
2016-06-10 12:20 ` Thierry Reding
2016-06-21 14:42 ` Geert Uytterhoeven [this message]
2016-06-21 18:37   ` Brian Norris
2016-06-21 18:37     ` Brian Norris
2016-06-21 21:22     ` Boris Brezillon
2016-06-22  8:04     ` Boris Brezillon
2016-06-22  8:04       ` Boris Brezillon
2016-06-22 12:00       ` Thierry Reding
2016-06-22 14:32       ` Geert Uytterhoeven
2016-06-22 19:16       ` Brian Norris
2016-06-22 20:41         ` Boris Brezillon
2016-06-22 20:46           ` Brian Norris
2016-06-23 16:55             ` Thierry Reding

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAMuHMdUVgwb8QwKcORDuoJUCJJKE7Xmzg3R45S1VdnupAXUx0w@mail.gmail.com \
    --to=geert@linux-m68k.org \
    --cc=boris.brezillon@free-electrons.com \
    --cc=briannorris@chromium.org \
    --cc=computersforpeace@gmail.com \
    --cc=dianders@chromium.org \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pwm@vger.kernel.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=thierry.reding@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.