New issue
Advanced search Search tips

Issue 716310 link

Starred by 1 user

Issue metadata

Status: WontFix
Owner:
Closed: Jul 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , Android , Windows , Chrome , Mac
Pri: 2
Type: Bug-Security



Sign in to add a comment

Security : SEGV on unknown address 0x601ffe000c90 in Skia filter

Reported by sweetv...@gmail.com, Apr 28 2017

Issue description

VULNERABILITY DETAILS

This bug is related to  crbug.com/705008 

Clusterfuzz said that this bug is fixed but It can be reproduced on latest filter_fuzz_stub.

./filter_fuzz_stub ./poc_segv.fil 
[0428/121114.949826:INFO:filter_fuzz_stub.cc(59)] Test case: ./poc_segv.fil
[0428/121114.950304:INFO:filter_fuzz_stub.cc(36)] Valid stream detected.
ASAN:DEADLYSIGNAL
=================================================================
==32101==ERROR: AddressSanitizer: SEGV on unknown address 0x601ffe000c90 (pc 0x00000083d182 bp 0x7fff7b2b9fd0 sp 0x7fff7b2b9fa0 T0)
==32101==The signal is caused by a READ memory access.
    #0 0x83d181 in unaligned_load<unsigned char, unsigned char> third_party/skia/src/jumper/SkJumper_misc.h:21:5
    #1 0x83d181 in load<unsigned char, unsigned char> third_party/skia/src/jumper/SkJumper_stages.cpp:180
    #2 0x83d181 in load_a8_k third_party/skia/src/jumper/SkJumper_stages.cpp:678
    #3 0x83d181 in sk_load_a8 third_party/skia/src/jumper/SkJumper_stages.cpp:674
    #4 0x8380b2 in sk_start_pipeline third_party/skia/src/jumper/SkJumper_stages.cpp:131:13
    #5 0x837b89 in operator() third_party/skia/src/jumper/SkJumper.cpp:179:17
    #6 0x837b89 in SkRasterPipeline::run(unsigned long, unsigned long) const third_party/skia/src/jumper/SkJumper.cpp:211
    #7 0x7bca60 in vertline third_party/skia/src/core/SkScan_Hairline.cpp:30:18
    #8 0x7bca60 in SkScan::HairLineRgn(SkPoint const*, int, SkRegion const*, SkBlitter*) third_party/skia/src/core/SkScan_Hairline.cpp:139
    #9 0x7c4c26 in hair_quad third_party/skia/src/core/SkScan_Hairline.cpp:240:5
    #10 0x7c4c26 in hairquad third_party/skia/src/core/SkScan_Hairline.cpp:288
    #11 0x7c4c26 in void hair_path<(SkPaint::Cap)1>(SkPath const&, SkRasterClip const&, SkBlitter*, void (*)(SkPoint const*, int, SkRegion const*, SkBlitter*)) third_party/skia/src/core/SkScan_Hairline.cpp:557
    #12 0x67e31a in SkDraw::drawDevPath(SkPath const&, SkPaint const&, bool, SkBlitter*, bool) const third_party/skia/src/core/SkDraw.cpp:1070:5
    #13 0x67ef7b in SkDraw::drawPath(SkPath const&, SkPaint const&, SkMatrix const*, bool, bool, SkBlitter*) const third_party/skia/src/core/SkDraw.cpp:1163:11
    #14 0xe4d77a in drawPath third_party/skia/src/core/SkDraw.h:60:15
    #15 0xe4d77a in SkLayerRasterizer::onRasterize(SkPath const&, SkMatrix const&, SkIRect const*, SkMask*, SkMask::CreateMode) const third_party/skia/src/effects/SkLayerRasterizer.cpp:140
    #16 0x75935a in SkRasterizer::rasterize(SkPath const&, SkMatrix const&, SkIRect const*, SkMaskFilter*, SkMask*, SkMask::CreateMode) const third_party/skia/src/core/SkRasterizer.cpp:33:18
    #17 0x67eeca in SkDraw::drawPath(SkPath const&, SkPaint const&, SkMatrix const*, bool, bool, SkBlitter*) const third_party/skia/src/core/SkDraw.cpp:1148:37
    #18 0x67c652 in drawPath third_party/skia/src/core/SkDraw.h:55:15
    #19 0x67c652 in SkDraw::drawRect(SkRect const&, SkPaint const&, SkMatrix const*, SkRect const*) const third_party/skia/src/core/SkDraw.cpp:798
    #20 0xc5bdeb in drawRect third_party/skia/src/core/SkDraw.h:41:15
    #21 0xc5bdeb in SkBitmapDevice::drawRect(SkRect const&, SkPaint const&) third_party/skia/src/core/SkBitmapDevice.cpp:205
    #22 0x56bf8a in SkCanvas::onDrawRect(SkRect const&, SkPaint const&) third_party/skia/src/core/SkCanvas.cpp:2047:27
    #23 0xebef9b in SkPaintImageFilter::onFilterImage(SkSpecialImage*, SkImageFilter::Context const&, SkIPoint*) const third_party/skia/src/effects/SkPaintImageFilter.cpp:65:13
    #24 0x69ad49 in SkImageFilter::filterImage(SkSpecialImage*, SkImageFilter::Context const&, SkIPoint*) const third_party/skia/src/core/SkImageFilter.cpp:216:40
    #25 0xc5f1db in SkBitmapDevice::drawSpecial(SkSpecialImage*, int, int, SkPaint const&) third_party/skia/src/core/SkBitmapDevice.cpp:406:49
    #26 0x55ce24 in SkCanvas::internalDrawDevice(SkBaseDevice*, int, int, SkPaint const*) third_party/skia/src/core/SkCanvas.cpp:1330:25
    #27 0x5589c1 in SkCanvas::internalRestore() third_party/skia/src/core/SkCanvas.cpp:1221:19
    #28 0x5752d9 in ~AutoDrawLooper third_party/skia/src/core/SkCanvas.cpp:506:22
    #29 0x5752d9 in SkCanvas::onDrawBitmap(SkBitmap const&, float, float, SkPaint const*) third_party/skia/src/core/SkCanvas.cpp:2331
    #30 0x4f81d3 in RunTestCase skia/tools/filter_fuzz_stub/filter_fuzz_stub.cc:46:13
    #31 0x4f81d3 in ReadAndRunTestCase skia/tools/filter_fuzz_stub/filter_fuzz_stub.cc:65
    #32 0x4f81d3 in main skia/tools/filter_fuzz_stub/filter_fuzz_stub.cc:84
    #33 0x7f1bc9a6382f in __libc_start_main /build/glibc-9tT8Do/glibc-2.23/csu/../csu/libc-start.c:291

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV third_party/skia/src/jumper/SkJumper_misc.h:21:5 in unaligned_load<unsigned char, unsigned char>
==32101==ABORTING

VERSION
Chrome Version: asan-linux-release-467762
Operating System:
 - Ubuntu 16.04.1 LTS 64bit (Server)
 - Linux ubuntu 4.4.0-65-generic #86-Ubuntu SMP Thu Feb 23 17:49:58 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

REPRODUCTION CASE
./filter_fuzz_stub ./poc_segv.fil
 
poc_segv.fil
460 bytes Download
Project Member

Comment 1 by ClusterFuzz, Apr 28 2017

ClusterFuzz is analyzing your testcase. Developers can follow the progress at https://cluster-fuzz.appspot.com/testcase?key=6688014890958848

Comment 2 by palmer@chromium.org, Apr 28 2017

Components: Internals>Skia
Labels: Security_Severity-Medium Security_Impact-Head OS-Android OS-Chrome OS-Linux OS-Mac OS-Windows Pri-1
Owner: hcm@chromium.org
Status: Assigned (was: Unconfirmed)
The top of the stack looks like very recent code.
Project Member

Comment 3 by sheriffbot@chromium.org, Apr 29 2017

Labels: M-60
Project Member

Comment 4 by sheriffbot@chromium.org, Apr 29 2017

Labels: ReleaseBlock-Beta
This issue is a security regression. If you are not able to fix this quickly, please revert the change that introduced it.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot

Comment 5 by hcm@chromium.org, May 1 2017

Cc: hcm@chromium.org
Owner: mtklein@chromium.org
Over to Mike for a look since this goes a little ways into Jumper code...
Cc: reed@google.com
Does this build configuration answer true to __has_feature(memory_sanitizer)?  I see it says ASAN all over the place, but it's pretty unusual for an x86-64 machine to take this particular path unless it's using MSAN.  (You'd see _sse2, _sse41, _avx, or _hsw suffixes on the various sk_foo() functions normally, and they'd be from SkJumper_generated.S.)  Come to think of it, I may never have explicitly profiled an ASAN, but reading the code in SkJumper.cpp I'd think it'd just use the uninstrumented assembly normally.

That said, this particular unusual path is sort of the trivial case where there are unlikely to be serious bugs inside SkJumper.  That a8 load ends up as simple as *(*(const uint8_t** ptr)).  If we're getting all the way down to unaligned_load(), the const uint8_t** has been dereferenced and is likely correct, and it's a problem with the underlying const uint8_t*.  This is probably a geometric issue higher up in the pipeline, somewhere in the #7-#11 range, or maybe higher still?

I suspect that this is not new per se, just newly going down this path.  Same distal bug, new proximal segfault?
Project Member

Comment 7 by ClusterFuzz, May 5 2017

ClusterFuzz is analyzing your testcase. Developers can follow the progress at https://cluster-fuzz.appspot.com/testcase?key=6364378508296192
Project Member

Comment 8 by ClusterFuzz, May 5 2017

ClusterFuzz is analyzing your testcase. Developers can follow the progress at https://cluster-fuzz.appspot.com/testcase?key=6340766925586432
Project Member

Comment 9 by ClusterFuzz, May 5 2017

ClusterFuzz is analyzing your testcase. Developers can follow the progress at https://cluster-fuzz.appspot.com/testcase?key=5294513160716288

Comment 10 by aarya@google.com, May 5 2017

Regarding c#6, it does not crash on MSAN, only on ASAN 64-bit and 32-bit builds, see c#7, c#8, c#9 testcases.
Ah, good, I got myself confused.  If the crash is under SkJumper.cpp:211, it's expected to be in the serial code.  Must be a machine that doesn't support AVX...

Comment 12 by hcm@google.com, May 18 2017

Cc: -reed@google.com mtklein@chromium.org
Labels: -ReleaseBlock-Beta
Owner: reed@google.com
If this is happening in the hairline (or earlier) setup code, very unlikely a regression. Removing RB label, reassign to reed@, potentially with help from mtklein@
Project Member

Comment 13 by sheriffbot@chromium.org, May 19 2017

reed: Uh oh! This issue still open and hasn't been updated in the last 21 days. This is a serious vulnerability, and we want to ensure that there's progress. Could you please leave an update with the current status and any potential blockers?

If you're not the right owner for this issue, could you please remove yourself as soon as possible or help us find the right one?

If the issue is fixed or you can't reproduce it, please close the bug. If you've started working on a fix, please set the status to Started.

Thanks for your time! To disable nags, add the Disable-Nags label.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
Project Member

Comment 14 by sheriffbot@chromium.org, May 19 2017

Labels: ReleaseBlock-Beta
This issue is a security regression. If you are not able to fix this quickly, please revert the change that introduced it.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot

Comment 15 by hcm@chromium.org, May 19 2017

Labels: -ReleaseBlock-Beta
man vs machine
Project Member

Comment 16 by sheriffbot@chromium.org, May 20 2017

Labels: ReleaseBlock-Beta
This issue is a security regression. If you are not able to fix this quickly, please revert the change that introduced it.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot

Comment 17 by hcm@chromium.org, May 22 2017

Labels: -ReleaseBlock-Beta
Project Member

Comment 18 by sheriffbot@chromium.org, May 23 2017

Labels: ReleaseBlock-Beta
This issue is a security regression. If you are not able to fix this quickly, please revert the change that introduced it.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
Labels: -ReleaseBlock-Beta Disable-Nags
Labels: -Pri-1 Pri-2
Project Member

Comment 21 by sheriffbot@chromium.org, May 24 2017

Labels: ReleaseBlock-Beta
This issue is a security regression. If you are not able to fix this quickly, please revert the change that introduced it.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot

Comment 22 by aarya@google.com, May 25 2017

Labels: -ReleaseBlock-Beta ReleaseBlock-NA
Project Member

Comment 23 by sheriffbot@chromium.org, Jun 6 2017

Labels: -Security_Impact-Head Security_Impact-Beta
Project Member

Comment 24 by ClusterFuzz, Jul 6 2017

Status: WontFix (was: Assigned)
ClusterFuzz testcase 5294513160716288 is flaky and no longer reproduces, so closing issue.

If this is incorrect, please add ClusterFuzz-Wrong label and re-open the issue.
Project Member

Comment 25 by sheriffbot@chromium.org, Oct 13 2017

Labels: -Restrict-View-SecurityTeam allpublic
This bug has been closed for more than 14 weeks. Removing security view restrictions.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
Cc: kjlubick@chromium.org kjlubick@google.com

Sign in to add a comment