Bug ID 1204317
Summary shm_open segfaults in statically built program
Classification openSUSE
Product openSUSE Distribution
Version Leap 15.4
Hardware Other
OS Other
Status NEW
Severity Normal
Priority P5 - None
Component Basesystem
Assignee screening-team-bugs@suse.de
Reporter mkoutny@suse.com
QA Contact qa-bugs@suse.de
Found By ---
Blocker ---

## Reproducer:

#include <assert.h>
#include <fcntl.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>

void dummy_handler(int signum) { }

int main(int argc, char *argv[]) {
        int fd;

        struct sigaction sa = {
                .sa_handler = dummy_handler,
        };
        sigaction(SIGINT, &sa, NULL);

        umask(0);
        fd = shm_open("/my.lock", O_CREAT | O_RDWR, S_IRWXU | S_IRWXO |
S_IRWXG);
        assert(fd >= 0);
        return 0;
}

Static build like:
> cc -pthread --std=gnu99 -g   -c -o minimal.o minimal.c
> cc minimal.o -static -pthread -lm -lrt -o minimal

Dynamic build like:
> cc -pthread --std=gnu99 -g   -c -o minimal.o minimal.c
> cc minimal.o -static -pthread -lm -lrt -o minimal

## Expected behavior

Statically built program exits with 0.

## Actual behavior

The statically built program segfaults, I can only get this stacktrace:
> (gdb) bt
> #0  0x0000000000000000 in ?? ()
> #1  0x0000000000401077 in __shm_directory (len=0x7fffffffe290) at ../sysdeps/unix/sysv/linux/shm-directory.c:124
> #2  0x0000000000400c32 in shm_open (name=0x4a81e4 "/my.lock", oflag=66, mode=511) at ../sysdeps/posix/shm_open.c:36
> #3  0x0000000000400bb8 in main (argc=1, argv=0x7fffffffe4c8) at minimal.c:21

It looks to me like a problem with the internal "once" call implementation.

## Environment

glibc-2.31-150300.41.1.x86_64
glibc-devel-2.31-150300.41.1.x86_64
glibc-devel-static-2.31-150300.41.1.x86_64
gcc-7-3.9.1.x86_64

(When I try the same on openSUSE TW with glibcs 2.36-6.1, it works as
expected.)

## Misc

A workaround [1] I didn't try.

[1] https://stackoverflow.com/a/47914897


You are receiving this mail because: