From 315c9e794a5fb8f9672081dbd7493b5fd036ab05 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Mon, 14 Feb 2022 00:15:13 +0100 Subject: [PATCH] htl: Make pthread_[gs]etspecific not check for key validity Since __pthread_key_create might be concurrently reallocating the __pthread_key_destructors array, it's not safe to access it without the mutex held. Posix explicitly says we are allowed to prefer performance over error detection. --- sysdeps/htl/pt-getspecific.c | 3 +-- sysdeps/htl/pt-setspecific.c | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/sysdeps/htl/pt-getspecific.c b/sysdeps/htl/pt-getspecific.c index af1161206a..a9dfd8a775 100644 --- a/sysdeps/htl/pt-getspecific.c +++ b/sysdeps/htl/pt-getspecific.c @@ -25,8 +25,7 @@ __pthread_getspecific (pthread_key_t key) { struct __pthread *self; - if (key < 0 || key >= __pthread_key_count - || __pthread_key_destructors[key] == PTHREAD_KEY_INVALID) + if (key < 0 || key >= __pthread_key_count) return NULL; self = _pthread_self (); diff --git a/sysdeps/htl/pt-setspecific.c b/sysdeps/htl/pt-setspecific.c index 982d25d012..d201416d5d 100644 --- a/sysdeps/htl/pt-setspecific.c +++ b/sysdeps/htl/pt-setspecific.c @@ -25,8 +25,7 @@ __pthread_setspecific (pthread_key_t key, const void *value) { struct __pthread *self = _pthread_self (); - if (key < 0 || key >= __pthread_key_count - || __pthread_key_destructors[key] == PTHREAD_KEY_INVALID) + if (key < 0 || key >= __pthread_key_count) return EINVAL; if (key >= self->thread_specifics_size) -- 2.43.5