Hi,
When using address sanitizer with gcc on Xavier AGX (JP4.3/4.5.1/4.6), Asan reports a alloc-dealloc mismatch probably in libv4l2 when using video encoding.
OS :
Reproduced on Jetpack 4.3, 4.5.1 and 4.6
How to reproduce :
- Use 01_vide_encode sample provided in /usr/src/jetson_multimedia_api/samples/
- Add sanitizer address in makefile. Add the following line in makefile :
CXXFLAGS = -g -O0 -fsanitize=address
+ add the CXXFlags in the linking command - Build the sample with make
- execute the sample with ASAN_OPTIONS=protect_shadow_gap=0 (might not be necessary if no CUDA is involved)
Ex :$ ASAN_OPTIONS=protect_shadow_gap=0 ./video_encode ../../data/Video/sample.yuv 1920 1080 H264 result.h264
Output of sanitizer :
root@xavier-dev-45623:/usr/src/jetson_multimedia_api/samples/01_video_encode# ASAN_OPTIONS=protect_shadow_gap=0 ./video_encode ../../data/Video/sample.yuv 1920 1080 H264 result.h264
Creating Encoder in blocking mode
Opening in BLOCKING MODE
=================================================================
==20179==ERROR: AddressSanitizer: alloc-dealloc-mismatch (malloc vs operator delete) on 0x007fa2302750
#0 0x7fa6ad1987 in operator delete(void*, unsigned long) (/usr/lib/aarch64-linux-gnu/libasan.so.4+0xd3987)
#1 0x7fa63ba437 in __cxa_finalize (/lib/aarch64-linux-gnu/libc.so.6+0x35437)
0x007fa2302750 is located 0 bytes inside of 40-byte region [0x007fa2302750,0x007fa2302778)
allocated by thread T0 (EncOutPlane) here:
#0 0x7fa6acdb1b in malloc (/usr/lib/aarch64-linux-gnu/libasan.so.4+0xcfb1b)
#1 0x7fa1a2a833 in fnet::String::String(char const*) (/usr/lib/aarch64-linux-gnu/tegra/libnvfnet.so+0x7833)
#2 0x7fa78c1b37 (/lib/ld-linux-aarch64.so.1+0xdb37)
#3 0x7fa78c5cd7 (/lib/ld-linux-aarch64.so.1+0x11cd7)
#4 0x7fa6490693 in _dl_catch_exception (/lib/aarch64-linux-gnu/libc.so.6+0x10b693)
#5 0x7fa78c5417 (/lib/ld-linux-aarch64.so.1+0x11417)
#6 0x7fa6371013 (/lib/aarch64-linux-gnu/libdl.so.2+0x1013)
#7 0x7fa6490693 in _dl_catch_exception (/lib/aarch64-linux-gnu/libc.so.6+0x10b693)
#8 0x7fa6490737 in _dl_catch_error (/lib/aarch64-linux-gnu/libc.so.6+0x10b737)
#9 0x7fa637277f (/lib/aarch64-linux-gnu/libdl.so.2+0x277f)
#10 0x7fa63710e7 in dlopen (/lib/aarch64-linux-gnu/libdl.so.2+0x10e7)
#11 0x7fa6a4ae83 (/usr/lib/aarch64-linux-gnu/libasan.so.4+0x4ce83)
#12 0x7fa68c4a67 (/usr/lib/aarch64-linux-gnu/libv4l2.so.0+0x7a67)
#13 0x557a224db7 in NvVideoEncoder::NvVideoEncoder(char const*, int) (/usr/src/jetson_multimedia_api/samples/01_video_encode/video_encode+0x2fdb7)
#14 0x557a224e03 in NvVideoEncoder::createVideoEncoder(char const*, int) (/usr/src/jetson_multimedia_api/samples/01_video_encode/video_encode+0x2fe03)
#15 0x557a202c4b in encode_proc(context_t&, int, char**) (/usr/src/jetson_multimedia_api/samples/01_video_encode/video_encode+0xdc4b)
#16 0x557a2054bb in main (/usr/src/jetson_multimedia_api/samples/01_video_encode/video_encode+0x104bb)
#17 0x7fa63a571f in __libc_start_main (/lib/aarch64-linux-gnu/libc.so.6+0x2071f)
#18 0x557a1fb3b3 (/usr/src/jetson_multimedia_api/samples/01_video_encode/video_encode+0x63b3)
SUMMARY: AddressSanitizer: alloc-dealloc-mismatch (/usr/lib/aarch64-linux-gnu/libasan.so.4+0xd3987) in operator delete(void*, unsigned long)
==20179==HINT: if you don't care about these errors you may set ASAN_OPTIONS=alloc_dealloc_mismatch=0
==20179==ABORTING
Notes that can help:
- if alloc_dealloc_mismatch is set to 0 , program runs but direct and indirect leaks are shown at the end in NvVideoEncoder::createVideoEncoder()
Not seen when using decoding. Only encoding.
Edit : Also available for decoding
root@xavier-dev-45623:/usr/src/jetson_multimedia_api/samples/00_video_decode# ./video_decode H264 ../../data/Video/sample_outdoor_car_1080p_10fps.h264
Set governor to performance before enabling profiler
Creating decoder in blocking mode
Opening in BLOCKING MODE
=================================================================
==10912==ERROR: AddressSanitizer: alloc-dealloc-mismatch (malloc vs operator delete) on 0x007fa1702750
#0 0x7fa5e50987 in operator delete(void*, unsigned long) (/usr/lib/aarch64-linux-gnu/libasan.so.4+0xd3987)
#1 0x7fa5739437 in __cxa_finalize (/lib/aarch64-linux-gnu/libc.so.6+0x35437)
0x007fa1702750 is located 0 bytes inside of 40-byte region [0x007fa1702750,0x007fa1702778)
allocated by thread T0 (DecOutPlane) here:
#0 0x7fa5e4cb1b in malloc (/usr/lib/aarch64-linux-gnu/libasan.so.4+0xcfb1b)
#1 0x7fa0c6e833 in fnet::String::String(char const*) (/usr/lib/aarch64-linux-gnu/tegra/libnvfnet.so+0x7833)
#2 0x7fa6c40b37 (/lib/ld-linux-aarch64.so.1+0xdb37)
#3 0x7fa6c44cd7 (/lib/ld-linux-aarch64.so.1+0x11cd7)
#4 0x7fa580f693 in _dl_catch_exception (/lib/aarch64-linux-gnu/libc.so.6+0x10b693)
#5 0x7fa6c44417 (/lib/ld-linux-aarch64.so.1+0x11417)
#6 0x7fa56f0013 (/lib/aarch64-linux-gnu/libdl.so.2+0x1013)
#7 0x7fa580f693 in _dl_catch_exception (/lib/aarch64-linux-gnu/libc.so.6+0x10b693)
#8 0x7fa580f737 in _dl_catch_error (/lib/aarch64-linux-gnu/libc.so.6+0x10b737)
#9 0x7fa56f177f (/lib/aarch64-linux-gnu/libdl.so.2+0x277f)
#10 0x7fa56f00e7 in dlopen (/lib/aarch64-linux-gnu/libdl.so.2+0x10e7)
#11 0x7fa5dc9e83 (/usr/lib/aarch64-linux-gnu/libasan.so.4+0x4ce83)
#12 0x7fa5c43a67 (/usr/lib/aarch64-linux-gnu/libv4l2.so.0+0x7a67)
#13 0x556cb6092f in NvVideoDecoder::NvVideoDecoder(char const*, int) (/usr/src/jetson_multimedia_api/samples/00_video_decode/video_decode+0xf92f)
#14 0x556cb6097b in NvVideoDecoder::createVideoDecoder(char const*, int) (/usr/src/jetson_multimedia_api/samples/00_video_decode/video_decode+0xf97b)
#15 0x556cb5c2df in decode_proc(context_t&, int, char**) (/usr/src/jetson_multimedia_api/samples/00_video_decode/video_decode+0xb2df)
#16 0x556cb5d65b in main (/usr/src/jetson_multimedia_api/samples/00_video_decode/video_decode+0xc65b)
#17 0x7fa572471f in __libc_start_main (/lib/aarch64-linux-gnu/libc.so.6+0x2071f)
#18 0x556cb57013 (/usr/src/jetson_multimedia_api/samples/00_video_decode/video_decode+0x6013)
SUMMARY: AddressSanitizer: alloc-dealloc-mismatch (/usr/lib/aarch64-linux-gnu/libasan.so.4+0xd3987) in operator delete(void*, unsigned long)
==10912==HINT: if you don't care about these errors you may set ASAN_OPTIONS=alloc_dealloc_mismatch=0
==10912==ABORTING
Thanks.
OB.