Portál AbcLinuxu, 9. listopadu 2025 11:43
To volanie v pinentry je konkrétne
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.