lkml.org 
[lkml]   [2022]   [Nov]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 6.0 06/44] tools: iio: iio_generic_buffer: Fix read size
    Date
    From: Matti Vaittinen <mazziesaccount@gmail.com>

    [ Upstream commit 7c919b619bcc68158921b1bd968f0e704549bbb6 ]

    When noevents is true and small buffer is used the allocated memory for
    holding the data may be smaller than the hard-coded 64 bytes. This can
    cause the iio_generic_buffer to crash.

    Following was recorded on beagle bone black with v6.0 kernel and the
    digit fix patch:
    https://lore.kernel.org/all/Y0f+tKCz+ZAIoroQ@dc75zzyyyyyyyyyyyyycy-3.rev.dnainternet.fi/
    using valgrind;

    ==339== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
    ==339== Command: /iio_generic_buffer -n kx022-accel -T0 -e -l 10 -a -w 2000000
    ==339== Parent PID: 307
    ==339==
    ==339== Syscall param read(buf) points to unaddressable byte(s)
    ==339== at 0x496BFA4: read (read.c:26)
    ==339== by 0x11699: main (iio_generic_buffer.c:724)
    ==339== Address 0x4ab3518 is 0 bytes after a block of size 160 alloc'd
    ==339== at 0x4864B70: malloc (vg_replace_malloc.c:381)
    ==339== by 0x115BB: main (iio_generic_buffer.c:677)

    Fix this by always using the same size for reading as was used for
    data storage allocation.

    Signed-off-by: Matti Vaittinen <mazziesaccount@gmail.com>
    Link: https://lore.kernel.org/r/Y0kMh0t5qUXJw3nQ@dc75zzyyyyyyyyyyyyycy-3.rev.dnainternet.fi
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    tools/iio/iio_generic_buffer.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/tools/iio/iio_generic_buffer.c b/tools/iio/iio_generic_buffer.c
    index 2491c54a5e4f..f8deae4e26a1 100644
    --- a/tools/iio/iio_generic_buffer.c
    +++ b/tools/iio/iio_generic_buffer.c
    @@ -715,12 +715,12 @@ int main(int argc, char **argv)
    continue;
    }

    - toread = buf_len;
    } else {
    usleep(timedelay);
    - toread = 64;
    }

    + toread = buf_len;
    +
    read_size = read(buf_fd, data, toread * scan_size);
    if (read_size < 0) {
    if (errno == EAGAIN) {
    --
    2.35.1
    \
     
     \ /
      Last update: 2022-11-23 13:41    [W:2.535 / U:0.468 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site