mavoga
(Mau)
6 Giugno 2023, 5:22pm
44
… e adesso, con la libreria /usr/local/lib/libcie-pkcs11.so
installata, non vi stupite se alcune applicazioni (es. LibreOffice Calc, Okular) crashano quando le chiudete…
aperti 10:17AM - 19 May 23 UTC
bug
La libreria PKI del CIE Middleware non termina correttamente a causa di un segna… le abort in fase di chiusura.
Occorre impedire che si verifichi una situazione del genere, evitando di deallocare due volte la classe CLog.
Da indagare se possano esserci anomalie simili a cascata, poiché potrebbe non essere l'unica afflitta da questo problema.
![image](https://github.com/italia/cie-middleware-linux/assets/118728287/2cbb8905-b421-490f-9466-40303bd939f1)
![image](https://github.com/italia/cie-middleware-linux/assets/118728287/00919012-cfe6-425b-812c-fa43a10be292)
aperti 06:23PM - 15 Mar 22 UTC
bug
Eseguendo il test, anche dando 20 come primo input, il programma esce abortendo … a causa di un `double free`. Si tratta di `CLog::~CLog()` come si vede lanciando il test sotto gdb:
```gdb
Insert the test number:
20
---------------------------------------------------------
Bye Bye
*************************
*************************
---------------------------------------------------------
free(): double free detected in tcache 2
Program received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
Download failed: Invalid argument. Continuing without source file ./signal/../sysdeps/unix/sysv/linux/raise.c.
50 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1 0x00007ffff7bd7537 in __GI_abort () at abort.c:79
#2 0x00007ffff7c30768 in __libc_message (action=action@entry=do_abort, fmt=fmt@entry=0x7ffff7d3ee2d "%s\n") at ../sysdeps/posix/libc_fatal.c:155
#3 0x00007ffff7c37a5a in malloc_printerr (str=str@entry=0x7ffff7d41170 "free(): double free detected in tcache 2") at malloc.c:5347
#4 0x00007ffff7c39055 in _int_free (av=0x7ffff7d70b80 <main_arena>, p=0x55555557bc70, have_lock=0) at malloc.c:4201
#5 0x00007ffff79e479f in CLog::~CLog (this=0x7ffff7a66020 <Log>, __in_chrg=<optimized out>) at ../cie-pkcs11/Util/log.cpp:120
#6 0x00007ffff7bf04d7 in __run_exit_handlers (status=0, listp=0x7ffff7d70718 <__exit_funcs>, run_list_atexit=run_list_atexit@entry=true,
run_dtors=run_dtors@entry=true) at exit.c:108
#7 0x00007ffff7bf067a in __GI_exit (status=<optimized out>) at exit.c:139
#8 0x00007ffff7bd8d11 in __libc_start_main (main=0x555555558c10 <main(int, char**)>, argc=2, argv=0x7fffffffe078, init=<optimized out>,
fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe068) at ../csu/libc-start.c:342
#9 0x000055555555632a in _start ()
```
In effetti, la definizione `CLog Log;` è stata spostata in `defines.h`. Non mi è chiaro se gcc tenta di considerarlo un unico oggetto.
Forse dovrebbe essere dichiarato `static` cosicché ognuno abbia la sua copia di Log, oppure costruirlo come singleton in modo da condividere un'unica copia.
Peraltro, c'è un altro `log.cpp` in `cie_sign_sdk/src/Util`, leggermente diverso. C'è una ragione per tenerne due copie?
Già che ci sono, posso chiedere se questo repository viene usato anche per WIN32?
In alcune applicazioni si verificano dei crash nella libreria libcie-pkcs11.so; in particolare ho problemi con LibreOffice, che da diverso tempo crasha ogni volta alla chiusura:
#4 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44
#5 0x00007f6c854a9d2f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78
#6 0x00007f6c8545aef2 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix…