Re: [BUG] gpiolib: cdev: can't read RELEASED event for last line

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, May 25, 2023 at 11:09:52AM +0800, Kent Gibson wrote:
> Hi Bart,
> 
> In testing I'm finding that I can't read the RELEASED event from the
> chip fd when the last line on the chip is released.
> The chip fd becomes readable, but when I try to read it I get ENODEV.
> 
> I suspect this change is the likely culprit:
> 
> 533aae7c94db gpiolib: cdev: fix NULL-pointer dereferences
> 
> @@ -2425,6 +2449,9 @@ static ssize_t lineinfo_watch_read(struct file *file, char __user *buf,
>         int ret;
>         size_t event_size;
> 
> +       if (!cdev->gdev->chip)
> +               return -ENODEV;
> +
> 
> though I haven't bisected it yet to be sure.
> 
> Btw, that is testing on 6.4.0-rc3 mainline.
> 

To be clear, I happened to spot the problem with 6.4.0-rc3, but the
problem was almost certainly introduced earlier.

The problem ican be repeated with the info_change_events test from [1]

e.g.

$ cargo test --all-features chip

.... 

failures:

---- chip::uapi_v1::info_change_events stdout ----
read: Err(UapiError(ReadEvent, Os(Errno { code: 19, description: Some("No such device") })))
thread 'chip::uapi_v1::info_change_events' panicked at 'assertion failed: res.is_ok()', lib/tests/chip.rs:719:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

---- chip::uapi_v2::info_change_events stdout ----
read: Err(UapiError(ReadEvent, Os(Errno { code: 19, description: Some("No such device") })))
thread 'chip::uapi_v2::info_change_events' panicked at 'assertion failed: res.is_ok()', lib/tests/chip.rs:719:9


I haven't done a complete bisection, but the tests do pass with 6.1.0-rc1
- the previous kernel I was testing with.

I can also confirm that receiving the event using a blocking read() on the
fd still works, it is a poll() on the fd followed by a read() that fails.

I only ran across the bug by pure chance while debugging that test case
- previously it only did the blocking read.
So there is probably limited real world impact, but something additional
to test for, and fix, of course.

Cheers,
Kent.
[1] https://github.com/warthog618/gpiocdev-rs/blob/36e9c1640e2ae5c6e08d43cd0c254a2e7cec2d63/lib/tests/chip.rs ~line 649



[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux