Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date: Wed, 20 May 2020 15:31:46 +0300
From: Konstantin Khlebnikov <khlebnikov@...dex-team.ru>
To: musl@...ts.openwall.com
Subject: pthread shouldn't ignore errors from syscall futex()

Userspace implementations of mutexes (including glibc) in some cases
retries operation without checking error code from syscall futex.

Example which loops inside second call rather than hung (or die) peacefully:

#include <stdlib.h>
#include <pthread.h>

int main(int argc, char **argv)
{
	char buf[sizeof(pthread_mutex_t) + 1];
	pthread_mutex_t *mutex = (pthread_mutex_t *)(buf + 1);

	pthread_mutex_init(mutex, NULL);
	pthread_mutex_lock(mutex);
	pthread_mutex_lock(mutex);
}

Thread in lkml:
https://lore.kernel.org/lkml/158955700764.647498.18025770126733698386.stgit@buzz/T/

Related bug in glibc:
https://sourceware.org/bugzilla/show_bug.cgi?id=25997

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.