Package: libc6
Version: 2.24-11+deb9-u3

Using sem_timedwait on i686 gives random results. In out proprietary
software semaphore used by two processes and located in shared memory
mapped with mmap. All works under amd64 architecture and under another some
distibutions. But under Debian Stretch amd64 sem_timedwait always blocks
for timeout and returns ETIMEOUT error. Meanwhile it acquires the lock
decreasing semaphore value.

I've tried to make test for this bug. Test reproduces bug only with ASAN
enabled. Without ASAN enabled it always passes. I've attached test but
without ASAN support to show that I don't miss anything. I can modify test
to enable ASAN support but if somebody ask.

I've discovered that symbols used by i686 are different from those from
amd64. On amd64 symbols are:
~$ nm "${PROJ_PATH}/Docker/debian/9/amd64/test-bugs/test-bugs"  | grep sem_
                 U sem_destroy@@GLIBC_2.2.5
                 U sem_getvalue@@GLIBC_2.2.5
                 U sem_init@@GLIBC_2.2.5
                 U sem_post@@GLIBC_2.2.5
                 U sem_timedwait@@GLIBC_2.2.5
00000000004019b0 t test_process_sem_timedwait
00000000004011c0 t test_process_sem_timedwait_nolock

But under i686 symbols are different:
~$ nm "${PROJ_PATH}/Docker/debian/9/i386/test-bugs/test-bugs"  | grep sem_
         U sem_destroy@@GLIBC_2.1
         U sem_getvalue@@GLIBC_2.1
         U sem_init@@GLIBC_2.1
         U sem_post@@GLIBC_2.1
         U sem_timedwait@@GLIBC_2.2
08049f50 t test_process_sem_timedwait
08048ee0 t test_process_sem_timedwait_nolock

As you can see symbols are different for i686. Version of sem_init,
sem_wait, sem_post, sem_destroy and sem_getvalue is GLIBC_2.1, but version
of sem_timedwait is GLIBC_2.2.

Replacing sem_timedwait with sem_wait makes all work on i686 architecture.
So sem_wait is ok, but sem_timedwait is not.

Problem reproduced under Docker Debian Stretch i386 image and with hardware
installation made with debootstrap.

-- 
Андрей Николаевич, инженер-программист.

Attachment: test-bugs.tar.gz
Description: application/gzip

Reply via email to