From 49b6dc8f07ec6baafa0881d8cb14029a66a04621 Mon Sep 17 00:00:00 2001 From: Yusuke Endoh Date: Tue, 7 Nov 2023 04:11:35 +0900 Subject: [PATCH] Prevent cpu_set_t overflow even if there are more than 63 cores Do not use `pthread_attr_setaffinity_np` if `sched_getcpu()` exceeds `CPU_SETSIZE`. (Using `CPU_ALLOC()` would be more appropriate.) --- ext/socket/raddrinfo.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/ext/socket/raddrinfo.c b/ext/socket/raddrinfo.c index d959906a95..18585c2181 100644 --- a/ext/socket/raddrinfo.c +++ b/ext/socket/raddrinfo.c @@ -483,8 +483,11 @@ start: #if defined(HAVE_PTHREAD_ATTR_SETAFFINITY_NP) && defined(HAVE_SCHED_GETCPU) cpu_set_t tmp_cpu_set; CPU_ZERO(&tmp_cpu_set); - CPU_SET(sched_getcpu(), &tmp_cpu_set); - pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &tmp_cpu_set); + int cpu = sched_getcpu(); + if (cpu < CPU_SETSIZE) { + CPU_SET(cpu, &tmp_cpu_set); + pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &tmp_cpu_set); + } #endif pthread_t th; @@ -707,8 +710,11 @@ start: #if defined(HAVE_PTHREAD_ATTR_SETAFFINITY_NP) && defined(HAVE_SCHED_GETCPU) cpu_set_t tmp_cpu_set; CPU_ZERO(&tmp_cpu_set); - CPU_SET(sched_getcpu(), &tmp_cpu_set); - pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &tmp_cpu_set); + int cpu = sched_getcpu(); + if (cpu < CPU_SETSIZE) { + CPU_SET(cpu, &tmp_cpu_set); + pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &tmp_cpu_set); + } #endif pthread_t th;