On Thu, 2018-03-01 at 11:29 -0800, Bart Van Assche wrote:
> Avoid that the strchr() call in this function examines uninitialized
> data on the stack. This patch avoids that Coverity reports the
> following:
> 
>     CID 173252:  Error handling issues  (CHECKED_RETURN)
>     "read(int, void *, size_t)" returns the number of bytes read, but
> it is ignored.
> 
> Signed-off-by: Bart Van Assche <bart.vanass...@wdc.com>

Reviewed-by: Martin Wilck <mwi...@suse.com>


> ---
>  kpartx/lopart.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/kpartx/lopart.c b/kpartx/lopart.c
> index 02b29e8cf91d..69c1eda1cc5c 100644
> --- a/kpartx/lopart.c
> +++ b/kpartx/lopart.c
> @@ -64,7 +64,7 @@ char *find_loop_by_file(const char *filename)
>       DIR *dir;
>       struct dirent *dent;
>       char dev[64], *found = NULL, *p;
> -     int fd;
> +     int fd, bytes_read;
>       struct stat statbuf;
>       struct loop_info loopinfo;
>       const char VIRT_BLOCK[] = "/sys/devices/virtual/block";
> @@ -86,14 +86,15 @@ char *find_loop_by_file(const char *filename)
>               if (fd < 0)
>                       continue;
>  
> -             if (read(fd, dev, sizeof(dev)) <= 0) {
> +             bytes_read = read(fd, dev, sizeof(dev) - 1);
> +             if (bytes_read <= 0) {
>                       close(fd);
>                       continue;
>               }
>  
>               close(fd);
>  
> -             dev[sizeof(dev)-1] = '\0';
> +             dev[bytes_read] = '\0';
>               p = strchr(dev, '\n');
>               if (p != NULL)
>                       *p = '\0';

-- 
Dr. Martin Wilck <mwi...@suse.com>, Tel. +49 (0)911 74053 2107
SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel

Reply via email to