Re: [E-devel] imlib2_load: fix access/return garbage if stat() fails

Kim Woelders <[email protected]> Tue, 5 Sep 2023 20:28:53 +0200
Newsgroups gmane.comp.window-managers.enlightenment.devel
Message-ID <[email protected]>
Hi Omar,

Some of this was done just after v1.12.0: 
https://git.enlightenment.org/old/legacy-imlib2/commit/74dae151cd02c95d35fbd9ca8a20f21ec1c9cdec

Using fstat() would be the proper thing to do but in case of failure fd 
needs to be closed.

/Kim


On 2023-09-04 17:44, Omar Polo wrote:
> Spotted thanks to a warning of the compiler.  While here convert it to
> fstat after open, and range check the value we're about to mmap.
> 
> 
> Thanks,
> 
> Omar Polo
> 
> Index: src/bin/imlib2_load.c
> --- src/bin/imlib2_load.c.orig
> +++ src/bin/imlib2_load.c
> @@ -91,16 +91,19 @@ image_load_mem(const char *file, int *perr)
>      else
>         ext = file;
>   
> -   err = stat(file, &st);
> -   if (err)
> -      goto bail;
> -
>      im = NULL;
>      fd = -1;
>      fdata = MAP_FAILED;
>   
>      fd = open(file, O_RDONLY);
>      if (fd < 0)
> +      goto bail;
> +
> +   err = fstat(fd, &st);
> +   if (err)
> +      goto bail;
> +
> +   if (st.st_size > SIZE_MAX)
>         goto bail;
>   
>      fdata = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
> 
> 
> _______________________________________________
> enlightenment-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel