glibc: the x86 mem[r]chr changes cause random segfaults
Noah Goldstein
goldstein.w.n@gmail.com
Wed Jun 8 19:58:58 GMT 2022
On Wed, Jun 8, 2022 at 12:54 PM Noah Goldstein <goldstein.w.n@gmail.com> wrote:
>
> On Wed, Jun 8, 2022 at 12:06 PM Noah Goldstein <goldstein.w.n@gmail.com> wrote:
> >
> > On Wed, Jun 8, 2022 at 11:57 AM H.J. Lu <hjl.tools@gmail.com> wrote:
> > >
> > > On Wed, Jun 8, 2022 at 11:22 AM Manuel Lauss via Libc-alpha
> > > <libc-alpha@sourceware.org> wrote:
> > > >
> > > > Hi Noah,
> > > >
> > > > One of your recent x86 mem[r]chr patches to glibc causes random segfaults in
> > > > gcc; I haven't nailed it down to a single patch yet, but a glibc built
> > > > up to commit 0218463dd8265ed937622f88ac68c7d984fe0cfc (all your
> > > > commits from 07th June reverted) works just fine.
> > > > For me it's very easy to reproduce, just rebuild glibc.
> > > >
> > > > The backtraces all look like this (sorry, no debug symbols for gcc):
> > > > #0 0x00007fdd9df1d36a in __GI___libc_free (mem=0x672f7ffcc7137ff0) at
> > > > malloc.c:3368
> > > > warning: Source file is more recent than executable.
> > > > 3368 if (chunk_is_mmapped (p)) /* release
> > > > mmapped memory. */
> > > > (gdb) bt
> > > > #0 0x00007fdd9df1d36a in __GI___libc_free (mem=0x672f7ffcc7137ff0) at
> > > > malloc.c:3368
> > > > #1 0x00007fdd9debe3e0 in scratch_buffer_free (buffer=0x7ffcc7137fe0)
> > > > at ../include/scratch_buffer.h:86
> > > > #2 realpath_stk (name=<optimized out>, resolved=<optimized out>,
> > > > rname_buf=rname_buf@entry=0x7ffcc7137fe0) at canonicalize.c:423
> > > > #3 0x00007fdd9debeaff in __GI___realpath (name=<optimized out>,
> > > > resolved=<optimized out>) at canonicalize.c:449
> > >
> > > I suspect that rawmemchr isn't properly handled.
> > >
> >
> > Correct. The new code changes how pointers were aligned in the page cross
> > case and didn't adjust rawmemchr accordingly.
> >
>
> Made bugzilla and posted fix there. Testing right now:
> https://sourceware.org/bugzilla/show_bug.cgi?id=29234
Posted patch.
> > > > #4 0x000000000048b818 in ?? ()
> > > > #5 0x000000000048a62c in ?? ()
> > > > #6 0x000000000040d9b4 in ?? ()
> > > > #7 0x0000000000416b62 in ?? ()
> > > > #8 0x00000000004054e9 in ?? ()
> > > > #9 0x0000000000405a89 in ?? ()
> > > > #10 0x00007fdd9dea82b7 in __libc_start_call_main
> > > > (main=main@entry=0x405a60, argc=argc@entry=103,
> > > > argv=argv@entry=0x7ffcc7139708)
> > > > at ../sysdeps/nptl/libc_start_call_main.h:58
> > > > #11 0x00007fdd9dea8375 in __libc_start_main_impl (main=0x405a60,
> > > > argc=103, argv=0x7ffcc7139708, init=<optimized out>, fini=<optimized
> > > > out>, rtld_fini=<optimized out>,
> > > > stack_end=0x7ffcc71396f8) at ../csu/libc-start.c:381
> > > > #12 0x0000000000405bb1 in ?? ()
> > > >
> > > > Thanks,
> > > > Manuel
> > >
> > >
> > >
> > > --
> > > H.J.
More information about the Libc-alpha
mailing list