On Mon, Aug 19, 2024 at 3:19 PM Tao Liu <l...@redhat.com> wrote:

> Hi Lianbo,
>
> Thanks for the patch, I have run the test and no regressions found. So ack.
>
>
Thank you for helping with the test, Tao.

Applied:
https://github.com/crash-utility/crash/commit/79b93ecb2e72ec211918c07b0a857b11a18726fc

Thanks
Lianbo


> Thanks,
> Tao Liu
>
> On Fri, Aug 16, 2024 at 2:30 PM Lianbo Jiang <liji...@redhat.com> wrote:
> >
> > Sometimes, in a production environment, there are still some vmcores
> > that are incomplete, such as partial header or the data is corrupted.
> > When crash tool attempts to parse such vmcores, it may fail as below:
> >
> >   $ ./crash --osrelease vmcore
> >   Bus error (core dumped)
> >
> > or
> >
> >   $ crash vmlinux vmcore
> >   ...
> >   Bus error (core dumped)
> >  $
> >
> > Gdb calltrace:
> >
> >   $ gdb /home/lijiang/src/crash/crash /tmp/core.126301
> >   Core was generated by `./crash --osrelease
> /home/lijiang/src/39317/vmcore'.
> >   Program terminated with signal SIGBUS, Bus error.
> >   #0  __memcpy_evex_unaligned_erms () at
> ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:831
> >   831             LOAD_ONE_SET((%rsi), PAGE_SIZE, %VMM(4), %VMM(5),
> %VMM(6), %VMM(7))
> >   (gdb) bt
> >   #0  __memcpy_evex_unaligned_erms () at
> ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:831
> >   #1  0x0000000000651096 in read_dump_header (file=0x7ffc59ddff5f
> "/home/lijiang/src/39317/vmcore") at diskdump.c:820
> >   #2  0x0000000000651cf3 in is_diskdump (file=0x7ffc59ddff5f
> "/home/lijiang/src/39317/vmcore") at diskdump.c:1042
> >   #3  0x0000000000502ac9 in get_osrelease (dumpfile=0x7ffc59ddff5f
> "/home/lijiang/src/39317/vmcore") at main.c:1938
> >   #4  0x00000000004fb2e8 in main (argc=3, argv=0x7ffc59dde3a8) at
> main.c:271
> >   (gdb) frame 1
> >   #1  0x0000000000651096 in read_dump_header (file=0x7ffc59ddff5f
> "/home/lijiang/src/39317/vmcore") at diskdump.c:820
> >   820                   memcpy(dd->dumpable_bitmap, dd->bitmap +
> bitmap_len/2,
> >
> > This may happen on attempting access to a page of the buffer that lies
> > beyond the end of the mapped file(see the mmap() man page).
> >
> > Let's add a check to avoid such issues as much as possible, but still
> > not guarantee that it can work well in any extreme situation.
> >
> > Fixes: a3344239743b ("diskdump: use mmap/madvise to improve the
> start-up")
> > Reported-by: Buland Kumar Singh <bsi...@redhat.com>
> > Signed-off-by: Lianbo Jiang <liji...@redhat.com>
> > ---
> >  diskdump.c | 16 ++++++++++++++++
> >  1 file changed, 16 insertions(+)
> >
> > diff --git a/diskdump.c b/diskdump.c
> > index 1f7118cacfc6..ce3cbb7b12dd 100644
> > --- a/diskdump.c
> > +++ b/diskdump.c
> > @@ -805,6 +805,22 @@ restart:
> >                         goto err;
> >                 }
> >         } else {
> > +               struct stat sbuf;
> > +               if (fstat(dd->dfd, &sbuf) != 0) {
> > +                       error(INFO, "Cannot fstat the dump file\n");
> > +                       goto err;
> > +               }
> > +
> > +               /*
> > +                * For memory regions mapped with the mmap(), attempts
> access to
> > +                * a page of the buffer that lies beyond the end of the
> mapped file,
> > +                * which may cause SIGBUS(see the mmap() man page).
> > +                */
> > +               if (bitmap_len + offset > sbuf.st_size) {
> > +                       error(INFO, "Mmap: Beyond the end of mapped
> file, corrupted?\n");
> > +                       goto err;
> > +               }
> > +
> >                 dd->bitmap = mmap(NULL, bitmap_len, PROT_READ,
> >                                         MAP_SHARED, dd->dfd, offset);
> >                 if (dd->bitmap == MAP_FAILED)
> > --
> > 2.45.1
>
--
Crash-utility mailing list -- devel@lists.crash-utility.osci.io
To unsubscribe send an email to devel-le...@lists.crash-utility.osci.io
https://${domain_name}/admin/lists/devel.lists.crash-utility.osci.io/
Contribution Guidelines: https://github.com/crash-utility/crash/wiki

Reply via email to