Applied, thank you.

On Tue, Apr 23, 2024 at 10:10 PM Sam James <s...@gentoo.org> wrote:
>
> When `fstat` fails, `st` is left uninitialised. In our case, Ben Kohler
> noticed our release media builds were failing in Gentoo on x86 when building
> busybox with occasional SIGBUS. This turned out to be EOVERFLOW (from 32-bit
> ino_t) which wasn't being reported because nothing was checking the return 
> value
> from `fstat`.
>
> Fix that to avoid UB (use of uninit var) and to give a more friendly
> error to the user.
>
> This actually turns out to be fixed already in the kernel from back in
> 2010 [0] and 2016 [1].
>
> [0] 
> https://github.com/torvalds/linux/commit/a3ba81131aca243bfecfa78c42edec0cd69f72d6
> [1] 
> https://github.com/torvalds/linux/commit/46fe94ad18aa7ce6b3dad8c035fb538942020f2b
>
> Reported-by: Ben Kohler <bkoh...@gentoo.org>
> Signed-off-by: Sam James <s...@gentoo.org>
> ---
>  scripts/basic/fixdep.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c
> index 66be73aad..ebc715730 100644
> --- a/scripts/basic/fixdep.c
> +++ b/scripts/basic/fixdep.c
> @@ -292,7 +292,11 @@ void do_config_file(char *filename)
>                 perror(filename);
>                 exit(2);
>         }
> -       fstat(fd, &st);
> +       if (fstat(fd, &st) < 0) {
> +               fprintf(stderr, "fixdep: fstat");
> +               perror(filename);
> +               exit(2);
> +       }
>         if (st.st_size == 0) {
>                 close(fd);
>                 return;
> @@ -368,7 +372,11 @@ void print_deps(void)
>                 perror(depfile);
>                 exit(2);
>         }
> -       fstat(fd, &st);
> +       if (fstat(fd, &st) < 0) {
> +               fprintf(stderr, "fixdep: fstat");
> +               perror(depfile);
> +               exit(2);
> +       }
>         if (st.st_size == 0) {
>                 fprintf(stderr,"fixdep: %s is empty\n",depfile);
>                 close(fd);
> --
> 2.44.0
>
> _______________________________________________
> busybox mailing list
> busybox@busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to