v8/test/inspector/regress
Simon Zünd 699147d17f [inspector] Fix user-after-free bug around async evaluations
This CL fixes a use-after-free bug where we try to access an
`InjectedScript` object after it died. This can happen when we
transition into JS and back and the context group dies in the mean
time (e.g. because of a navigation). Normally we check for this but
we missed a call to `Promise#then`.

The access that triggers the UaF is when we try to stash away the
protocol callback function after returning from `Promise#then`.
The callback function is responsible for sending the protocol
response back to DevTools containing the result of the evaluation.

There are two objects with different lifetimes involved:

  - InjectedScript: Owns the `EvaluationCallback`. We keep a
    a reference in case the context group dies. This allows us to
    cancel any pending evaluate requests.

  - ProtocolPromiseHandler: Has a reference to `EvaluationCallback`.
    The handler itself is managed by the V8 GC via `v8::External`
    and a weak `v8::Global`.

When the `ProtocolPromiseHandler` wants use the callback to send
a response, it needs to take ownership first.

We could invert the ownership but it's preferable for evaluation
callbacks to die together with execution contexts and not when the
GC feels like it.

We fix the UaF by using an `InjectedSript::ContextScope` and reloading
the `InjectedScript` after we return from `Promise#then`. Then
we can take proper ownership of the callback and use it in case the
call failed.

R=jarin@chormium.org

Fixed: chromium:1366843
Change-Id: I3a68e8609a9681d7343c71f43cc6e67064f41530
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3925937
Reviewed-by: Jaroslav Sevcik <jarin@chromium.org>
Commit-Queue: Simon Zünd <szuend@chromium.org>
Cr-Commit-Position: refs/heads/main@{#83506}
2022-10-04 06:21:23 +00:00
..
regress-crbug-980018-expected.txt [inspector] Improve class name inference. 2021-10-19 11:40:06 +00:00
regress-crbug-980018.js [inspector] Improve class name inference. 2021-10-19 11:40:06 +00:00
regress-crbug-1080638-expected.txt
regress-crbug-1080638.js
regress-crbug-1081162-expected.txt [inspector] Derive breakpoint hint based on resolved location. 2021-05-19 14:46:57 +00:00
regress-crbug-1081162.js [inspector] Derive breakpoint hint based on resolved location. 2021-05-19 14:46:57 +00:00
regress-crbug-1147552-expected.txt
regress-crbug-1147552.js
regress-crbug-1183664-expected.txt [inspector] Properly filter by column number for inline scripts. 2021-03-11 08:52:25 +00:00
regress-crbug-1183664.js [inspector] Properly filter by column number for inline scripts. 2021-03-11 08:52:25 +00:00
regress-crbug-1195927-expected.txt [inspector] Introduce status result for Debugger.setScriptSource 2022-06-09 12:18:32 +00:00
regress-crbug-1195927.js [debug] Disallow LiveEdit of active frames. 2021-04-28 13:00:19 +00:00
regress-crbug-1197392-expected.txt [inspector] Validate samplingInterval in HeapProfiler.startSampling 2021-05-12 12:11:31 +00:00
regress-crbug-1197392.js [inspector] Validate samplingInterval in HeapProfiler.startSampling 2021-05-12 12:11:31 +00:00
regress-crbug-1199919-expected.txt [debugger] Don't attach source positions to implicit returns. 2021-04-30 12:33:29 +00:00
regress-crbug-1199919.js [debugger] Don't attach source positions to implicit returns. 2021-04-30 12:33:29 +00:00
regress-crbug-1207867-expected.txt [inspector] Side-effect free FunctionMirror descriptions. 2021-05-12 09:30:37 +00:00
regress-crbug-1207867.js [inspector] Side-effect free FunctionMirror descriptions. 2021-05-12 09:30:37 +00:00
regress-crbug-1220203-expected.txt [debug] Fix catch prediction inside async generators. 2022-02-07 17:14:05 +00:00
regress-crbug-1220203.js [debug] Fix catch prediction inside async generators. 2022-02-07 17:14:05 +00:00
regress-crbug-1222065-expected.txt [debug] Default to last break index. 2021-06-22 05:06:31 +00:00
regress-crbug-1222065.js [debug] Default to last break index. 2021-06-22 05:06:31 +00:00
regress-crbug-1233401-expected.txt Fix test expectation for new inspector test 2021-07-28 17:26:16 +00:00
regress-crbug-1233401.js [debug] correctly tier down function for side effect check mode 2021-07-28 15:03:26 +00:00
regress-crbug-1246896-expected.txt Add regression test to check Runtime.getProperties for native functions 2022-08-11 06:22:22 +00:00
regress-crbug-1246896.js [inspector] Disable [[Scopes]] internal property 2022-09-22 07:12:24 +00:00
regress-crbug-1253277-expected.txt [debug] Set breakpoints correctly right after function literals. 2021-10-01 10:11:45 +00:00
regress-crbug-1253277.js [debug] Set breakpoints correctly right after function literals. 2021-10-01 10:11:45 +00:00
regress-crbug-1274529-expected.txt [inspector] Account for dynamic nature of the fn.name property. 2021-11-29 13:28:54 +00:00
regress-crbug-1274529.js [inspector] Account for dynamic nature of the fn.name property. 2021-11-29 13:28:54 +00:00
regress-crbug-1281031-expected.txt [inspector] Gracefully ignore non-dictionary values as session state. 2022-01-05 11:12:04 +00:00
regress-crbug-1281031.js [inspector] Gracefully ignore non-dictionary values as session state. 2022-01-05 11:12:04 +00:00
regress-crbug-1283049-expected.txt [inspector] Correct location for inline scripts with sourceURL. 2021-12-29 15:39:22 +00:00
regress-crbug-1283049.js [inspector] Correct location for inline scripts with sourceURL. 2021-12-29 15:39:22 +00:00
regress-crbug-1290861-expected.txt [inspector] Fix catch prediction for promise rejection handlers. 2022-01-31 12:12:13 +00:00
regress-crbug-1290861.js [inspector] Fix catch prediction for promise rejection handlers. 2022-01-31 12:12:13 +00:00
regress-crbug-1328453-expected.txt [inspector] Introduce status result for Debugger.setScriptSource 2022-06-09 12:18:32 +00:00
regress-crbug-1328453.js [debug] Fix crash when live editing unused inner functions 2022-05-25 07:51:03 +00:00
regress-crbug-1350842-expected.txt [debug] Fix scope for class member initializer 2022-08-11 09:49:02 +00:00
regress-crbug-1350842.js [debug] Fix source position around class literals 2022-08-16 07:16:47 +00:00
regress-crbug-1353051-expected.txt [inspector] Fix crash when building preview with a proxy prototype 2022-08-16 13:19:33 +00:00
regress-crbug-1353051.js [inspector] Fix crash when building preview with a proxy prototype 2022-08-16 13:19:33 +00:00
regress-crbug-1366843-expected.txt [inspector] Fix user-after-free bug around async evaluations 2022-10-04 06:21:23 +00:00
regress-crbug-1366843.js [inspector] Fix user-after-free bug around async evaluations 2022-10-04 06:21:23 +00:00