<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/145281>145281</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[GWP_ASan] Potential Deadlock in GWP-ASan Signal Handler
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
rePeek
</td>
</tr>
</table>
<pre>
# Issue: Potential Deadlock in GWP-ASan Signal Handler When Handling Recursive Memory Access Violations
## Summary
In specific scenarios involving signal handling during memory operations, GWP-ASan's signal handler can enter a deadlock state when attempting to acquire locks that are already held by the interrupted thread. This occurs when a UAF (Use-After-Free) violation happens within a signal handler while the main thread holds GWP-ASan's internal locks.
## Detailed Description
Consider the following scenario in a single-threaded application using GWP-ASan for all memory operations:
* Program A registers a signal handler b
* Program A performs a memory allocation operation, during which it acquires GWP-ASan's internal lock(s),While holding the lock(s), a signal is delivered and the program enters signal handler b
* Within signal handler b, a UAF violation occurs, triggering GWP-ASan's segv_handler
* The segv_handler attempts to acquire the same lock(s) already held by the main thread
Since GWP-ASan uses non-recursive locks (normal mutexes), the lock acquisition in the signal handler will block indefinitely, causing a deadlock. The program hangs without producing a diagnostic report.
I noticed that in this MR https://github.com/llvm/llvm-project/commit/35b5499d7259ac3e5c648a711678290695703a87, @hctim changed trylock() to lock() in GWP_ASan's signal handler. hctim, have you considered the potential deadlock scenario this might cause?
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVUFv4zYT_TX0ZRBDpixZOvigTT5_zWGBYLPbHBc0NRGnS5EqSdn1vy9ISXHcbAssYECWSL558-bNUHhPnUHcs-ITKx5WYgzKur3DJ8Qfq6NtL3vGc3j0fkSWN_BkA5pAQsMDilZb-QPIwP9fnu6aZ2HgmTojNPwmTKvRwYtCM72Q6eALytF5OiF8xt66CzRSovfwO1ktAlnjWdbEH89jzOex74W7sKx5NOAHlPRKErxEIxxZD2ROVp8isJ-iqiVQO7r46KcodkA3w_P7N6qM7_zNQXQghQE0AR0IaJf0fBAB4RwzESFgP4SIHSwI-edIDiHu8hCUCCAcgtAORXsBhbqF4wWCQqAI6sYhYAtBxfU1fFXkwcooyYwO35oDMF5983jXvAZ0dweHyHgNp0UhUGIY0Hg4U1AUz_wjhbMijSlmL8jMwUBZ3frb1BOleDLRX98o_4BBkMYWHtBLR0OMzLLm3hpPLboE_2q1tuek_lwRmPmYTuPdFBhbEMOgSU7kx7h4NcurdSC0_kmd8mbh08CTs50TPTTgsCMf0PmPaR8_bB7QvVrXx70zvtDazkTeQkVHzG45K5IKKCx1_S-9GK884zX734F9umfV_UtSPaqcvKHwZhe_vxImDy1qOqGL2pg2bR5m1sl7H1y55PYylfzDaoKP1rm6ZLJVXAmOug7de90n52N3-j5jzPhfFd58Xuzu35s90vWiv0nwp5Z_Z7-pls9kJF6LP3r0YKy5c29TYWokxitjXS809GPAv3CRcFF1ouIpJZpi4IcmIK3hOA-nFl_JUEB9iShSTCa8Nvg6Jb6UQAnTTd1lxxC_tqOc95PojPWBJDgcrAtzzzyCsYFk6mwRJkbk4fMXUCEMycv8wPiho6DG41ranvGD1qflcTc4-wfKwPhB2r6n-CcvjsW2rtsdL2ohcyxkua3EbrMpdxWvs7Iudlkuql3MiG0zJQP1ICP3SMNd5uLE2gQL796mWf39XwbgGhJSRFXihHCxI8i56XG26tv8vw7Ipf9T3j11KiSZkeUHljWrdp-3dV6LFe43uyIry01W1Cu131ZVvjsWuEHMcbOpZFvIbFuXAnelzIvdivY840VW8jwrt9tNvS5LuavLo-Db7FjVlWTbDHtBeh11XFvXrSjeU_vNtuDVZqXFEbVPNxvnBs-QVhnn8aJz-yT-cew822aafPBXmEBBpyvxTazi4deuvtXo9P6XDZAIesYPcwanPf87AAD___D2mds">