Heap use-after-free via ContentParent::RecvInitStreamFilter
Categories
(WebExtensions :: Request Handling, defect, P2)
Tracking
(firefox-esr7883+ fixed, firefox82 wontfix, firefox83 fixed, firefox84+ fixed)
People
(Reporter: tunnelshade, Assigned: rpl)
Details
(Keywords: csectype-uaf, reporter-external, sec-moderate, Whiteboard: [reporter-external] [client-bounty-form] [verif?][adv-main83+][adv-esr78.5+])
Attachments
(4 files)
76 bytes,
application/octet-stream
|
Details | |
76 bytes,
application/octet-stream
|
Details | |
47 bytes,
text/x-phabricator-request
|
jcristau
:
approval-mozilla-beta+
jcristau
:
approval-mozilla-esr78+
|
Details | Review |
243 bytes,
text/plain
|
Details |
Introduction
While fuzzing ContentParent IPC with a slightly modified harness, I came across a very weird crash. Crash happens during xpcom shutdown, possibly due to refcounting a freed instance via a stale pointer.
Steps
Used fuzzfetch to get latest release fuzzing build to reproduce on stock harness.
$ ./m-r-20201005120340-fuzzing-asan-opt/firefox latest-stock-85713
*** You are running in headless mode.
Running Fuzzer tests...
INFO: Seed: 1293591897
INFO: Loaded 1 modules (1524233 inline 8-bit counters): 1524233 [0x7f76db165038, 0x7f76db2d9241),
INFO: Loaded 1 PC tables (1524233 PCs): 1524233 [0x7f76db2d9248,0x7f76dca1b2d8),
./m-r-20201005120340-fuzzing-asan-opt/firefox: Running 1 inputs 1 time(s) each.
Running: triage-2/latest-stock-85713
Executed triage-2/latest-stock-85713 in 0 ms
***
*** NOTE: fuzzing was not performed, you have only
*** executed the target code on a fixed set of inputs.
***
=================================================================
==560090==ERROR: AddressSanitizer: heap-use-after-free on address 0x604000092a50 at pc 0x7f76d1282502 bp 0x7ffc50927ce0 sp 0x7ffc50927cd8
READ of size 8 at 0x604000092a50 thread T0 (MainThread)
#0 0x7f76d1282501 in operator-- /builds/worker/workspace/obj-build/dist/include/nsISupportsImpl.h:321:34
#1 0x7f76d1282501 in Release /builds/worker/checkouts/gecko/toolkit/components/extensions/webrequest/WebRequestService.h:46:3
#2 0x7f76d1282501 in Release /builds/worker/workspace/obj-build/dist/include/mozilla/RefPtr.h:50:40
#3 0x7f76d1282501 in Release /builds/worker/workspace/obj-build/dist/include/mozilla/RefPtr.h:381:36
#4 0x7f76d1282501 in assign_assuming_AddRef /builds/worker/workspace/obj-build/dist/include/mozilla/RefPtr.h:69:7
#5 0x7f76d1282501 in operator= /builds/worker/workspace/obj-build/dist/include/mozilla/RefPtr.h:168:5
#6 0x7f76d1282501 in mozilla::ClearOnShutdown_Internal::PointerClearer<RefPtr<mozilla::extensions::WebRequestService> >::Shutdown() /builds/worker/workspace/obj-build/dist/include/mozilla/ClearOnShutdown.h:72:13
#7 0x7f76c5846dad in mozilla::KillClearOnShutdown(mozilla::ShutdownPhase) /builds/worker/checkouts/gecko/xpcom/base/ClearOnShutdown.cpp:53:19
#8 0x7f76c5ab3b6d in mozilla::ShutdownXPCOM(nsIServiceManager*) /builds/worker/checkouts/gecko/xpcom/build/XPCOMInit.cpp:662:5
#9 0x7f76d176978d in ~ScopedXPCOM /builds/worker/checkouts/gecko/tools/fuzzing/interface/harness/FuzzerTestHarness.h:106:21
#10 0x7f76d176978d in mozilla::_InitFuzzer::DeinitXPCOM() /builds/worker/checkouts/gecko/tools/fuzzing/interface/harness/FuzzerRunner.cpp:25:23
#11 0x7f76e2351db6 in __run_exit_handlers (/usr/lib/libc.so.6+0x3fdb6)
#12 0x7f76e2351f5d in exit (/usr/lib/libc.so.6+0x3ff5d)
#13 0x55d833a9f4a5 in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) /builds/worker/checkouts/gecko/tools/fuzzing/libfuzzer/FuzzerDriver.cpp
#14 0x7f76d176904f in mozilla::FuzzerRunner::Run(int*, char***) /builds/worker/checkouts/gecko/tools/fuzzing/interface/harness/FuzzerRunner.cpp:75:13
#15 0x7f76d16aa57e in XREMain::XRE_mainStartup(bool*) /builds/worker/checkouts/gecko/toolkit/xre/nsAppRunner.cpp:3851:35
#16 0x7f76d16bb268 in XREMain::XRE_main(int, char**, mozilla::BootstrapConfig const&) /builds/worker/checkouts/gecko/toolkit/xre/nsAppRunner.cpp:4941:12
#17 0x7f76d16bc0b3 in XRE_main(int, char**, mozilla::BootstrapConfig const&) /builds/worker/checkouts/gecko/toolkit/xre/nsAppRunner.cpp:5008:21
#18 0x55d833921f97 in do_main /builds/worker/checkouts/gecko/browser/app/nsBrowserApp.cpp:217:22
#19 0x55d833921f97 in main /builds/worker/checkouts/gecko/browser/app/nsBrowserApp.cpp:331:16
#20 0x7f76e233a151 in __libc_start_main (/usr/lib/libc.so.6+0x28151)
#21 0x55d833876309 in _start (/home/tunnelshade/workspace/firefox/m-r-20201005120340-fuzzing-asan-opt/firefox+0xa4309)
0x604000092a50 is located 0 bytes inside of 48-byte region [0x604000092a50,0x604000092a80)
freed by thread T0 (MainThread) here:
#0 0x55d8338eea3d in free /builds/worker/fetches/llvm-project/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:123:3
#1 0x7f76e2351db6 in __run_exit_handlers (/usr/lib/libc.so.6+0x3fdb6)
previously allocated by thread T0 (MainThread) here:
#0 0x55d8338eecbd in malloc /builds/worker/fetches/llvm-project/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:145:3
#1 0x55d833924dad in moz_xmalloc /builds/worker/checkouts/gecko/memory/mozalloc/mozalloc.cpp:52:15
#2 0x7f76d125d20c in operator new /builds/worker/workspace/obj-build/dist/include/mozilla/cxxalloc.h:33:10
#3 0x7f76d125d20c in mozilla::extensions::WebRequestService::GetSingleton() /builds/worker/checkouts/gecko/toolkit/components/extensions/webrequest/WebRequestService.cpp:23:16
#4 0x7f76d126c56c in mozilla::extensions::StreamFilterParent::Create(mozilla::dom::ContentParent*, unsigned long, nsTSubstring<char16_t> const&) /builds/worker/checkouts/gecko/toolkit/components/extensions/webrequest/StreamFilterParent.cpp:116:18
#5 0x7f76cd3d2a35 in mozilla::dom::ContentParent::RecvInitStreamFilter(unsigned long const&, nsTString<char16_t> const&, std::function<void (mozilla::ipc::Endpoint<mozilla::extensions::PStreamFilterChild>&&)>&&) /builds/worker/checkouts/gecko/dom/ipc/ContentParent.cpp:3903:3
#6 0x7f76c710cd54 in mozilla::dom::PContentParent::OnMessageReceived(IPC::Message const&) /builds/worker/workspace/obj-build/ipc/ipdl/PContentParent.cpp:7626:57
#7 0x7f76c529dbc3 in void mozilla::ipc::FuzzProtocol<mozilla::dom::ContentParent>(mozilla::dom::ContentParent*, unsigned char const*, unsigned long, nsTArray<nsTString<char> > const&) /builds/worker/workspace/obj-build/dist/include/ProtocolFuzzer.h:99:18
#8 0x7f76c529d038 in RunContentParentIPCFuzzing(unsigned char const*, unsigned long) /builds/worker/checkouts/gecko/dom/ipc/fuzztest/content_parent_ipc_libfuzz.cpp:27:3
#9 0x55d833aafa2e in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) /builds/worker/checkouts/gecko/tools/fuzzing/libfuzzer/FuzzerLoop.cpp:562:11
#10 0x55d833a99d0e in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*, unsigned long) /builds/worker/checkouts/gecko/tools/fuzzing/libfuzzer/FuzzerDriver.cpp:301:6
#11 0x55d833a9f441 in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) /builds/worker/checkouts/gecko/tools/fuzzing/libfuzzer/FuzzerDriver.cpp:802:9
#12 0x7f76d176904f in mozilla::FuzzerRunner::Run(int*, char***) /builds/worker/checkouts/gecko/tools/fuzzing/interface/harness/FuzzerRunner.cpp:75:13
#13 0x7f76d16aa57e in XREMain::XRE_mainStartup(bool*) /builds/worker/checkouts/gecko/toolkit/xre/nsAppRunner.cpp:3851:35
#14 0x7f76d16bb268 in XREMain::XRE_main(int, char**, mozilla::BootstrapConfig const&) /builds/worker/checkouts/gecko/toolkit/xre/nsAppRunner.cpp:4941:12
#15 0x7f76d16bc0b3 in XRE_main(int, char**, mozilla::BootstrapConfig const&) /builds/worker/checkouts/gecko/toolkit/xre/nsAppRunner.cpp:5008:21
#16 0x55d833921f97 in do_main /builds/worker/checkouts/gecko/browser/app/nsBrowserApp.cpp:217:22
#17 0x55d833921f97 in main /builds/worker/checkouts/gecko/browser/app/nsBrowserApp.cpp:331:16
#18 0x7f76e233a151 in __libc_start_main (/usr/lib/libc.so.6+0x28151)
SUMMARY: AddressSanitizer: heap-use-after-free /builds/worker/workspace/obj-build/dist/include/nsISupportsImpl.h:321:34 in operator--
Shadow bytes around the buggy address:
0x0c088000a4f0: fa fa 00 00 00 00 00 00 fa fa 00 00 00 00 00 00
0x0c088000a500: fa fa 00 00 00 00 00 00 fa fa 00 00 00 00 00 00
0x0c088000a510: fa fa 00 00 00 00 00 00 fa fa 00 00 00 00 00 06
0x0c088000a520: fa fa 00 00 00 00 00 06 fa fa 00 00 00 00 00 06
0x0c088000a530: fa fa 00 00 00 00 00 fa fa fa fd fd fd fd fd fd
=>0x0c088000a540: fa fa fd fd fd fd fd fa fa fa[fd]fd fd fd fd fd
0x0c088000a550: fa fa 00 00 00 00 00 fa fa fa fd fd fd fd fd fa
0x0c088000a560: fa fa fd fd fd fd fd fa fa fa fd fd fd fd fd fa
0x0c088000a570: fa fa fd fd fd fd fd fa fa fa 00 00 00 00 00 00
0x0c088000a580: fa fa fd fd fd fd fd fa fa fa 00 00 00 00 00 fa
0x0c088000a590: fa fa 00 00 00 00 00 fa fa fa fd fd fd fd fd fa
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
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc
==560090==ABORTING
Speculative Root Cause
Ref counting on a stale reference to WebRequestService
object during xpcom shutdown. I am not sure if this can be reproduced in a running browser instance and not just the fuzzing harness.
Updated•4 years ago
|
Comment 1•4 years ago
|
||
maybe sec-moderate in the worst case? I think the extension process would only shut down at browser shut down which doesn't seem very useful even if this does happen to be exploitable.
Comment 2•4 years ago
|
||
I am unable to reproduce the issue with the attached test case and the latest m-c build using the stock ContentParentIPC harness.
Reporter | ||
Comment 3•4 years ago
|
||
I retested against latest central. I have included a poc for this specific build.
[2020-10-09 12:00:40] > Task ID: YeeNhNmkR5Wn3mxOe0R79A
[2020-10-09 12:00:40] > Rank: 1602217074
[2020-10-09 12:00:40] > Changeset: 600f47bbfeb2b8dd8feb52dc9b0df0c72e01da9e
[2020-10-09 12:00:40] > Build ID: 20201009041754
Attachment: 600f47bbfeb2b8dd8feb52dc9b0df0c72e01da9e-m-c
For every different build, messageId changes. So need to change that in poc too.
Reporter | ||
Comment 4•4 years ago
|
||
Comment 5•4 years ago
|
||
Thank you, I have successfully reproduced the issue.
A Pernosco session is available here: https://pernos.co/debug/kbopJ9xgR8m1MMFBUCk-6A/index.html
Assignee | ||
Comment 6•4 years ago
|
||
It looks that the WebRequestService RefPtr is initially created by a call to ContentParent::RecvInitStreamFilter
released, after that point no additional references are added to that RefPtr because we are just returning a reference to the *sWeakWebRequestService
.
When the FuzzerDriver.cpp is exiting here: https://searchfox.org/mozilla-central/rev/c2e3ac11be4837718c2604e58085fbc8252b69dd/tools/fuzzing/libfuzzer/FuzzerDriver.cpp#812, the last reference to the WebRequestService RefPtr is released and right after that the WebRequestService destructor is executed.
The use after free seems to be triggered while executing NS_ShutdownXPCOM, which is due to ClearOnShutdown:
- in WebRequestService::GetSingleton we are passing to ClearOnshutdown the pointer to the same RefPtr that has been released when the FuzzerDriver.cpp does exit): https://searchfox.org/mozilla-central/rev/c2e3ac11be4837718c2604e58085fbc8252b69dd/toolkit/components/extensions/webrequest/WebRequestService.cpp#24
I have the feeling that this may not be something that would happen outside of the fuzzing harness, I would expect NS_ShutdownXPCOM to be called before exiting the process in a regular browser instance not running under the fuzzing harness.
Assignee | ||
Comment 7•4 years ago
|
||
Hi Christian Holler (or Tyson or tunnelshade),
does the rationale in comment 6 make sense from your perspective?
we'll wait your confirmation before setting a severity and priority on this issue.
Besides that, is it possible to reproduce this issue locally? (e.g. is there a doc page to provide guidance on reproducing fuzzing tests locally?)
Assignee | ||
Comment 8•4 years ago
|
||
clearing needinfo assigned to Shane, while we are looking into it.
Comment 9•4 years ago
|
||
(In reply to Luca Greco [:rpl] [:luca] [:lgreco] from comment #6)
I have the feeling that this may not be something that would happen outside of the fuzzing harness, I would expect NS_ShutdownXPCOM to be called before exiting the process in a regular browser instance not running under the fuzzing harness.
Yes, this is very much possible and we had similar problems with the ContentParentIPC and other IPC fuzzing targets before.
We do register an at-exit handler because of that exit
call in libFuzzer here:
Do you think that DeinitXPCOM
method needs a call to NS_ShutdownXPCOM
?
Assignee | ||
Comment 10•4 years ago
•
|
||
(In reply to Christian Holler (:decoder) from comment #9)
(In reply to Luca Greco [:rpl] [:luca] [:lgreco] from comment #6)
I have the feeling that this may not be something that would happen outside of the fuzzing harness, I would expect NS_ShutdownXPCOM to be called before exiting the process in a regular browser instance not running under the fuzzing harness.
Yes, this is very much possible and we had similar problems with the ContentParentIPC and other IPC fuzzing targets before.
We do register an at-exit handler because of that
exit
call in libFuzzer here:Do you think that
DeinitXPCOM
method needs a call toNS_ShutdownXPCOM
?
Unfortunately I'm not really that much experienced on how xpcom shutdown sequence, and so I should definitely like to double-check it with something that has more direct knowledge about those pieces, but in the meantime I took a look to get an initial picture and if I'm not reading it wrong I think that DeinitXPCOM
should be already calling NS_ShutdownXPCOM
.
Would you mind to double-check if any of the following details are not right?
- the ScopedXPCOM class used by InitLibFuzzer is the one defined in FuzzerTestHarness.h here: https://searchfox.org/mozilla-central/rev/61728de8273c04fe2417c475fc0637e8b79210d7/tools/fuzzing/interface/harness/FuzzerTestHarness.h#59
- at-exit FuzzerRunner.cpp calls DeinitXPCOM, which does call InitLibFuzzer.DeinitXPCOM()
- InitLibFuzzer.DeinitXPCOM() does then destroy the ScopedXPCOM instance, which will invoke its destructor
- The FuzzerTestHarness.h's ScopedXPCOM destructor should already be calling NS_ShutdownXPCOM here: https://searchfox.org/mozilla-central/rev/61728de8273c04fe2417c475fc0637e8b79210d7/tools/fuzzing/interface/harness/FuzzerTestHarness.h#106
- and NS_ShutdownXPCOM should be executing all the ClearOnShutdown's pointers added to the
sShutdownObservers
list of shutdown observers here: https://searchfox.org/mozilla-central/rev/61728de8273c04fe2417c475fc0637e8b79210d7/xpcom/build/XPCOMInit.cpp#656-660
I did want to also double-check if the pernosco trace linked in comment 5 does confirm that the sequence described above is actually consistent with what is really happening during the fuzzy test shutdown, but I couldn't load successfully the Pernosco trace (I already asked in the Pernosco support channel about the issue I'm having on loading this trace, but I'll try to take another look if I can get access to the trace again).
Assignee | ||
Comment 11•4 years ago
|
||
(In reply to Christian Holler (:decoder) from comment #9)
Do you think that DeinitXPCOM method needs a call to NS_ShutdownXPCOM ?
The pernosco trace linked in comment 10 has been restored and so I did take another look:
-
the sequence described in comment 10 looks about right:
FuzzerRunner
is definitely callingNS_ShutdownXPCOM
(and it does callClearOnShutdown
as expected, and this is actually where we are triggering the use after free when the fuzz test is exiting). -
the only RefPtr<WebRequestService> reference has got added by the following call stack:
fuzzer::FuzzerDriver () at FuzzerDriver.cpp:802
fuzzer::RunOneTest () at FuzzerDriver.cpp:301
::Fuzzer::ExecuteCallback () at FuzzerLoop.cpp:562
RunContentParentIPCFuzzing () at content_parent_ipc_libfuzz.cpp:27
mozilla::ipc::FuzzProtocol<> () at ProtocolFuzzer.h:99
::PContentParent::OnMessageReceived () at PContentParent.cpp:7978
::ContentParent::RecvInitStreamFilter () at ContentParent.cpp:4041
::StreamFilterParent::Create () at StreamFilterParent.cpp:116
::WebRequestService::GetSingleton () at WebRequestService.cpp:23
FuzzerDriver
call does exit beforeFuzzerRunner
and so theNS_ShutdownXPCOM
call from theFuzzerRunner
's exit handler is being called after theFuzzerDriver
exit handlers did already release the last (and only) reference to theRefPtr<WebRequestService>
reference
I did also take a look to the reasons behind that static WebRequestService* sWeakWebRequestService
:
- it seems that we added that in this patch https://hg.mozilla.org/mozilla-central/rev/c6425c1515d1 to fix an issue with the" destructor ordering issue" tracked by Bug 1396652
- there are some details about the rationale in https://bugzilla.mozilla.org/show_bug.cgi?id=1396652#c7,
- Bug 1396652 and the comment linked above do sound interesting and relevant, given that this issue is also a "destructor ordering issue"
It seems also something to take into account if we do plan to make changes to WebRequestService (in particular to make sure we don't reintroduce the issue that was tracked by Bug 1396652).
Assignee | ||
Comment 12•4 years ago
|
||
Looking into other places in mozilla-central where we are using ClearOnShutdown
, as well as looking to the inline comment right above ClearOnShutdown definition here:
Although ClearOnShutdown will work with any smart pointer (i.e., nsCOMPtr, RefPtr, StaticRefPtr, and StaticAutoPtr),
you probably want to use it only with StaticRefPtr and StaticAutoPtr.
There is no way to undo a call to ClearOnShutdown, so you can call it only on smart pointers which you know will live until the program shuts down.
In practice, these are likely global variables, which should be Static{Ref,Auto}Ptr.
I'm wondering if static RefPtr<WebRequestService> instance
should actually be changed to static StaticRefPtr<WebRequestService> instance
(e..g. similarly to what we are doing in dom/indexedDB/ActorsParentCommon.cpp here), but that is something to double-check (if it would be technically correct and if it would make any actual difference for the issue triggered by the fuzzer test harness) with someone that does have more direct knowledge than me about CleanOnShutdown
and StaticRefPtr
, before make any actual plan to make any change to that.
Looking to the mercurial logs maybe :glandium would be able to help on double-checking that.
Comment 13•4 years ago
|
||
Mike, what are your thoughts on the proposed change in comment 12?
Comment 14•4 years ago
|
||
100% static RefPtr<>
is not good. We had a discussion recently with Nika about these sort of things. It would seem like we really should do some static analysis on this pattern, because that's not the only place where this is happening.
That said, with a combination of static StaticRefPtr
and ClearOnShutdown
, I would still expect things to be able to go wrong. In fact, as far as destructors are concerned, static RefPtr
shouldn't be different from static StaticRefPtr
given we don't unload libxul anymore.
Assignee | ||
Comment 15•4 years ago
|
||
Updated•4 years ago
|
Assignee | ||
Comment 16•4 years ago
|
||
Clearing old needinfo: in the meantime I have attached a patch with a proposed change to fix the issue on the WebRequestService side (and verified locally that with those changes applied the fuzzy asan crash isn't triggered anymore, some additional detail in this comment on phabricator: https://phabricator.services.mozilla.com/D94692#3053969).
Updated•4 years ago
|
![]() |
||
Comment 17•4 years ago
|
||
https://hg.mozilla.org/integration/autoland/rev/8de8cd3371e801d408650f102df04252c846f33d
https://hg.mozilla.org/mozilla-central/rev/8de8cd3371e8
Comment 18•4 years ago
|
||
This grafts cleanly to Beta & ESR78. Is this something we should consider for uplift?
Assignee | ||
Comment 19•4 years ago
|
||
(In reply to Ryan VanderMeulen [:RyanVM] from comment #18)
This grafts cleanly to Beta & ESR78. Is this something we should consider for uplift?
Honestly I'm not sure if this can be really (and easily) triggered in a real browser instance and be easily exploitable (I also tried to reproduce it with a small gtest and I wasn't able to trigger it).
I fixed it sooner rather than later mainly because I think that this issue may prevent the fuzzy tests to be able to catch other potential issues (because if this one is triggered the run crash and may miss other ones), and for that I guess that having it on Nightly may be enough.
Nevertheless, (after it did bake a bit on Nightly) I would not be against to uplift it if we want to, the risk of regressions should be low.
Let's see what is :dveditz opinion about uplifting it.
Updated•4 years ago
|
Comment 20•4 years ago
|
||
The patch landed in nightly and beta is affected.
:rpl, is this bug important enough to require an uplift?
If not please set status_beta
to wontfix
.
For more information, please visit auto_nag documentation.
Assignee | ||
Comment 21•4 years ago
|
||
Re-assigning the needinfo request (the question is in comment 19) as agreed over slack with Daniel.
Comment 22•4 years ago
|
||
Given the simple fix, that equally clearly announces which object gets prematurely freed, it would be safer to uplift this than not.
Assignee | ||
Comment 23•4 years ago
|
||
(In reply to Daniel Veditz [:dveditz] from comment #22)
Given the simple fix, that equally clearly announces which object gets prematurely freed, it would be safer to uplift this than not.
Thanks Daniel, I see your point and uplifting the fix does sound good to me too.
Assignee | ||
Comment 24•4 years ago
|
||
Comment on attachment 9183660 [details]
Bug 1669466 - Change WebRequestService singleton to a StaticRefPtr. r=glandium!,mixedpuppy!
Beta/Release Uplift Approval Request
- User impact if declined: The issue to be leveraged for an exploit (if that turns out to be doable).
- Is this code covered by automated tests?: Yes
- Has the fix been verified in Nightly?: Yes
- Needs manual test from QE?: No
- If yes, steps to reproduce: I've not been able to find an easy way to reproduce the issue outside of the fuzzy tests. I did verify the fix by applying the changes to a mozilla-central clone checked out on the same version used to run the fuzzy test and collect the data attached to the bug.
- List of other uplifts needed: None
- Risk to taking this patch: Low
- Why is the change risky/not risky? (and alternatives if risky): - the actual change is small and trivial
- all the existing tests does pass successfully
- verified fuzzy test failure is fixed on a local build
- the fix did bake on nightly a bit (and we are not aware of any new issue related to this been reported on bugzilla so far)
- String changes made/needed:
Assignee | ||
Comment 25•4 years ago
|
||
Comment on attachment 9183660 [details]
Bug 1669466 - Change WebRequestService singleton to a StaticRefPtr. r=glandium!,mixedpuppy!
ESR Uplift Approval Request
- If this is not a sec:{high,crit} bug, please state case for ESR consideration: Security expressed in favor of uplifting it (See https://bugzilla.mozilla.org/show_bug.cgi?id=1669466#c22)
- User impact if declined: The issue to be leveraged for an exploit (if that turns out to be doable).
- Fix Landed on Version: 84
- Risk to taking this patch: Low
- Why is the change risky/not risky? (and alternatives if risky): risk set to low for the following reasons:
- the actual change is small and trivial (and the code changed and the directly surrounding code didn't change much from the version in Firefox 78, the context and rationale for the change as described in the phabricator comments do also apply unchanged to Firefox 78)
- all the existing tests does pass successfully
- verified fuzzy test failure is fixed on a local build
- the fix did bake on nightly a bit (and we are not aware of any new issue related to this been reported on bugzilla so far)
- String or UUID changes made by this patch:
Updated•4 years ago
|
Comment 26•4 years ago
|
||
Comment on attachment 9183660 [details]
Bug 1669466 - Change WebRequestService singleton to a StaticRefPtr. r=glandium!,mixedpuppy!
approved for 83.0b9 and 78.5esr
Comment 27•4 years ago
|
||
uplift |
Comment 28•4 years ago
|
||
uplift |
Updated•4 years ago
|
Comment 29•4 years ago
|
||
Updated•4 years ago
|
Updated•4 years ago
|
Updated•4 years ago
|
Updated•9 months ago
|
Description
•