Сбой программы 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?

Любая помощь в этом приветствуется.

0 ответов

Другие вопросы по тегам