Hi,
Slightly changed the hello world test case to have a local variable
#include <stdio.h>
int main()
{
int a[10]={0};
printf("Hello World\n");
return a[1];
}
With ASLR "on" I get
ASAN:SIGSEGV
=================================================================
==12464==ERROR: AddressSanitizer: SEGV on unknown address
0x007ff92af4ac (pc 0x0000004c41f4 bp 0x03ffc957a650 sp 0x03ffc957a560
T0)
#0 0x4c41f3 (/root/work/vekumar/ASAN/build-asan-64bit/a.out+0x4c41f3)
#1 0x3ffaacd0c93 (/lib64/libc.so.6+0x20c93)
#2 0x41b7ab (/root/work/vekumar/ASAN/build-asan-64bit/a.out+0x41b7ab)
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV
(/root/work/vekumar/ASAN/build-asan-64bit/a.out+0x4c41f3)
setarch linux64 -R ./a.out
Hello world
On 22 March 2015 at 19:59, Venkataramanan Kumar
<[email protected]> wrote:
> Hi Konstantin,
>
> The machine I was working is down now. I am waiting for someone in
> linaro lab to turn it on.
>
> Now I used another machine and with this one I am not getting segfault
> for the simple "hello world" test case.
>
> However ASAN tests continued to fail with same errors.
>
> An example
> <stdin>:3:1: note: possible intended match here
> ==4793==ERROR: AddressSanitizer: SEGV on unknown address
> 0x007ffd9552d8 (pc 0x0000004c41e8 bp 0x03ffecaa9760 sp 0x03ffecaa96c0
> T0)
> ^
>
>
> Below is the LLVM IR for the test case you gave.
>
> (------Snip----)
> ; ModuleID = 'try.c'
> target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
> target triple = "aarch64-unknown-linux-gnu"
>
> @llvm.global_ctors = appending global [1 x { i32, void ()* }] [{ i32,
> void ()* } { i32 1, void ()* @asan.module_ctor }]
>
> ; Function Attrs: nounwind sanitize_address uwtable
> define void @_Z3fooPl(i64* %x) #0 {
> entry:
> %x.addr = alloca i64*, align 8
> store i64* %x, i64** %x.addr, align 8
> %0 = load i64*, i64** %x.addr, align 8
> %1 = ptrtoint i64* %0 to i64
> %2 = lshr i64 %1, 3
> %3 = or i64 %2, 68719476736
> %4 = inttoptr i64 %3 to i8*
> %5 = load i8, i8* %4
> %6 = icmp ne i8 %5, 0
> br i1 %6, label %7, label %8
>
> ; <label>:7 ; preds = %entry
> call void @__asan_report_store8(i64 %1)
> call void asm sideeffect "", ""()
> unreachable
>
> ; <label>:8 ; preds = %entry
> store i64 0, i64* %0, align 8
> ret void
> }
>
> define internal void @asan.module_ctor() {
> call void @__asan_init_v5()
> ret void
> }
>
> declare void @__asan_init_v5()
>
> declare void @__asan_report_load_n(i64, i64)
>
> declare void @__asan_loadN(i64, i64)
>
> declare void @__asan_report_load1(i64)
>
> declare void @__asan_load1(i64)
>
> declare void @__asan_report_load2(i64)
>
> declare void @__asan_load2(i64)
>
> declare void @__asan_report_load4(i64)
>
> declare void @__asan_load4(i64)
>
> declare void @__asan_report_load8(i64)
>
> declare void @__asan_load8(i64)
>
> declare void @__asan_report_load16(i64)
>
> declare void @__asan_load16(i64)
>
> declare void @__asan_report_store_n(i64, i64)
>
> declare void @__asan_storeN(i64, i64)
>
> declare void @__asan_report_store1(i64)
>
> declare void @__asan_store1(i64)
>
> declare void @__asan_report_store2(i64)
>
> declare void @__asan_store2(i64)
>
> declare void @__asan_report_store4(i64)
>
> declare void @__asan_store4(i64)
>
> declare void @__asan_report_store8(i64)
>
> declare void @__asan_store8(i64)
>
> declare void @__asan_report_store16(i64)
>
> declare void @__asan_store16(i64)
>
> declare void @__asan_report_exp_load_n(i64, i64, i32)
>
> declare void @__asan_exp_loadN(i64, i64, i32)
>
> declare void @__asan_report_exp_load1(i64, i32)
>
> declare void @__asan_exp_load1(i64, i32)
>
> declare void @__asan_report_exp_load2(i64, i32)
>
> declare void @__asan_exp_load2(i64, i32)
>
> declare void @__asan_report_exp_load4(i64, i32)
>
> declare void @__asan_exp_load4(i64, i32)
>
> declare void @__asan_report_exp_load8(i64, i32)
>
> declare void @__asan_exp_load8(i64, i32)
>
> declare void @__asan_report_exp_load16(i64, i32)
>
> declare void @__asan_exp_load16(i64, i32)
>
> declare void @__asan_report_exp_store_n(i64, i64, i32)
>
> declare void @__asan_exp_storeN(i64, i64, i32)
>
> declare void @__asan_report_exp_store1(i64, i32)
>
> declare void @__asan_exp_store1(i64, i32)
>
> declare void @__asan_report_exp_store2(i64, i32)
>
> declare void @__asan_exp_store2(i64, i32)
>
> declare void @__asan_report_exp_store4(i64, i32)
>
> declare void @__asan_exp_store4(i64, i32)
>
> declare void @__asan_report_exp_store8(i64, i32)
>
> declare void @__asan_exp_store8(i64, i32)
>
> declare void @__asan_report_exp_store16(i64, i32)
>
> declare void @__asan_exp_store16(i64, i32)
>
> declare i8* @__asan_memmove(i8*, i8*, i64)
>
> declare i8* @__asan_memcpy(i8*, i8*, i64)
>
> declare i8* @__asan_memset(i8*, i32, i64)
>
> declare void @__asan_handle_no_return()
>
> declare void @__sanitizer_ptr_cmp(i64, i64)
>
> declare void @__sanitizer_ptr_sub(i64, i64)
>
> declare void @__asan_before_dynamic_init(i64)
>
> declare void @__asan_after_dynamic_init()
>
> declare void @__asan_register_globals(i64, i64)
>
> declare void @__asan_unregister_globals(i64, i64)
>
> attributes #0 = { nounwind sanitize_address uwtable
> "less-precise-fpmad"="false" "no-frame-pointer-elim"="true"
> "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false"
> "no-nans-fp-math"="false" "stack-protector-buffer-size"="8"
> "target-cpu"="generic" "target-features"="+neon"
> "unsafe-fp-math"="false" "use-soft-float"="false" }
>
> !llvm.ident = !{!0}
>
> !0 = !{!"clang version 3.7.0 (http://llvm.org/git/clang.git
> f3f115679db522ca44f75e3dadf3cdef8679b928)
> (http://llvm.org/git/llvm.git
> 048ca17f6ea4386f608eea62ca716466bf9f674c)"}
> (-----Snip------)
>
> %2 = lshr i64 %1, 3
> %3 = or i64 %2, 68719476736
> %4 = inttoptr i64 %3 to i8*
>
> I am trying to understand why 68719476736 (0x1000000000) has been
> ored with stack here.
>
>
> On 20 March 2015 at 21:27, Konstantin Serebryany
> <[email protected]> wrote:
>>>
>>> OK. Let me start with this test case.
>>>
>>> #include <stdio.h>
>>>
>>> int main()
>>> {
>>> printf("Hello World\n");
>>> return 0;
>>> }
>>>
>>> /home/venkataramanan.kumar/
>>> LLVM/TSAN_port/Build/./bin/clang
>>> --driver-mode=g++ -fsanitize=address test.c
>>>
>>> [venkataramanan.kumar@amd-01 ~]$ ./a.out
>>> ASAN:SIGSEGV
>>> =================================================================
>>> ==25303==ERROR: AddressSanitizer: SEGV on unknown address
>>> 0x007fff96387c (pc 0x0000004c1dfc bp 0x03fffcb1c460 sp 0x03fffcb1c3e0
>>> T0)
>>> #0 0x4c1dfb (/home/venkataramanan.kumar/a.out+0x4c1dfb)
>>> #1 0x3ff9c790c93 (/lib64/libc.so.6+0x20c93)
>>> #2 0x41b1f3 (/home/venkataramanan.kumar/a.out+0x41b1f3)
>>>
>>> AddressSanitizer can not provide additional info.
>>> ==25303==ABORTING
>>>
>>>
>>> Now I am running under gdb
>>>
>>> [venkataramanan.kumar@amd-01 ~]$ gdb ./a.out
>>> GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-62.sa1.4
>>> Copyright (C) 2013 Free Software Foundation, Inc.
>>> License GPLv3+: GNU GPL version 3 or later
>>> <http://gnu.org/licenses/gpl.html>
>>> This is free software: you are free to change and redistribute it.
>>> There is NO WARRANTY, to the extent permitted by law. Type "show copying"
>>> and "show warranty" for details.
>>> This GDB was configured as "aarch64-redhat-linux-gnu".
>>> For bug reporting instructions, please see:
>>> <http://www.gnu.org/software/gdb/bugs/>...
>>> Reading symbols from /home/venkataramanan.kumar/a.out...done.
>>> (gdb) r
>>> Starting program: /home/venkataramanan.kumar/./a.out
>>> [Thread debugging using libthread_db enabled]
>>> Using host libthread_db library "/lib64/libthread_db.so.1".
>>> Hello World
>>> [Inferior 1 (process 25306) exited normally]
>>> Missing separate debuginfos, use: debuginfo-install
>>> glibc-2.17-68.sa1.4.aarch64 libgcc-4.8.3-8.sa1.4.aarch64
>>> libstdc++-4.8.3-8.sa1.4.aarch64
>>>
>>> It ran to completion.
>>
>>
>> Interesting. So, w/ gdb the test passes, w/o gdb it fails.
>> Try few things:
>>
>> Run w/o gdb but with ASLR off (is there ASLR on AArch64?). Use setarch for
>> that.
>>
>> Run w/ gdb but with ASLR on (disable-randomization off). If you get a
>> crash with gdb, type 'dis' and send the result here.
>>
>> build the following code with -S and with '-S -o - -emit-llvm' and
>> send the results:
>> void foo(long *x) { *x = 0; }
>>
>> --kcc
>>
>>
>>>
>>>
>>> ASAN:SIGSEGV
>>> ==============================
>>> ===================================
>>> ==6221==ERROR: AddressSanitizer: SEGV on unknown address
>>> 0x007ffd1329f4 (pc 0x0000004c1e64 bp 0x03ffe8995090 sp 0x03ffe8994fa0
>>> T0)
>>> #0 0x4c1e63 in main
>>> /home/venkataramanan.kumar/LLVM/TSAN_port/compiler-rt/test/asan/TestCases/Linux/coverage-direct-large.cc:52
>>> #1 0x3ffb2730c93 in __libc_start_main (/lib64/libc.so.6+0x20c93)
>>>
>>> What this error mean?
>>> Stack address 0x03ffe8994fa0 when I do 0x03ffe8994fa0 >> 0x3, I get
>>> this address 0x007ffd1329f4,
>>>
>>> "address 0x007ffd1329f4 is illegal. Why this address is accessed?
>>>
>>> Between my cat /proc/self/maps look like that.
>>>
>>> venataramanan.kumar@amd-01 ~]$ cat /proc/self/maps
>>> 00400000-00410000 r-xp 00000000 08:04 16890529
>>> /usr/bin/cat
>>> 00410000-00420000 r--p 00000000 08:04 16890529
>>> /usr/bin/cat
>>> 00420000-00430000 rw-p 00010000 08:04 16890529
>>> /usr/bin/cat
>>> 07a30000-07a60000 rw-p 00000000 00:00 0
>>> [heap]
>>> 3ff85ca0000-3ff8c540000 r--p 00000000 08:04 34089040
>>> /usr/lib/locale/locale-archive
>>> 3ff8c540000-3ff8c6a0000 r-xp 00000000 08:04 33642757
>>> /usr/lib64/libc-2.17.so
>>> 3ff8c6a0000-3ff8c6b0000 r--p 00150000 08:04 33642757
>>> /usr/lib64/libc-2.17.so
>>> 3ff8c6b0000-3ff8c6c0000 rw-p 00160000 08:04 33642757
>>> /usr/lib64/libc-2.17.so
>>> 3ff8c6d0000-3ff8c6e0000 r--p 00000000 00:00 0
>>> [vvar]
>>> 3ff8c6e0000-3ff8c6f0000 r-xp 00000000 00:00 0
>>> [vdso]
>>> 3ff8c6f0000-3ff8c710000 r-xp 00000000 08:04 33642750
>>> /usr/lib64/ld-2.17.so
>>> 3ff8c710000-3ff8c720000 r--p 00010000 08:04 33642750
>>> /usr/lib64/ld-2.17.so
>>> 3ff8c720000-3ff8c730000 rw-p 00020000 08:04 33642750
>>> /usr/lib64/ld-2.17.so
>>> 3ffc0d80000-3ffc0db0000 rw-p 00000000 00:00 0
>>> [stack]
>>>
>>>
>>> regards,
>>> Venkat.
>>>
>>>
>>>
>>>
>>>>> regards,
>>>>> Venkat,
>>>>>
>>>>>
>>>>> On 26 January 2015 at 20:50, <[email protected]> wrote:
>>>>>>
>>>>>> Comment #16 on issue 246 by [email protected]: Porting to a new target
>>>>>> (AArch64)
>>>>>> https://code.google.com/p/address-sanitizer/issues/detail?id=246
>>>>>>
>>>>>> FYI, following patch makes ASAN work fine on 42-bit AS, but will break
>>>>>> the
>>>>>> 39-bit AS and won't fix 48-bit one. So we really need something more
>>>>>> dynamic.
>>>>>>
>>>>>> --- libsanitizer/asan/asan_allocator.h (revision 219833)
>>>>>> +++ libsanitizer/asan/asan_allocator.h (working copy)
>>>>>> @@ -100,6 +100,10 @@
>>>>>> # if defined(__powerpc64__)
>>>>>> const uptr kAllocatorSpace = 0xa0000000000ULL;
>>>>>> const uptr kAllocatorSize = 0x20000000000ULL; // 2T.
>>>>>> +# elif defined(__aarch64__)
>>>>>> +// Valid only for 42-bit VA
>>>>>> +const uptr kAllocatorSpace = 0x10000000000ULL;
>>>>>> +const uptr kAllocatorSize = 0x10000000000ULL; // 1T.
>>>>>> # else
>>>>>> const uptr kAllocatorSpace = 0x600000000000ULL;
>>>>>> const uptr kAllocatorSize = 0x40000000000ULL; // 4T.
>>>>>> --- libsanitizer/sanitizer_common/sanitizer_platform.h (revision 219833)
>>>>>> +++ libsanitizer/sanitizer_common/sanitizer_platform.h (working copy)
>>>>>> @@ -79,7 +79,7 @@
>>>>>> // For such platforms build this code with
>>>>>> -DSANITIZER_CAN_USE_ALLOCATOR64=0 or
>>>>>> // change the definition of SANITIZER_CAN_USE_ALLOCATOR64 here.
>>>>>> #ifndef SANITIZER_CAN_USE_ALLOCATOR64
>>>>>> -# if defined(__aarch64__) || defined(__mips64)
>>>>>> +# if defined(__mips64)
>>>>>> # define SANITIZER_CAN_USE_ALLOCATOR64 0
>>>>>> # else
>>>>>> # define SANITIZER_CAN_USE_ALLOCATOR64 (SANITIZER_WORDSIZE == 64)
>>>>>> @@ -88,10 +88,10 @@
>>>>>>
>>>>>> // The range of addresses which can be returned my mmap.
>>>>>> // FIXME: this value should be different on different platforms,
>>>>>> -// e.g. on AArch64 it is most likely (1ULL << 39). Larger values will
>>>>>> still
>>>>>> work
>>>>>> +// e.g. on AArch64 it is most likely (1ULL << 42). Larger values will
>>>>>> still
>>>>>> work
>>>>>> // but will consume more memory for TwoLevelByteMap.
>>>>>> #if defined(__aarch64__)
>>>>>> -# define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL
>>>>>> <<
>>>>>> 39)
>>>>>> +# define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL
>>>>>> <<
>>>>>> 42)
>>>>>> #else
>>>>>> # define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL
>>>>>> <<
>>>>>> 47)
>>>>>> #endif
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> You received this message because this project is configured to send all
>>>>>> issue notifications to this address.
>>>>>> You may adjust your notification preferences at:
>>>>>> https://code.google.com/hosting/settings
>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google Groups
>>>>>> "address-sanitizer" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it, send an
>>>>>> email to [email protected].
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google Groups
>>>>> "address-sanitizer" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send an
>>>>> email to [email protected].
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google Groups
>>>> "address-sanitizer" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send an
>>>> email to [email protected].
>>>> For more options, visit https://groups.google.com/d/optout.
>
> regards,
> Venkat.
--
You received this message because you are subscribed to the Google Groups
"address-sanitizer" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.