On 07/15/2015 05:59 PM, T?r?k Edwin wrote:
> On 07/15/2015 12:05 AM, Richard Hipp wrote:
>> The plan is to release SQLite version 3.8.11 on or about the end of July.
>>
>> The current code is passing all tests that we have run against it.
>> Some soak tests are still running. There are quite a few
>> cross-platform tests (running on PPC, Sparc, etc) that have yet to be
>> started, but which should not offer any trouble. The current code is
>> stable and perfectly appropriate for beta testing.
>>
>> Please test the latest SQLite snapshot in your products and report any
>> problems to this list, or directly to me.
>
>
> I've run the address and undefined behaviour sanitizer (+ usual hardening and
> bug finding flags from Debian) from GCC 4.9.2 on Debian Jessie on this fossil
> checkout: a73d7128fbca8dde5e90bd46ee915e39ae07dd1f 2015-07-14 22:43:37 UTC
> (the snapshots tarballs don't seem to include the tests).
>
> I found some issues, but they look more like bugs in the sanitizer or the
> test runner than bugs in sqlite, but I'm posting it here just to double-check:
>
> $ ./configure CFLAGS="-g -O2 -Werror=array-bounds -Werror=clobbered
> -Werror=volatile-register-var -Werror=implicit-function-declaration -fPIE
> -fstack-protector-strong -Wformat -Werror=format-security -fsanitize=address
> -fsanitize=undefined -fno-omit-frame-pointer" CPPFLAGS="-D_FORTIFY_SOURCE=2"
> LDFLAGS="-fPIE -pie -Wl,-z,relro -Wl,-z,now -fsanitize=address
> -fsanitize=undefined -pthread" --enable-debug --enable-threadsafe
> $ make clean
> $ make -j10
> $ make test -j10
>
> 1) unknown-crash (might be due to some alignment requirements in asan):
Build with clang 3.4 shows a heap-use-after-free instead of unknown-crash, and
building a normal (just ./configure) executable with GCC and running under
valgrind shows an invalid read too, so this
does seem to be a real bug after all:
==14598== Invalid read of size 1
==14598== at 0x4A0C9CE: memcpy@@GLIBC_2.14 (vg_replace_strmem.c:915)
==14598== by 0x426804: rebuildPage (sqlite3.c:60141)
==14598== by 0x4421BA: editPage (sqlite3.c:60370)
==14598== by 0x4421BA: balance_nonroot (sqlite3.c:61299)
==14598== by 0x442888: balance (sqlite3.c:61547)
==14598== by 0x445051: sqlite3BtreeInsert (sqlite3.c:61737)
==14598== by 0x45A57D: sqlite3VdbeExec (sqlite3.c:76236)
==14598== by 0x461986: sqlite3Step (sqlite3.c:70639)
==14598== by 0x461986: sqlite3_step (sqlite3.c:70700)
==14598== by 0x407A51: runSql (fuzzcheck.c:617)
==14598== by 0x406C92: main (fuzzcheck.c:975)
==14598== Address 0x4ca3a10 is 0 bytes after a block of size 512 alloc'd
==14598== at 0x4A07C20: malloc (vg_replace_malloc.c:296)
==14598== by 0x426B70: sqlite3MemMalloc (sqlite3.c:17235)
==14598== by 0x40EDAC: mallocWithAlarm (sqlite3.c:20909)
==14598== by 0x40EDAC: sqlite3Malloc (sqlite3.c:20940)
==14598== by 0x40FA0A: pcache1Alloc (sqlite3.c:40705)
==14598== by 0x412507: sqlite3PageMalloc (sqlite3.c:40843)
==14598== by 0x412507: sqlite3PagerSetPagesize (sqlite3.c:45907)
==14598== by 0x44796B: sqlite3BtreeOpen (sqlite3.c:56012)
==14598== by 0x4792A6: openDatabase (sqlite3.c:132083)
==14598== by 0x406C4B: main (fuzzcheck.c:965)
==14598==
==14598== Invalid read of size 1
==14598== at 0x4A0C9C0: memcpy@@GLIBC_2.14 (vg_replace_strmem.c:915)
==14598== by 0x426804: rebuildPage (sqlite3.c:60141)
==14598== by 0x4421BA: editPage (sqlite3.c:60370)
==14598== by 0x4421BA: balance_nonroot (sqlite3.c:61299)
==14598== by 0x442888: balance (sqlite3.c:61547)
==14598== by 0x445051: sqlite3BtreeInsert (sqlite3.c:61737)
==14598== by 0x45A57D: sqlite3VdbeExec (sqlite3.c:76236)
==14598== by 0x461986: sqlite3Step (sqlite3.c:70639)
==14598== by 0x461986: sqlite3_step (sqlite3.c:70700)
==14598== by 0x407A51: runSql (fuzzcheck.c:617)
==14598== by 0x406C92: main (fuzzcheck.c:975)
==14598== Address 0x4ca3a12 is 2 bytes after a block of size 512 alloc'd
==14598== at 0x4A07C20: malloc (vg_replace_malloc.c:296)
==14598== by 0x426B70: sqlite3MemMalloc (sqlite3.c:17235)
==14598== by 0x40EDAC: mallocWithAlarm (sqlite3.c:20909)
==14598== by 0x40EDAC: sqlite3Malloc (sqlite3.c:20940)
==14598== by 0x40FA0A: pcache1Alloc (sqlite3.c:40705)
==14598== by 0x412507: sqlite3PageMalloc (sqlite3.c:40843)
==14598== by 0x412507: sqlite3PagerSetPagesize (sqlite3.c:45907)
==14598== by 0x44796B: sqlite3BtreeOpen (sqlite3.c:56012)
==14598== by 0x4792A6: openDatabase (sqlite3.c:132083)
==14598== by 0x406C4B: main (fuzzcheck.c:965)
./fuzzcheck /home/edwin/skylable/sqlite/test/fuzzdata3.db
fuzzdata3.db: Database fuzz as of 2015-06-24
fuzzdata3.db: 0% 10%/home/edwin/skylable/sqlite/sqlite3.c:24327: runtime error:
value 9e+323 is outside the range of representable values of type 'double'
/home/edwin/skylable/sqlite/sqlite3.c:24327: runtime error: value 9e+323 is
outside the range of representable values of type 'double'
=================================================================
==10788==ERROR: AddressSanitizer: heap-use-after-free on address 0x6150002abac1
at pc 0x840bac bp 0x7ffdfa9ec640 sp 0x7ffdfa9ec638
READ of size 385 at 0x6150002abac1 thread T0
#0 0x840bab in rebuildPage /home/edwin/skylable/sqlite/sqlite3.c:60141
#1 0x83ad8e in editPage /home/edwin/skylable/sqlite/sqlite3.c:60370
#2 0x83ad8e in balance_nonroot /home/edwin/skylable/sqlite/sqlite3.c:61299
#3 0x828d2f in balance /home/edwin/skylable/sqlite/sqlite3.c:61547
#4 0x7e278e in sqlite3BtreeInsert
/home/edwin/skylable/sqlite/sqlite3.c:61737
#5 0x7b16a8 in sqlite3VdbeExec /home/edwin/skylable/sqlite/sqlite3.c:76236
#6 0x4c75f9 in sqlite3Step /home/edwin/skylable/sqlite/sqlite3.c:70639
#7 0x4c62b7 in sqlite3_step /home/edwin/skylable/sqlite/sqlite3.c:70700
#8 0x488bc8 in runSql /home/edwin/skylable/sqlite/test/fuzzcheck.c:617
#9 0x486338 in main /home/edwin/skylable/sqlite/test/fuzzcheck.c:975
#10 0x3452621b44 (/lib/x86_64-linux-gnu/libc.so.6+0x3452621b44)
#11 0x48442c in _start (/home/edwin/skylable/sqlite/fuzzcheck+0x48442c)
0x6150002abc00 is located 0 bytes to the right of 512-byte region
[0x6150002aba00,0x6150002abc00)
freed by thread T0 here:
#0 0x46e1c9 in free
/home/edwin/tools/stack/llvm-3.4/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:64
#1 0x507811 in sqlite3_free /home/edwin/skylable/sqlite/sqlite3.c:21118
#2 0x507811 in pcache1Free /home/edwin/skylable/sqlite/sqlite3.c:40746
#3 0x7b3b51 in sqlite3PageFree /home/edwin/skylable/sqlite/sqlite3.c:40850
#4 0x7b3b51 in sqlite3BtreeIntegrityCheck
/home/edwin/skylable/sqlite/sqlite3.c:63015
#5 0x7b3b51 in sqlite3VdbeExec /home/edwin/skylable/sqlite/sqlite3.c:77288
#6 0x4c75f9 in sqlite3Step /home/edwin/skylable/sqlite/sqlite3.c:70639
#7 0x4c62b7 in sqlite3_step /home/edwin/skylable/sqlite/sqlite3.c:70700
#8 0x488bc8 in runSql /home/edwin/skylable/sqlite/test/fuzzcheck.c:617
#9 0x486338 in main /home/edwin/skylable/sqlite/test/fuzzcheck.c:975
#10 0x3452621b44 (/lib/x86_64-linux-gnu/libc.so.6+0x3452621b44)
previously allocated by thread T0 here:
#0 0x46e349 in __interceptor_malloc
/home/edwin/tools/stack/llvm-3.4/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:74
#1 0x575831 in sqlite3MemMalloc /home/edwin/skylable/sqlite/sqlite3.c:17235
#2 0x492fe9 in mallocWithAlarm /home/edwin/skylable/sqlite/sqlite3.c:20909
#3 0x492fe9 in sqlite3Malloc /home/edwin/skylable/sqlite/sqlite3.c:20940
#4 0x50afd7 in pcache1Alloc /home/edwin/skylable/sqlite/sqlite3.c:40705
#5 0x7a9f2c in sqlite3PageMalloc /home/edwin/skylable/sqlite/sqlite3.c:40843
#6 0x7a9f2c in sqlite3BtreeIntegrityCheck
/home/edwin/skylable/sqlite/sqlite3.c:62958
#7 0x7a9f2c in sqlite3VdbeExec /home/edwin/skylable/sqlite/sqlite3.c:77288
#8 0x4c75f9 in sqlite3Step /home/edwin/skylable/sqlite/sqlite3.c:70639
#9 0x4c62b7 in sqlite3_step /home/edwin/skylable/sqlite/sqlite3.c:70700
#10 0x488bc8 in runSql /home/edwin/skylable/sqlite/test/fuzzcheck.c:617
#11 0x486338 in main /home/edwin/skylable/sqlite/test/fuzzcheck.c:975
#12 0x3452621b44 (/lib/x86_64-linux-gnu/libc.so.6+0x3452621b44)
SUMMARY: AddressSanitizer: heap-use-after-free
/home/edwin/skylable/sqlite/sqlite3.c:60141 rebuildPage
Shadow bytes around the buggy address:
0x0c2a8004d700: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c2a8004d710: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c2a8004d720: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c2a8004d730: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c2a8004d740: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
=>0x0c2a8004d750: fd fd fd fd fd fd fd fd[fd]fd fd fd fd fd fd fd
0x0c2a8004d760: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c2a8004d770: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c2a8004d780: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c2a8004d790: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c2a8004d7a0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
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
Heap right redzone: fb
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack partial redzone: f4
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
ASan internal: fe
==10788==ABORTING