• Wen Hui's avatar
    Sanitizer reported memory leak for '--invalid' option or port number is missed... · 813924b4
    Wen Hui authored
    
    Sanitizer reported memory leak for '--invalid' option or port number is missed cases to redis-server. (#12322)
    
    Observed that the sanitizer reported memory leak as clean up is not done
    before the process termination in negative/following cases:
    
    **- when we passed '--invalid' as option to redis-server.**
    
    ```
     -vm:~/mem-leak-issue/redis$ ./src/redis-server --invalid
    
    *** FATAL CONFIG FILE ERROR (Redis 255.255.255) ***
    Reading the configuration file, at line 2
    >>> 'invalid'
    Bad directive or wrong number of arguments
    
    =================================================================
    ==865778==ERROR: LeakSanitizer: detected memory leaks
    
    Direct leak of 8 byte(s) in 1 object(s) allocated from:
        #0 0x7f0985f65867 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:145
        #1 0x558ec86686ec in ztrymalloc_usable_internal /home/ubuntu/mem-leak-issue/redis/src/zmalloc.c:117
        #2 0x558ec86686ec in ztrymalloc_usable /home/ubuntu/mem-leak-issue/redis/src/zmalloc.c:135
        #3 0x558ec86686ec in ztryrealloc_usable_internal /home/ubuntu/mem-leak-issue/redis/src/zmalloc.c:276
        #4 0x558ec86686ec in zrealloc /home/ubuntu/mem-leak-issue/redis/src/zmalloc.c:327
        #5 0x558ec865dd7e in sdssplitargs /home/ubuntu/mem-leak-issue/redis/src/sds.c:1172
        #6 0x558ec87a1be7 in loadServerConfigFromString /home/ubuntu/mem-leak-issue/redis/src/config.c:472
        #7 0x558ec87a13b3 in loadServerConfig /home/ubuntu/mem-leak-issue/redis/src/config.c:718
        #8 0x558ec85e6f15 in main /home/ubuntu/mem-leak-issue/redis/src/server.c:7258
        #9 0x7f09856e5d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    
    SUMMARY: AddressSanitizer: 8 byte(s) leaked in 1 allocation(s).
    
    ```
    
    **- when we pass '--port' as option and missed to add port number to redis-server.**
    
    ```
    vm:~/mem-leak-issue/redis$ ./src/redis-server --port
    
    *** FATAL CONFIG FILE ERROR (Redis 255.255.255) ***
    Reading the configuration file, at line 2
    >>> 'port'
    wrong number of arguments
    
    =================================================================
    ==865846==ERROR: LeakSanitizer: detected memory leaks
    
    Direct leak of 8 byte(s) in 1 object(s) allocated from:
        #0 0x7fdcdbb1f867 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:145
        #1 0x557e8b04f6ec in ztrymalloc_usable_internal /home/ubuntu/mem-leak-issue/redis/src/zmalloc.c:117
        #2 0x557e8b04f6ec in ztrymalloc_usable /home/ubuntu/mem-leak-issue/redis/src/zmalloc.c:135
        #3 0x557e8b04f6ec in ztryrealloc_usable_internal /home/ubuntu/mem-leak-issue/redis/src/zmalloc.c:276
        #4 0x557e8b04f6ec in zrealloc /home/ubuntu/mem-leak-issue/redis/src/zmalloc.c:327
        #5 0x557e8b044d7e in sdssplitargs /home/ubuntu/mem-leak-issue/redis/src/sds.c:1172
        #6 0x557e8b188be7 in loadServerConfigFromString /home/ubuntu/mem-leak-issue/redis/src/config.c:472
        #7 0x557e8b1883b3 in loadServerConfig /home/ubuntu/mem-leak-issue/redis/src/config.c:718
        #8 0x557e8afcdf15 in main /home/ubuntu/mem-leak-issue/redis/src/server.c:7258
        #9 0x7fdcdb29fd8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    
    Indirect leak of 10 byte(s) in 1 object(s) allocated from:
        #0 0x7fdcdbb1fc18 in __interceptor_realloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:164
        #1 0x557e8b04f9aa in ztryrealloc_usable_internal /home/ubuntu/mem-leak-issue/redis/src/zmalloc.c:287
        #2 0x557e8b04f9aa in ztryrealloc_usable /home/ubuntu/mem-leak-issue/redis/src/zmalloc.c:317
        #3 0x557e8b04f9aa in zrealloc_usable /home/ubuntu/mem-leak-issue/redis/src/zmalloc.c:342
        #4 0x557e8b033f90 in _sdsMakeRoomFor /home/ubuntu/mem-leak-issue/redis/src/sds.c:271
        #5 0x557e8b033f90 in sdsMakeRoomFor /home/ubuntu/mem-leak-issue/redis/src/sds.c:295
        #6 0x557e8b033f90 in sdscatlen /home/ubuntu/mem-leak-issue/redis/src/sds.c:486
        #7 0x557e8b044e1f in sdssplitargs /home/ubuntu/mem-leak-issue/redis/src/sds.c:1165
        #8 0x557e8b188be7 in loadServerConfigFromString /home/ubuntu/mem-leak-issue/redis/src/config.c:472
        #9 0x557e8b1883b3 in loadServerConfig /home/ubuntu/mem-leak-issue/redis/src/config.c:718
        #10 0x557e8afcdf15 in main /home/ubuntu/mem-leak-issue/redis/src/server.c:7258
        #11 0x7fdcdb29fd8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    
    SUMMARY: AddressSanitizer: 18 byte(s) leaked in 2 allocation(s).
    
    ```
    
    As part analysis found that the sdsfreesplitres is not called when this condition checks are being hit.
    
    Output after the fix:
    
    
    ```
    vm:~/mem-leak-issue/redis$ ./src/redis-server --invalid
    
    *** FATAL CONFIG FILE ERROR (Redis 255.255.255) ***
    Reading the configuration file, at line 2
    >>> 'invalid'
    Bad directive or wrong number of arguments
    vm:~/mem-leak-issue/redis$
    
    ===========================================
    vm:~/mem-leak-issue/redis$ ./src/redis-server --jdhg
    
    *** FATAL CONFIG FILE ERROR (Redis 255.255.255) ***
    Reading the configuration file, at line 2
    >>> 'jdhg'
    Bad directive or wrong number of arguments
    
    ---------------------------------------------------------------------------
    vm:~/mem-leak-issue/redis$ ./src/redis-server --port
    
    *** FATAL CONFIG FILE ERROR (Redis 255.255.255) ***
    Reading the configuration file, at line 2
    >>> 'port'
    wrong number of arguments
    ```
    Co-authored-by: default avatarOran Agra <oran@redislabs.com>
    813924b4
introspection.tcl 31.3 KB