Portál AbcLinuxu, 8. května 2025 04:23
cap_set_proc( cap_from_text("cap_ipc_lock+ep") );a krachne to
cap_from_text("cap_ipc_lock+ep")Ako ukazuje demo programček:
#include <sys/capability.h> #include <stddef.h> #include <stdio.h> int main(int argc,char *argv[]) { cap_from_text("cap_ipc_lock+ep"); return 0; }
$ gcc -g cap.c -lcap $ gdb -q a.out Reading symbols from a.out... (gdb) b main Breakpoint 1 at 0x401121: file cap.c, line 8. (gdb) r Starting program: /tmp/bug/gpg/a.out Breakpoint 1, main (argc=1, argv=0x7fffffffe2d8) at cap.c:8 8 cap_from_text("cap_ipc_lock+ep"); (gdb) n Program received signal SIGSEGV, Segmentation fault.Môže to byť preto, že som pri kompilácii jadra 5.10.2 niečo podstatné nezaškrtol? Robil som "make old_config". Máte nejaký nápad, ako prísť na to, kde je problém?
Řešení dotazu:
... ==3750== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info ==3750== Command: ./a.out ==3750== ==3750== Invalid read of size 1 ==3750== at 0x48B4BF7: ??? (in /lib64/libcap.so.2.33) ==3750== by 0x48B4CF2: ??? (in /lib64/libcap.so.2.33) ==3750== by 0x48B4F37: cap_from_text (in /lib64/libcap.so.2.33) ==3750== by 0x40112A: main (cap.c:8) ==3750== Address 0x72747368732e0000 is not stack'd, malloc'd or (recently) free'd ==3750== ==3750== ==3750== Process terminating with default action of signal 11 (SIGSEGV) ==3750== General Protection Fault ==3750== at 0x48B4BF7: ??? (in /lib64/libcap.so.2.33) ==3750== by 0x48B4CF2: ??? (in /lib64/libcap.so.2.33) ==3750== by 0x48B4F37: cap_from_text (in /lib64/libcap.so.2.33) ==3750== by 0x40112A: main (cap.c:8)To nie je chybe v kóde. Jediná vec, ktorá sa hovorí o tom, či to zafunguje alebo nie, je" jadro. S jadrom 5.0 prejde s jadrom 5.10.2 spadne. V prvom kole som si myslel, že to jadro tú capability skrátka prestalo ponúkať. Alebo sa zmenil mechanizmus akým komunikuje knižnica libcap s jadrom. Ani jedno sa mi nezdá. A ani jedno neviem overiť
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.