<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">