https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118040

            Bug ID: 118040
           Summary: GCC's Address Sanitizer misses
                    'global-buffer-overflow',while clang can detect it
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: sanitizer
          Assignee: unassigned at gcc dot gnu.org
          Reporter: 652023330028 at smail dot nju.edu.cn
                CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org,
                    jakub at gcc dot gnu.org, kcc at gcc dot gnu.org
  Target Milestone: ---

For the following code (https://godbolt.org/z/5qaWasqcn), GCC's ASan seems to
have missed 'global-buffer-overflow' (line 5 of function 'f'):

#include<stdio.h>
static int a1 = 1;
static int *a2 = &a1;
static unsigned short b1 = 0;
static long b2 = 0;
static unsigned short b3 = 0;
static int c = 0;
static char d = 0;

int Arr[10];
static void f(int *p1, int *p2) {
    int *t = &c;
    *p1 = 4 ^ (*t = 0 < 10) + 0 && 0;

        c=Arr[(*t - 32)-1];   //global-buffer-overflow

}
int main() {
    f(a2, a2); 
    printf("%d",b1);
    printf("%ld",b2);
    printf("%d",b3);
    printf("%c",d);
}

There is no report from GCC's AddressSanitizer.

Expected (clang):
==1==ERROR: AddressSanitizer: global-buffer-overflow on address 0x55b76d461da0
at pc 0x55b76cad0f7b bp 0x7ffc9fa1c850 sp 0x7ffc9fa1c848
READ of size 4 at 0x55b76d461da0 thread T0
    #0 0x55b76cad0f7a in f /app/example.c:15:4
    #1 0x55b76cad0de6 in main /app/example.c:19:5
    #2 0x7324f9829d8f  (/lib/x86_64-linux-gnu/libc.so.6+0x29d8f) (BuildId:
490fef8403240c91833978d494d39e537409b92e)
    #3 0x7324f9829e3f in __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x29e3f) (BuildId:
490fef8403240c91833978d494d39e537409b92e)
    #4 0x55b76c9ec354 in _start (/app/output.s+0x2c354)

0x55b76d461da0 is located 32 bytes before global variable 'b2' defined in
'/app/example.c:5' (0x55b76d461dc0) of size 8
0x55b76d461da2 is located 0 bytes after global variable 'b1' defined in
'/app/example.c:4' (0x55b76d461da0) of size 2
SUMMARY: AddressSanitizer: global-buffer-overflow /app/example.c:15:4 in f

Reply via email to