Сбой программы C++ при setegid()/seteuid() в glibc v3.34 на Ubuntu 22.04
У меня есть программа на C++, которая работает на нескольких платформах (например, RHEL7,8 и 9 также на Ubuntu 18.04, 20.04 и 22.04). В основном код имеет многопоточную реализацию для обработки нескольких пользовательских командных запросов. моя программа использует setegid()/seteuid(), где происходит сбой в версиях glibc v2.34 и выше, то есть в Ubuntu 22.04 и RHEL9. На остальных платформах работает нормально.
Программа кросс-компилируется на хост-компьютере RHEL8 с glibc v2.28 для целевых платформ. Проблема связана с RHEL9 и Ubuntu 22.04, которые имеют библиотеки glibc2.34 или более поздней версии. Я вижу, что это единственная разница между средами сборки и выполнения.
ниже информация о Coredump:
(gdb) info thread
Id Target Id Frame
* 1 Thread 0x7f35a178e640 (LWP 192143) 0x00007f35a50c52e8 in __futex_abstimed_wait_common () from /lib64/libc.so.6
2 Thread 0x7f35a391c640 (LWP 192091) 0x00007f35a50c52ea in __futex_abstimed_wait_common () from /lib64/libc.so.6
3 Thread 0x7f35a199e640 (LWP 192128) 0x00007f35a50c52ea in __futex_abstimed_wait_common () from /lib64/libc.so.6
4 Thread 0x7f35a193b640 (LWP 192131) 0x00007f35a50c52ea in __futex_abstimed_wait_common () from /lib64/libc.so.6
5 Thread 0x7f35a1833640 (LWP 192139) 0x00007f35a50c52ea in __futex_abstimed_wait_common () from /lib64/libc.so.6
6 Thread 0x7f35a18d8640 (LWP 192134) 0x00007f35a50c52ea in __futex_abstimed_wait_common () from /lib64/libc.so.6
7 Thread 0x7f35a197d640 (LWP 192129) 0x00007f35a50c52ea in __futex_abstimed_wait_common () from /lib64/libc.so.6
8 Thread 0x7f35a1875640 (LWP 192137) 0x00007f35a50c52ea in __futex_abstimed_wait_common () from /lib64/libc.so.6
9 Thread 0x7f35a195c640 (LWP 192130) 0x00007f35a50c52ea in __futex_abstimed_wait_common () from /lib64/libc.so.6
10 Thread 0x7f35a17f1640 (LWP 192141) 0x00007f35a50c52ea in __futex_abstimed_wait_common () from /lib64/libc.so.6
11 Thread 0x7f35a1eb7640 (LWP 192094) 0x00007f35a516bedf in poll () from /lib64/libc.so.6
12 Thread 0x7f35a191a640 (LWP 192132) 0x00007f35a50c52ea in __futex_abstimed_wait_common () from /lib64/libc.so.6
13 Thread 0x7f35a391fb80 (LWP 192086) 0x00007f35a516e63d in select () from /lib64/libc.so.6
14 Thread 0x7f35a1a01640 (LWP 192099) 0x00007f35a50c52ea in __futex_abstimed_wait_common () from /lib64/libc.so.6
15 Thread 0x7f35a1896640 (LWP 192136) 0x00007f35a50c52ea in __futex_abstimed_wait_common () from /lib64/libc.so.6
16 Thread 0x7f35a176d640 (LWP 192145) 0x00007f35a51680bc in read () from /lib64/libc.so.6
17 Thread 0x7f35a1854640 (LWP 192138) 0x00007f35a50c52ea in __futex_abstimed_wait_common () from /lib64/libc.so.6
**18 Thread 0x7f35a19bf640 (LWP 192127) 0x00007f35a50c5d77 in __nptl_setxid () from /lib64/libc.so.6**
19 Thread 0x7f35a18b7640 (LWP 192135) 0x00007f35a50c52ea in __futex_abstimed_wait_common () from /lib64/libc.so.6
20 Thread 0x7f35a18f9640 (LWP 192133) 0x00007f35a50c52ea in __futex_abstimed_wait_common () from /lib64/libc.so.6
21 Thread 0x7f35a17d0640 (LWP 192142) 0x00007f35a516bedf in poll () from /lib64/libc.so.6
22 Thread 0x7f35a17af640 (LWP 192144) 0x00007f35a50c52ea in __futex_abstimed_wait_common () from /lib64/libc.so.6
23 Thread 0x7f35a1a43640 (LWP 192096) 0x00007f35a516bedf in poll () from /lib64/libc.so.6
24 Thread 0x7f35a1812640 (LWP 192140) 0x00007f35a513d4d5 in clock_nanosleep@GLIBC_2.2.5 () from /lib64/libc.so.6
25 Thread 0x7f35a19e0640 (LWP 192101) 0x00007f35a50c52ea in __futex_abstimed_wait_common () from /lib64/libc.so.6
26 Thread 0x7f35a1a22640 (LWP 192098) 0x00007f35a50c52ea in __futex_abstimed_wait_common () from /lib64/libc.so.6
Поток 18 находится в __nptl_setxid(), и программа дает сбой. Похоже, виновата нить 18.
18 Thread 0x7f35a19bf640 (LWP 192127) 0x00007f35a50c5d77 in __nptl_setxid () from /lib64/libc.so.6
Не уверен, почему setegid() не работает на RHEL9 и Ubuntu 22.04 (т.е.>glibc 2.34).
Я что-то упустил в компиляции, чтобы сделать его совместимым с новыми версиями glibc?
Любая помощь в этом приветствуется.