New issue
Advanced search Search tips

Issue 920924 link

Starred by 1 user

Issue metadata

Status: Assigned
Owner:
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Mac
Pri: 1
Type: Bug



Sign in to add a comment

Null-dereference READ in base::CommandLine::GetSwitchValueNative

Project Member Reported by ClusterFuzz, Jan 11

Issue description

Detailed report: https://clusterfuzz.com/testcase?key=5652516121083904

Fuzzer: libFuzzer_mediasource_MP2T_AACLC_pipeline_integration_fuzzer
Fuzz target binary: mediasource_MP2T_AACLC_pipeline_integration_fuzzer
Job Type: mac_libfuzzer_chrome_asan
Platform Id: mac

Crash Type: Null-dereference READ
Crash Address: 0x000000000020
Crash State:
  base::CommandLine::GetSwitchValueNative
  base::CommandLine::GetSwitchValueASCII
  media::RendererImpl::RendererImpl
  
Sanitizer: address (ASAN)

Regressed: https://clusterfuzz.com/revisions?job=mac_libfuzzer_chrome_asan&range=621627:621737

Reproducer Testcase: https://clusterfuzz.com/download?testcase_id=5652516121083904

Issue filed automatically.

See https://chromium.googlesource.com/chromium/src/+/master/testing/libfuzzer/reproducing.md for instructions to reproduce this bug locally.
 
Project Member

Comment 1 by ClusterFuzz, Jan 11

Cc: xhw...@chromium.org
Labels: ClusterFuzz-Auto-CC
Automatically adding ccs based on OWNERS file / target commit history.

If this is incorrect, please add ClusterFuzz-Wrong label.
Project Member

Comment 2 by ClusterFuzz, Jan 11

Components: Internals>Core Internals>Media
Labels: Test-Predator-Auto-Components
Automatically applying components based on crash stacktrace and information from OWNERS files.

If this is incorrect, please apply the Test-Predator-Wrong-Components label.
Project Member

Comment 3 by ClusterFuzz, Jan 11

Labels: Test-Predator-Auto-Owner
Owner: w...@chromium.org
Status: Assigned (was: Untriaged)
Automatically assigning owner based on suspected regression changelist https://chromium.googlesource.com/chromium/src/+/773566053973b534e62c83981368c415afec49de (Use LLVMFuzzerInitialize() for media_pipeline_integration_fuzzer init.).

If this is incorrect, please let us know why and apply the Test-Predator-Wrong-CLs label. If you aren't the correct owner for this issue, please unassign yourself as soon as possible so it can be re-triaged.
Status: Started (was: Assigned)
Cc: mmoroz@chromium.org
+mmoroz, hey Max, Wez is seeing junk creep into the command line args after switching to use LLVMFuzzerInitialize(). Is this a known issue?

https://chromium-review.googlesource.com/c/chromium/src/+/1408129
CL that changed the CommandLine initialization was https://chromium-review.googlesource.com/c/chromium/src/+/1404563 and the issue has only been reported under Mac, AFAIK.

Issue is a null deref while looking up a command-line flag; my CL had changed the code from passing null argv+argc to CommandLine to passing the values from LLVMFuzzerInitialize().
I think the majority of the fuzzers just pass (0, nullptr) and that works fine. Maybe something like `base::i18n::InitializeICU()` also needs to be called before that, but anyway initializing with(0, nulltr) should work fine.


Project Member

Comment 8 by bugdroid1@chromium.org, Jan 14

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/5e6b36726e45714acadbe4a81272155ed06340d5

commit 5e6b36726e45714acadbe4a81272155ed06340d5
Author: Wez <wez@chromium.org>
Date: Mon Jan 14 18:20:44 2019

Don't pass LLVMFuzzerInitialize() args to CommandLine.

LLVMFuzzer seems to pass a bad argv, causing CommandLine switch lookup
to null-dereference in some cases.

Speculatively revert to initializing CommandLine with null argv & argc
to determine whether that is the source of the issue.

Bug: 920924,  920461 
Change-Id: Idf689c53be920b15ec6593a66cb5deb4d5708f69
Reviewed-on: https://chromium-review.googlesource.com/c/1408129
Commit-Queue: Wez <wez@chromium.org>
Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#622516}
[modify] https://crrev.com/5e6b36726e45714acadbe4a81272155ed06340d5/media/test/pipeline_integration_fuzzertest.cc

Re #7: I think Dale's question is more why might LLVMFuzzerInitialize() potentially be passing something that would trigger CommandLine to deref null?
`LLVMFuzzerInitialize` just passes the arguments that were passed to the fuzz target (i.e. "-max_total_time=1234 -use_value_profile=1 ./corpus_directory"). I frankly don't know what `base::CommandLine::Init` expects and why some of the arguments (which are certainly sane values, there are no fuzzing inputs in argv) may lead to null derefs in the CMD parser. Sounds like a bug in the parser, though I won't be surprised if some other initialization routine needs to be called before that.

Comment 11 by w...@chromium.org, Jan 16 (6 days ago)

Owner: dalecur...@chromium.org
Status: Assigned (was: Started)
Re #10: ClusterFuzz hasn't closed this out as no longer repro'ing. Since I can't repro this myself (no Mac) can you find an OWNER to take a look, Dale?

Sign in to add a comment