-
-
Notifications
You must be signed in to change notification settings - Fork 8.6k
Closed
Labels
Description
Description
We found a use-after-free case when a closed btree object is used again after closing. The stack trace seems to suggest that the btree instance was freed on the first close(), and the following operation referenced the freed memory.
One (maybe unrelated) common detail in all PoCs is that all btree instances used either a Byte or String IO. We've attached five PoCs with their stack trace, all having different crash locations at the end.
Proof of Concept
$ # build unix port with ASAN, at the root source code directory.
$ export CC=clang
$ export CXX=clang++
$ export CFLAGS="-fsanitize=address -fno-omit-frame-pointer"
$ export CXXFLAGS=$CFLAGS
$ export LDFLAGS=$CFLAGS
$ export DEBUG=1
$ make -C mpy-cross -j
$ make -C ports/unix -j all lib
$
$ # run a poc.
$ export ASAN_OPTIONS="detect_leaks=0"
$ ./ports/unix/build-standard/micropython <poc_file>
Environment
Ubuntu 20.04
Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz
Memory: 64 GB
Affected Version
v1.20.0 (commit a3862e7, latest as of 2023-09-26)
v1.20.0 (commit 813d559, 2023-06-19)
Discovered in the UNIX port version.