<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/64764>64764</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
ASan failed to detect a global-buffer-overflow
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
jun-wei-zeng
</td>
</tr>
</table>
<pre>
Compiler explorer: https://godbolt.org/z/E41e9qW8M
For the following code, all opt levels of clang's ASan failed to detect a global-buffer-overflow, while gcc can.
```c
$ cat example.c
int printf(const char *, ...);
int a = 101;
int b[3] = {0};
void func(int b[3])
{
for (short i = 0; i < 3; i--)
a = b[i];
}
int main()
{
func(b);
printf("a = %d\n", a);
}
$ clang-tk -fsanitize=undefined,address example.c && ./a.out
a = 0
$ gcc-tk -fsanitize=undefined,address example.c && ./a.out
=================================================================
==1==ERROR: AddressSanitizer: global-buffer-overflow on address 0x0000004043fc at pc 0x00000040124e bp 0x7ffffbbbdc50 sp 0x7ffffbbbdc48
READ of size 4 at 0x0000004043fc thread T0
#0 0x40124d in func /app/example.c:7
#1 0x401281 in main /app/example.c:11
#2 0x7fce52fa6082 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24082)
#3 0x4010dd in _start (/app/output.s+0x4010dd)
0x0000004043fc is located 36 bytes to the left of global variable 'b' defined in '/app/example.c:3:5' (0x404420) of size 12
SUMMARY: AddressSanitizer: global-buffer-overflow /app/example.c:7 in func
Shadow bytes around the buggy address:
0x000080078820: 00 02 f9 f9 f9 f9 f9 f9 00 00 00 00 f9 f9 f9 f9
0x000080078830: 00 00 00 00 00 f9 f9 f9 f9 f9 f9 f9 00 00 00 00
0x000080078840: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9
0x000080078850: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9
0x000080078860: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9
=>0x000080078870: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9[f9]
0x000080078880: 00 00 00 00 00 04 f9 f9 f9 f9 f9 f9 00 00 00 00
0x000080078890: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0000800788a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0000800788b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0000800788c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
==1==ABORTING
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUl91u27gSx5-GvhnYoKjvC1_YcdxT4PS0SHqw2KuAoiiZLU1qSSpx8vQL6sOWXS12W-RmBUJxqP_8OJzRUCS1VtSK8zWKtyjeLWjrDtqsv7Vq-cLF8o2relHo8nV9p4-NkNwAPzVSG25QuIGDc41F4QaRPSL7WpeFlm6lTY3I_g2R_X0U8PyP37JPCO8Q3vT3vTbgDhwqLaV-EaoGpkuOyB1QKUE3DiR_5tKCroBJqmpEUgubR6qgokLyEpyGkjvOHFCopS6oXBZtVXGz1M_cVFK_eNrLQUgONWPAqFpNPUAJ7hsb_icRMOqAn-ixkXw1dAvloDFCuQqRjGllHbADNYDIxvNXqxUiOQq3FzUFFO4gwMFVb4HibYjiXfcQpVuM0t1Z8KxFCVWrGCLZVOzRvXPpoAQAqLQfPrMHbRyIDohRuO1-3kHY_Vwuz7YwXL1fHi08ehzb-3H28kiFQiSbGXfwrpjO1lPPsUGE9CMgEpcovlOIkC6fU4vzYF20fV6X7jssK0uVcOKNo3DXqpJXQvESkTtaloZbe8kJIJIgksAKkT1d6db1NDoE4YyuGXsXMAp3__o2mUjQ_7l_ePj84Et304fhcQhSV87ztQRawRg0fMLdFeEorBhQBw2bdAYk4lA0gE9pVVVVURQlizHY654o6x17uN_sfJFb8cYh8rAbvDsYTkv4ii_vHCIhBnzqhipBqO7lBJ-5pkFkf6ngcJMOVoiEwWCSBd7Ev-nzJkFwNRLp3GY8JhVNcEa88dOTFAV7so4a9zSQMkT2UhSI7E9Z8pRESylUe1rWqu0fsJXVqwSRLT6RCGfkqj4RCcPePVx2M-rZA7b3Ubeuad3KdoheeanTyf0mfsKC1Iw6XkKYQPHquPVrp198Ja-cj32fcnimRtBCckAkLRBJYagX6OaXzgYrROEm9lpEMu9VFBGMSH7OaEB6px7__-nT5uH3n3zp5lM6ZnwgH2ipX4aJUaNbVXaTK9q6fh3fWf95GoLdhyfDOM0ygv3gGAMmUOW3zfePbdI_BwrPoHmbWegcKOpAs5Z_3QbQlBO_Eyf5dU631txPYelPw1C89bfdjGfZXMhx9I9CPuXks5y_aTMc-k6c4p047Nc5k5ICyWuuSl_eWnGwkyeGN4ZbrpyFDGjTSMGoE1r1pdh99ceiG0reLy7eqct1KYIv1DhBpTyX7CjGga9OHPrc4hhwAjiF0eo_nDb9MmZ4-abVBF_RUbQ3nJdw8FLDa6HVRFSOokdH2fd5VBVci46inBmOXIuMqA8_oKrwWkQrxw0Y7lpzcaqKr0Wt5YPQMt10rCobJR_6pfsHdzwnvxEJJRxoU_ZL7iBKBtEXLaz2i33x6kecSKAaP6Jwp5WjQnED5z322Ws2ijbG0FdgWn8XN9kGehZ9VM5Q0MU3v4G_9r4oziS_3RfKcaOo7ObNx0f_9Ymi0n_ZbifPzol_6HLwo4oVM5uizfbzw9eP__twczpYlOuwzMOcLvg6SHJCkoiE-eKwTgOaJEUS5AEpKWZJzlmVFUUcpSVLyjxeiDXBJMRZkOKchHG-4qxgOK94FtAkq-IURZgfqZArKZ-P_sC0ENa2fJ1EaRItJC24tN2RjBDFX6B76DfV8W5h1t5mWbS1RRGWwjp7oTjhJF__3Flp0Rq5vjnJCXdoixXTR7-Bkc_jn2VjtE8bIvvOJYvIvnP5zwAAAP__ObTehQ">