<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/102579>102579</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
TSAN reexec of shebang script results in unexpected argv[]
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
awelzel
</td>
</tr>
</table>
<pre>
We've run into spurious testing failures when running a TSAN instrumented executable as script interpreter in a shebang:
zeek/zeek#3774
This was tracked down to TSAN deciding to reexecute and then the shebang arguments are duplicated in `argv[]`.
Here's a short reproducer, notice the `-b --` and `./main.sh` entries duplicated after a reexec is forced with `ulimit -s unlimited`. For us it was a spurious failure because the reexec wasn't deterministic.
```
$ cat main.c
#include <stdio.h>
int main(int argc, const char *argv[]) {
printf("argc=%d\n", argc);
for ( int i = 0; i < argc; i++) {
printf("argv[%d]=%s\n", i, argv[i]);
}
}
$ cat main.sh
#!./main -b --
$ clang-18 -fsanitize=thread main.c -o main
$ ./main.sh -a
argc=4
argv[0]=./main
argv[1]=-b --
argv[2]=./main.sh
argv[3]=-a
# force a tsan re-exec
$ ulimit -s unlimited
$ ./main.sh -a
argc=6
argv[0]=./main
argv[1]=-b -- # duplicate
argv[2]=./main.sh # duplicate
argv[3]=-b --
argv[4]=./main.sh
argv[5]=-a
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVU2P4zYM_TXMhXCgSP7KwYeZSYOeeukCPcsSY6vrSIE-Jtv59YVsJ5OZbbvFBkYsiSLf4xNFyxDMYIk6qJ6hOmxkiqPznbzS9EbTpnf6r-4PAt68Evpk0djoMFySNy4FjBSisQOepJmSp4DXkWzeZ_OqxC-_P_2Gxobo05lsJI30jVSKsp8IZcCgvLnEHJT8xVMkj8aixDBSL-0A4gmBHYA9vRF9BX5cXkI0TbmsP_5_GU3AqwwYvVRfSaN2V4vRLSw0KaMzq-jQ00KDUFqNMXOOI91QUfphphtQekKdLpNRMpM3FqFm0g-vi1pQs-0jg1_JZ6nCnIHzET1dvNNJkQf-gtZFo2iGgpoVPRYF1GzmMEfix7M0dhvGvEo2ekPhEV6eskBypY8m4Ml5RRqvJo45RJrM2UQsAiY7D0nnwHh0HlNAE2d55Pv5reeGPSmZwkJtjX6VwQJvIup8LGdjTYhGfUgXarY-y5SXqGTEOQl1WxPGqilpQhAvIWrjtiOIXx7DGLv4AG_zUPpBZbWUsyGiGqVH4E8PovM9QvO8-CJevLHxBLwFzmdXcQBeaaheLHCeAy0B9yBuPieXQ7a57NAgiAMyEM_zcN2dZ8Cf5-cD2nd4M6kZ77Aghwdks8LnTWah_s4CoTmsMtwH3-sYRrwrCXx3KxJcquez1yTtUOxaLE5BWhPNG4E4xNGT1OuxYOHmEX72fSg_LOSyvupZ3mc5Ebaketv_wbZbbA_kVgP_6JRr_NEsVj_5kZVYChwlxiAteipyab5z_qd6__9p1T-VFr7_MsH79fxBuj90Ef8mXfnf0lWfpLvdyY3uhN6LvdxQt2u42LVtJdhm7Mqqb2rSmtWl7BsSUvSK1axl1PZ7RvXGdJzxkrVszxreVmzbUs1OXFa82ZXqVAsoGZ2lmbbT9HreOj9sTAiJuh3jVbPfTLKnKcwfFM4tXXG25itRHTa-y05Fn4YAJZtMiOE9TDRxom5u12sXcqd7V16_FZ5CmmLIvThZ-nYhNbfGe3vYJD91Y4yXAOIJ-BH4cTBxTP1WuTPwYwZbX8XFuz9JReDHmWIAflxzeO343wEAAP__vasXMw">