[OpenMP] Fix race condition in omp_init_lock
authorJonathan Peyton <jonathan.l.peyton@intel.com>
Wed, 1 Nov 2017 19:44:42 +0000 (19:44 +0000)
committerJonathan Peyton <jonathan.l.peyton@intel.com>
Wed, 1 Nov 2017 19:44:42 +0000 (19:44 +0000)
commit3d18a37ca9bbbbd9f785d648a1fc602f07d5c6d1
tree86cc4441f5311826689e7fbe5488fc1aaed8fa92
parent435151ad753d6a76ef09af3803c510a1bcf9fde9
[OpenMP] Fix race condition in omp_init_lock

This is a partial fix for bug 34050.

This prevents callers of omp_set_lock (which does not hold __kmp_global_lock)
from ever seeing an uninitialized version of __kmp_i_lock_table.table.

It does not solve a use-after-free race condition if omp_set_lock obtains a
pointer to __kmp_i_lock_table.table before it is updated and then attempts to
dereference afterwards. That race is far less likely and can be handled in a
separate patch.

The unit test usually segfaults on the current trunk revision. It passes with
the patch.

Patch by Adam Azarchs

Differential Revision: https://reviews.llvm.org/D39439

llvm-svn: 317115
openmp/runtime/src/kmp_lock.cpp
openmp/runtime/test/lock/omp_init_lock.c [new file with mode: 0644]