This is the mail archive of the glibc-bugs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug glob/22183] commit 5554304f0ddd ("posix: Allow glob to match dangling symlinks") cause "make" segfaults


https://sourceware.org/bugzilla/show_bug.cgi?id=22183

--- Comment #3 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  5f9f31ad129d97e6fc548954c9b97e27dd332600 (commit)
       via  ccf970c7a77e86f4f5ef8ecc5e637114b1c0136a (commit)
      from  b4396163aa8666f970aaf43eaca25f3a92b18c1b (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=5f9f31ad129d97e6fc548954c9b97e27dd332600

commit 5f9f31ad129d97e6fc548954c9b97e27dd332600
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Mon Sep 18 09:26:00 2017 -0300

    scratch_buffer: use union for internal buffer

    Problem reported by Florian Weimer [1] and solution suggested by
    Andreas Schwab [2].  It also set the same buffer size independent
    of architecture max_align_t size.

    Checked on x86_64-linux-gnu and i686-linux-gnu.

        * lib/malloc/scratch_buffer.h (struct scratch_buffer):
        Use an union instead of a max_align_t array for __space,
        so that __space is the same size on all platforms.
        * malloc/scratch_buffer_grow_preserve.c
        (__libc_scratch_buffer_grow_preserve): Likewise.

    [1] https://sourceware.org/ml/libc-alpha/2017-09/msg00693.html
    [2] https://sourceware.org/ml/libc-alpha/2017-09/msg00695.html

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=ccf970c7a77e86f4f5ef8ecc5e637114b1c0136a

commit ccf970c7a77e86f4f5ef8ecc5e637114b1c0136a
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Fri Sep 15 11:31:13 2017 -0300

    posix: Add compat glob symbol to not follow dangling symbols

    This patch follows commit 5554304f0 (posix: Allow glob to match dangling
    symlinks [BZ #866]) by adding a compat symbol that follow previous
    semantic of not following dangling symlinks and thus avoiding call
    gl_lstat with GLOB_ALTDIRFUNC.

    It avoids failure with old binaries that not set the alternate function
    pointer for lstat (GNUmake for instance).  The following scenario, for
    instance, fails with current GNUmake because glibc will access unitialized
    memory when calling gl_lstat:

      $ cat src/t/t.c
      int main ()
      {
        return 0;
      }
      $ cat Makefile
      SRC = $(wildcard src/*/t.c)
      OBJ = $(patsubst src/%.c, obj/%.o, $(SRC))

      prog:           $(OBJ)
                      $(CC) $(CFLAGS) $(LDFLAGS) $(LIBS) $(OBJ) -o prog

      obj/%.o:        src/%.c
                      $(CC) $(CFLAGS) -c $< -o $@
      $ make

    This works as expected with the patch applied.  Since it is for generic
    ABI, default compat symbols are added with override for Linux due LFS.
    Now we have two compat symbols for glob on Linux:

      1. sysdeps/unix/sysv/linux/oldglob.c which implements glob64 with
         the old dirent layout.  For this implementation I also set it to
         not follow dangling symlinks (which is the safest path).

      2. sysdeps/unix/sysv/linux/glob{64}-lstat-compat.c which implements
         the compat symbol for dangling symlinks.  As for generic glob,
         the implementation uses XSTAT_IS_XSTAT64 to define whether
         both __glob_lstat_compat and __glob64_lstat_compat should be
         different implementations.  For archictures that define
         XSTAT_IS_XSTAT64, __glob_lstat_compat is aliased to
         __glob64_lstat_compat.

      3. sysdeps/unix/sysv/linux/alpha/oldglob.c with a different glob_t
         layout.  As for 1. this patch changes it to not follow dangling
         symlinks.

    The patch also bumps _GNU_GLOB_INTERFACE_VERSION to 2 to advertise the
    new semantic.  On GNUmake, for instance, it will force to it use its
    internal glob implementation instead and avoiding triggering the same
    failure on builds against newer GLIBCs.

    Checked on x86_64-linux-gnu and i686-linux-gnu.  I also checked
    with a build against the major ABIs required to check for the abilist.

    The changes should also work on gnulib (I run gnulib-tool.py check glob
    and it shown no regressions).

        [BZ #22183]
        * include/gnu-versions.h (_GNU_GLOB_INTERFACE_VERSION): Increase
        version to 2.
        * posix/Makefile (routines): Add glob-lstat-compat and
        glob64-lstat-compat.
        * posix/Versions (GLIBC_2.27, glob, glob64): Add symbol version.
        * posix/glob-lstat-compat.c: New file.
        * posix/glob64-lstat-compat.c: Likewise.
        * posix/tst-glob_lstat_compat.c: Likewise.
        * sysdeps/unix/sysv/linux/glob-lstat-compat.c: Likewise.
        * sysdeps/unix/sysv/linux/alpha/glob-lstat-compat.c: Likewise.
        * sysdeps/unix/sysv/linux/glob64-lstat-compat.c: Likewise.
        * sysdeps/unix/sysv/linux/alpha/glob.c: Remove file.
        * posix/glob.c (glob_lstat): New function.
        (glob): Rename to __glob and add versioned symbol to 2.27.
        (glob_in_dir): Use glob_lstat.
        * posix/glob64.c (glob64): Add GLOB_ATTRIBUTE.
        * sysdeps/unix/sysv/linux/arm/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/glob.c (glob): Add versioned symbol for
        2.27.
        * sysdeps/unix/sysv/linux/glob64.c (glob64): Likewise.
        * sysdeps/unix/sysv/linux/oldglob.c (GLOB_NO_LSTAT): Define.
        * sysdeps/unix/sysv/linux/alpha/oldglob.c (__old_glob): Do not use
        gl_lstat on glob call.
        * sysdeps/unix/sysv/linux/aarch64/libc.abilist: Add GLIBC_2.27 glob
        and glob64 symbols.
        * sysdeps/unix/sysv/linux/alpha/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/hppa/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/i386/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/ia64/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/microblaze/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/nios2/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist:
        Likewise.
        * sysdeps/unix/linux/powerpc/powerpc32/nofpu/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/sh/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise.

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   64 +++++
 include/gnu-versions.h                             |    2 +-
 include/scratch_buffer.h                           |    6 +-
 malloc/scratch_buffer_grow_preserve.c              |    4 +-
 malloc/tst-scratch_buffer.c                        |    2 +-
 posix/Makefile                                     |    4 +-
 posix/Versions                                     |    3 +
 posix/glob-lstat-compat.c                          |   36 +++
 posix/glob.c                                       |   67 ++++--
 posix/glob64-lstat-compat.c                        |   36 +++
 posix/glob64.c                                     |    5 +
 posix/tst-glob_lstat_compat.c                      |  263 ++++++++++++++++++++
 sysdeps/unix/sysv/linux/aarch64/libc.abilist       |    3 +
 sysdeps/unix/sysv/linux/alpha/glob-lstat-compat.c  |    2 +
 sysdeps/unix/sysv/linux/alpha/glob.c               |   47 ----
 sysdeps/unix/sysv/linux/alpha/libc.abilist         |    3 +
 sysdeps/unix/sysv/linux/alpha/oldglob.c            |    6 +-
 sysdeps/unix/sysv/linux/arm/libc.abilist           |    3 +
 sysdeps/unix/sysv/linux/glob-lstat-compat.c        |   47 ++++
 sysdeps/unix/sysv/linux/glob.c                     |    5 +-
 sysdeps/unix/sysv/linux/glob64-lstat-compat.c      |   56 ++++
 sysdeps/unix/sysv/linux/glob64.c                   |    7 +-
 sysdeps/unix/sysv/linux/hppa/libc.abilist          |    3 +
 sysdeps/unix/sysv/linux/i386/libc.abilist          |    3 +
 sysdeps/unix/sysv/linux/ia64/libc.abilist          |    3 +
 sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist |    3 +
 sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist   |    3 +
 sysdeps/unix/sysv/linux/microblaze/libc.abilist    |    3 +
 .../unix/sysv/linux/mips/mips32/fpu/libc.abilist   |    3 +
 .../unix/sysv/linux/mips/mips32/nofpu/libc.abilist |    3 +
 .../unix/sysv/linux/mips/mips64/n32/libc.abilist   |    3 +
 .../unix/sysv/linux/mips/mips64/n64/libc.abilist   |    3 +
 sysdeps/unix/sysv/linux/nios2/libc.abilist         |    3 +
 sysdeps/unix/sysv/linux/oldglob.c                  |    5 +-
 .../sysv/linux/powerpc/powerpc32/fpu/libc.abilist  |    3 +
 .../linux/powerpc/powerpc32/nofpu/libc.abilist     |    3 +
 .../sysv/linux/powerpc/powerpc64/libc-le.abilist   |    3 +
 .../unix/sysv/linux/powerpc/powerpc64/libc.abilist |    3 +
 .../sysv/linux/s390/s390-32/glob64-lstat-compat.c  |    2 +
 sysdeps/unix/sysv/linux/s390/s390-32/glob64.c      |    2 -
 sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist  |    3 +
 sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist  |    3 +
 sysdeps/unix/sysv/linux/sh/libc.abilist            |    3 +
 sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist |    3 +
 sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist |    3 +
 .../sysv/linux/tile/tilegx/tilegx32/libc.abilist   |    3 +
 .../sysv/linux/tile/tilegx/tilegx64/libc.abilist   |    3 +
 sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist  |    3 +
 sysdeps/unix/sysv/linux/x86_64/64/libc.abilist     |    3 +
 sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist    |    3 +
 50 files changed, 666 insertions(+), 89 deletions(-)
 create mode 100644 posix/glob-lstat-compat.c
 create mode 100644 posix/glob64-lstat-compat.c
 create mode 100644 posix/tst-glob_lstat_compat.c
 create mode 100644 sysdeps/unix/sysv/linux/alpha/glob-lstat-compat.c
 delete mode 100644 sysdeps/unix/sysv/linux/alpha/glob.c
 create mode 100644 sysdeps/unix/sysv/linux/glob-lstat-compat.c
 create mode 100644 sysdeps/unix/sysv/linux/glob64-lstat-compat.c
 create mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/glob64-lstat-compat.c
 delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/glob64.c

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]