https://sourceware.org/bugzilla/show_bug.cgi?id=28687

            Bug ID: 28687
           Summary: Undefined behavior in bfd/dwarf1.c
           Product: binutils
           Version: 2.38 (HEAD)
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: binutils
          Assignee: unassigned at sourceware dot org
          Reporter: npv1310 at gmail dot com
  Target Milestone: ---

In function 'parse_die' there is an undefined behavior in expressions like xptr
+ block_len < xptr. Due to variable 'block_len' being unsigned integer, such
expressions may be completely omitted by compiler as demonstrated by the
following proof-of-concept:

The function

int test(char *p, unsigned int sz)
{
        return p + sz < p;
}

may be turned into the following assembly code

        .file   "test.c"
        .text
        .p2align 4,,15
        .globl  test
        .type   test, @function
test:
.LFB0:
        .cfi_startproc
        xorl    %eax, %eax
        ret
        .cfi_endproc
.LFE0:
        .size   test, .-test
        .ident  "GCC: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0"
        .section        .note.GNU-stack,"",@progbits

by the command 

gcc -O2 -S -o- test.c

So the external function 'test' always returns 0.

To be precise, the issues comes in the code fragments labeled with
'FORM_BLOCK2' and 'FORM_BLOCK4'.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Reply via email to