Portál AbcLinuxu, 8. května 2025 04:23

Dotaz: cap_from_text() => segfault po upgrade jadra

4.1.2021 13:13 rastos | skóre: 63 | blog: rastos
cap_from_text() => segfault po upgrade jadra
Přečteno: 484×
Odpovědět | Admin
Pred pár dňami som sa rozhodol upgradnúť jadro z 5.0 na 5.10.2 (čo bolo v tom čase posledné stable). Po reboote mi prestalo chodiť kwallet lebo prestalo chodiť gpg2 (no pinentry), lebo pinentry urobí segfault, lebo použije z knižnice libcap funkciu cap_from_text() a tá spadne :-(

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:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

4.1.2021 13:35 Bugsa
Rozbalit Rozbalit vše Re: cap_from_text() => segfault po upgrade jadra
Odpovědět | | Sbalit | Link | Blokovat | Admin
A co řekne valgrind?
4.1.2021 13:57 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: cap_from_text() => segfault po upgrade jadra
...
==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ť :-(
Řešení 1× (rastos (tazatel))
30.1.2021 12:51 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: cap_from_text() => segfault po upgrade jadra
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak s ukázalo, že chyba bola v tom, že som tiež neupgradol libcap. Po prechode na aktuálnu libcap-2.47 už všetko šlape.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.