Segfault in libopenblas0-pthread

difa.csi difa.csi at unibo.it
Wed Oct 13 06:56:08 BST 2021


Hello.

Following quite a bit of debugging, I think I've found a wrong check in 
memory.c file, at line 2789 (0.3.13+ds-3):
https://sources.debian.org/src/openblas/0.3.13+ds-3/driver/others/memory.c/

IIUC, it should check *func != NULL instead of func != NULL . func 
should be "guaranteed" to not be NULL since memoryalloc is defined at 
line 2641.

Else, when it reaches the last element of memoryalloc[], func is not 
NULL but *func is, and it's what gets dereferenced.

I noticed it because both octave and python-numpy started segfaulting 
after a distro upgrade.
In both cases the stack trace contained something like:
#0  0x0000000000000000 in ?? ()
#1  0x00007f9c614de7d9 in ?? () from 
/usr/lib/x86_64-linux-gnu/libopenblas.so.0

and valgrind trace:
==746909== Jump to the invalid address stated on the next line
==746909==    at 0x0: ???
==746909==    by 0xBDFD708: blas_memory_alloc (memory.c:2793)
==746909==    by 0xBDFDF03: blas_thread_server (blas_server.c:366)
==746909==    by 0x8D33EA6: start_thread (pthread_create.c:477)
==746909==    by 0x725EDEE: clone (clone.S:95)
==746909==  Address 0x0 is not stack'd, malloc'd or (recently) free'd

Strangely, the segfaults disappeared installing libopenblas0-serial.

Hope it helps.

-- 
Diego Zuccato
DIFA - Dip. di Fisica e Astronomia
Servizi Informatici
Alma Mater Studiorum - Università di Bologna
V.le Berti-Pichat 6/2 - 40127 Bologna - Italy
tel.: +39 051 20 95786



More information about the debian-science-maintainers mailing list