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