Skip to content

MemorySanitizer detects use-of-uninitialized-value in a simple OpenMP program #60501

@lqhl

Description

@lqhl

Here is a minimal OpenMP program:

#include <omp.h>
#include <stdio.h>

int main() {
#pragma omp parallel for
    for (int i = 0; i < 10; i++) {
        // do nothing
    }
    printf("done\n");
}

But MemorySanitizer detects use-of-uninitialized-value error:

clang++-13 main.cpp -fopenmp -fsanitize=memory && ./a.out
Uninitialized bytes in __interceptor_strlen at offset 2259 inside [0x71d000000040, 2260)
==3120751==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x7faa9ed131f5  (/lib/x86_64-linux-gnu/libomp.so.5+0x4a1f5)
    #1 0x7faa9ed00fd6  (/lib/x86_64-linux-gnu/libomp.so.5+0x37fd6)
    #2 0x7faa9ed00f44  (/lib/x86_64-linux-gnu/libomp.so.5+0x37f44)
    #3 0x7faa9ecf489c in __kmpc_fork_call (/lib/x86_64-linux-gnu/libomp.so.5+0x2b89c)
    #4 0x4a0f05 in main (/home/qliu/workspace/test-openmp-msan/a.out+0x4a0f05)
    #5 0x7faa9eaaad8f in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
    #6 0x7faa9eaaae3f in __libc_start_main csu/../csu/libc-start.c:392:3
    #7 0x420244 in _start (/home/qliu/workspace/test-openmp-msan/a.out+0x420244)

SUMMARY: MemorySanitizer: use-of-uninitialized-value (/lib/x86_64-linux-gnu/libomp.so.5+0x4a1f5)
Exiting

Without MemorySantinizer, it's ok:

clang++-13 main.cpp -fopenmp && ./a.out
done

Another example is simply getting number of threads using OpenMP:

#include <omp.h>
#include <stdio.h>

int main() {
    int number_of_threads = omp_get_max_threads();
    printf("number_of_threads: %d\n", number_of_threads);

    return 0;
}

This program crashes too with MemorySantinizer:

clang++-13 main.cpp -fopenmp -fsanitize=memory && ./a.out
Uninitialized bytes in __interceptor_strlen at offset 2259 inside [0x71d000000040, 2260)
==3125901==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x7f8d2b0fa1f5  (/lib/x86_64-linux-gnu/libomp.so.5+0x4a1f5)
    #1 0x7f8d2b0e7fd6  (/lib/x86_64-linux-gnu/libomp.so.5+0x37fd6)
    #2 0x7f8d2b0f5be8  (/lib/x86_64-linux-gnu/libomp.so.5+0x45be8)
    #3 0x7f8d2b0f5bb9  (/lib/x86_64-linux-gnu/libomp.so.5+0x45bb9)
    #4 0x7f8d2b16e9a4 in omp_get_max_threads (/lib/x86_64-linux-gnu/libomp.so.5+0xbe9a4)
    #5 0x4a0ee3 in main (/home/qliu/workspace/test-openmp-msan/a.out+0x4a0ee3)
    #6 0x7f8d2ae91d8f in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
    #7 0x7f8d2ae91e3f in __libc_start_main csu/../csu/libc-start.c:392:3
    #8 0x420224 in _start (/home/qliu/workspace/test-openmp-msan/a.out+0x420224)

SUMMARY: MemorySanitizer: use-of-uninitialized-value (/lib/x86_64-linux-gnu/libomp.so.5+0x4a1f5)
Exiting

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    Done

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions