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 libc/21512] clone() ends up calling exit_group() through _exit() wrapper


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

--- Comment #1 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  3f823e87ccbf3723eb4eeb63b0619f1a0ceb174e (commit)
      from  f819dbea0a58270293c49b514b64848c6e84fda1 (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=3f823e87ccbf3723eb4eeb63b0619f1a0ceb174e

commit 3f823e87ccbf3723eb4eeb63b0619f1a0ceb174e
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Thu Jun 22 08:49:34 2017 -0300

    Call exit directly in clone (BZ #21512)

    On aarch64, alpha, arm, hppa, mips, nios2, powerpc, sh, sparc, tile,
    and x86_64 the clone syscall jumps to _exit after the child execution
    and the function ends the process execution by calling exit_group.
    This behavior have a small issue where threads created with
    CLONE_THREAD using clone syscall directly will eventually exit the
    whole group altogether instead of just the thread created.  Also,
    s390, microblaze, ia64, i386, and m68k differs by calling exit
    syscall directly.

    This patch changes all architectures to call the exit syscall
    directly, as for s390, microblaze, ia64, i386, and m68k.  This do not
    have change glibc internal behavior in any sort, since the only
    usage of clone implementation in posix_spawn calls _exit directly
    in the created child (fork uses a direct call to clone).

    Checked on x86_64-linux-gnu, i686-linux-gnu, aarch64-linux-gnu,
    powerpc-linux-gnu, powerpc64le-linux-gnu, sparc64-linux-gnu,
    and sparcv9-linux-gnu.

        [BZ #21512]
        * sysdeps/unix/sysv/linux/aarch64/clone.S (__clone): Call exit
        syscall instead of jump to _exit.
        (CLONE_VM_BIT): Remove unused define.
        (CLONE_VM): Likewise.
        (CLONE_THREAD_BIT): Likewise.
        (CLONE_THREAD): Likewise.
        * sysdeps/unix/sysv/linux/alpha/clone.S (__clone): Likewise.
        (CLONE_VM): Remove unused define.
        * sysdeps/unix/sysv/linux/arm/clone.S (__clone): Likewise.
        (CLONE_VM): Remove unused define.
        (CLONE_THREAD): Likewise.
        * sysdeps/unix/sysv/linux/i386/clone.S (CLONE_VM): Likewise.
        * sysdeps/unix/sysv/linux/ia64/clone2.S (__clone2): Call exit
        syscall instead of jump to _exit.
        * sysdeps/unix/sysv/linux/hppa/clone.S (__clone): Likewise.
        * sysdeps/unix/sysv/linux/mips/clone.S (__clone): Likewise.
        (CLONE_VM): Remove unused define.
        (CLONE_THREAD): Likewise.
        * sysdeps/unix/sysv/linux/nios2/clone.S (__clone): Likewise.
        (CLONE_VM): Remove unused define.
        * sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S (__clone):
        Likewise.
        (CLONE_VM): Remove unused define.
        (CLONE_THREAD): Likewise.
        * sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S (__clone):
        Likewise.
        (CLONE_VM): Remove unused define.
        (CLONE_THREAD): Likewise.
        * sysdeps/unix/sysv/linux/sh/clone.S  (__clone): Likewise.
        * sysdeps/unix/sysv/linux/sparc/sparc32/clone.S (__clone): Likewise.
        (CLONE_VM): Remove unused define.
        * sysdeps/unix/sysv/linux/sparc/sparc64/clone.S (__clone): Likewise.
        (CLONE_VM): Remove unused define.
        * sysdeps/unix/sysv/linux/tile/clone.S (__clone): Likewise.
        * sysdeps/unix/sysv/linux/x86_64/clone.S (__clone): Likewise.
        (CLONE_VM): Remove unused define.
        * sysdeps/unix/sysv/linux/Makefile (tests): Add tst-clone3.
        * sysdeps/unix/sysv/linux/tst-clone3.c: New file.

    Fix

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

Summary of changes:
 ChangeLog                                         |   42 +++++++++
 sysdeps/unix/sysv/linux/Makefile                  |    4 +-
 sysdeps/unix/sysv/linux/aarch64/clone.S           |    9 +--
 sysdeps/unix/sysv/linux/alpha/clone.S             |   11 +--
 sysdeps/unix/sysv/linux/arm/clone.S               |    6 +-
 sysdeps/unix/sysv/linux/hppa/clone.S              |    6 +-
 sysdeps/unix/sysv/linux/i386/clone.S              |    2 -
 sysdeps/unix/sysv/linux/ia64/clone2.S             |    8 +-
 sysdeps/unix/sysv/linux/m68k/clone.S              |    2 -
 sysdeps/unix/sysv/linux/mips/clone.S              |   12 +--
 sysdeps/unix/sysv/linux/nios2/clone.S             |   17 +---
 sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S |    7 +--
 sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S |   11 +--
 sysdeps/unix/sysv/linux/sh/clone.S                |   21 +----
 sysdeps/unix/sysv/linux/sparc/sparc32/clone.S     |    5 +-
 sysdeps/unix/sysv/linux/sparc/sparc64/clone.S     |    5 +-
 sysdeps/unix/sysv/linux/tile/clone.S              |    6 +-
 sysdeps/unix/sysv/linux/tst-clone3.c              |   96 +++++++++++++++++++++
 sysdeps/unix/sysv/linux/x86_64/clone.S            |    5 +-
 19 files changed, 171 insertions(+), 104 deletions(-)
 create mode 100644 sysdeps/unix/sysv/linux/tst-clone3.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]