Status Update
Comments
kd...@gmail.com <kd...@gmail.com> #2
Branch: androidx-master-dev
commit b4a3fe1d53c8c8082cf16795da164c446f7fd912
Author: Ian Lake <ilake@google.com>
Date: Wed Jul 15 14:34:08 2020
Add a hook that fires before the Activity's super.onCreate()
Provide a standard, composable API for libraries and
developers to run code as soon as possible after a
Context is available to an Activity (i.e., before the
logic in the base Activity.onCreate() runs and before any
layout is inflated).
This updates the code in FragmentActivity and
AppCompatActivity to use that new API.
Test: new activity tests pass
Test: existing fragment and appcompat tests still pass
BUG: 161390636
Relnote: "`ComponentActivity` now implements
`ContextAware`, allowing you to add one or more
`OnContextAvailableListener` instances which will
receive a callback before the base `Activity.onCreate()`."
Change-Id: I513da73bc0862b62af4166be35ba353fc7869a09
M activity/activity/api/1.2.0-alpha07.txt
M activity/activity/api/current.txt
M activity/activity/api/public_plus_experimental_1.2.0-alpha07.txt
M activity/activity/api/public_plus_experimental_current.txt
M activity/activity/api/restricted_1.2.0-alpha07.txt
M activity/activity/api/restricted_current.txt
M activity/activity/src/androidTest/java/androidx/activity/ComponentActivityLifecycleTest.kt
A activity/activity/src/androidTest/java/androidx/activity/contextaware/ContextAwareHelperTest.kt
M activity/activity/src/main/java/androidx/activity/ComponentActivity.java
A activity/activity/src/main/java/androidx/activity/contextaware/ContextAware.java
A activity/activity/src/main/java/androidx/activity/contextaware/ContextAwareHelper.java
A activity/activity/src/main/java/androidx/activity/contextaware/OnContextAvailableListener.java
M appcompat/appcompat/build.gradle
M appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentActivity.java
kd...@gmail.com <kd...@gmail.com> #3
Branch: androidx-master-dev
commit 494d98d48e3c95c4338bda7ed1bf46797de257f6
Author: Ian Lake <ilake@google.com>
Date: Mon Aug 03 13:07:36 2020
Deliver the Context when added after it is available
Previously, an OnContextAvailableListener would only
receive a callback if added prior to the Context
being made available.
Rather than allow developers fall into a pitfall
where they add a listener and never receive a
callback, synchronously deliver the currently
available Context to listeners.
Test: updated activity tests pass
BUG: 161390636
Relnote: N/A
Change-Id: I24eff02712c90e84e1998407082e0b07cf04b44a
M activity/activity/api/current.txt
M activity/activity/api/public_plus_experimental_current.txt
M activity/activity/api/restricted_current.txt
M activity/activity/src/androidTest/java/androidx/activity/contextaware/ContextAwareHelperTest.kt
M activity/activity/src/main/java/androidx/activity/ComponentActivity.java
M activity/activity/src/main/java/androidx/activity/contextaware/ContextAware.java
M activity/activity/src/main/java/androidx/activity/contextaware/ContextAwareHelper.java
kd...@gmail.com <kd...@gmail.com> #4
Branch: androidx-master-dev
commit 5d11382f47626211d512b9135f6b5f40b88f6647
Author: Ian Lake <ilake@google.com>
Date: Mon Aug 03 12:45:55 2020
Simplify OnContextAvailableListener interface
Rather than pass the ContextAware object,
the Context, and a Bundle for saved instance
state, pass only the Context to the
onContextAvailable() callback.
The ContextAware parameter is not needed in
general (unregistering is a corner case that
can be handled by capturing a reference to the
ContextAware).
The saved instance state Bundle is not needed
when we can ensure that the
SavedStateRegistry has had its state restored
before the listeners are called. This ensures
that all Saved State logic is centralized in
the API specifically built for saving state
rather than leaking into other APIs.
To accomplish this API change, the storage of
FragmentManager's and AppCompatDelegate's saved
state was moved to SavedStateRegistry as part of
FragmentActivity and AppCompatActivity,
respectively. Longer term, FragmentManager and
AppCompatDelegate should provide public APIs for
connecting directly to SavedStateRegistry, but
that is out of scope for this change.
Test: activity, fragment, and appcompat tests pass
BUG: 161390636
Relnote: N/A
Change-Id: I32fdd4b2c4c391c3fa97158dbd7508fa96b08d7a
M activity/activity/api/current.txt
M activity/activity/api/public_plus_experimental_current.txt
M activity/activity/api/restricted_current.txt
M activity/activity/src/androidTest/java/androidx/activity/ComponentActivityLifecycleTest.kt
M activity/activity/src/androidTest/java/androidx/activity/ComponentActivitySavedStateTest.kt
M activity/activity/src/androidTest/java/androidx/activity/contextaware/ContextAwareHelperTest.kt
M activity/activity/src/main/java/androidx/activity/ComponentActivity.java
M activity/activity/src/main/java/androidx/activity/contextaware/ContextAwareHelper.java
M activity/activity/src/main/java/androidx/activity/contextaware/OnContextAvailableListener.java
M appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
M fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentArchLifecycleTest.kt
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentActivity.java
kd...@gmail.com <kd...@gmail.com> #5
Branch: androidx-master-dev
commit d830158f1671930bab215716e329349a42eec1dd
Author: Ian Lake <ilake@google.com>
Date: Fri Jul 31 14:14:29 2020
Add suspending withContextAvailable to ContextAware
Expand the ContextAware interface to allow developers
to synchronously peek to see if the context is
availble.
This allows us to write a Kotlin extension
withContextAvailable() that runs a non-suspending
block once the context becomes available (either
synchronously if it is already available or by
using a OnContextAvailableListener under the hood
if not).
Test: new tests pass
BUG: 161390636
Relnote: "Added a `peekAvailableContext()` API to
`ContextAware` to allow you to synchronously determine
if a Context is available. A suspending Kotlin extension
`withContextAvailable()` allows you to run a
non-suspending block when the Context becomes available
and return a result."
Change-Id: I8290cd9de8231913036d23a233c177ed45d2d370
M activity/activity-ktx/api/current.txt
M activity/activity-ktx/api/public_plus_experimental_current.txt
M activity/activity-ktx/api/restricted_current.txt
A activity/activity-ktx/src/androidTest/java/androidx/activity/contextaware/ContextAwareTest.kt
A activity/activity-ktx/src/main/java/androidx/activity/contextaware/ContextAware.kt
M activity/activity/api/current.txt
M activity/activity/api/public_plus_experimental_current.txt
M activity/activity/api/restricted_current.txt
M activity/activity/src/androidTest/java/androidx/activity/contextaware/ContextAwareHelperTest.kt
M activity/activity/src/main/java/androidx/activity/ComponentActivity.java
M activity/activity/src/main/java/androidx/activity/contextaware/ContextAware.java
M activity/activity/src/main/java/androidx/activity/contextaware/ContextAwareHelper.java
kd...@gmail.com <kd...@gmail.com> #6
The new ContextAware
API will be available in Activity 1.2.0-alpha08 and is used by Fragment 1.3.0-alpha08 and AppCompat 1.3.0-alpha02 to implement FragmentManager's and AppCompatDelegate's pre-onCreate() logic.
dr...@chromium.org <dr...@chromium.org> #7
Wait, this can't work as advertised.
FragmentActivity extends ComponentActivity
public FragmentActivity(@LayoutRes int contentLayoutId) {
super(contentLayoutId);
init();
}
private void init() {
addOnContextAvailableListener(new OnContextAvailableListener() {
// ...
}
}
ComponentActivity
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
// ...
mContextAwareHelper.dispatchOnContextAvailable(this);
super.onCreate(savedInstanceState);
//...
}
- Call
FragmentActivity
constructor, - which calls
ComponentActivity
super constructor, - which dispatches context available... to noone,
- and calls platform Activity.onCreate.
- Bubble up to
FragmentActivity
constructor and register context listener, - which is invoked synchronously but only after platform
Activity.onCreate
has already been called.
Did I miss something? I'm confused.
kd...@gmail.com <kd...@gmail.com> #8
Never mind, constructor vs onCreate. :facepalm: Sorry.
pe...@google.com <pe...@google.com> #9
Re #8 - the fact that these are different things is indeed exactly why this API exists :)
kd...@gmail.com <kd...@gmail.com> #11
Thanks for verifying the reproduce!
not sure how long you'd have to wait for that
TBH I didn't try waiting for the unpatched version to finish, my expectation is this will be extremely slow as I don't have a dedicated graphic card on my PC.
My assumption is that this can be optimized by using different combinations of paths and iterations, i.e., reducing the gather_lines_and_quads
return value and increasing the number of paths.
Now the patch in #5 should demonstrate the bug's existence (as the patch does not change the quadCount
value), so it can be fixed without waiting for a stable poc (I'm trying to reduce the time, but I guess it will take times).
ja...@google.com <ja...@google.com> #12
In this case I don't think the actual GPU is relevant as the code in question is accumulating draw data on the CPU. But running the SKP for a while and noting the progress, it seems it would take on the order of days or possibly weeks of continuous running for the overflow to trigger on my computer, as it stands.
kd...@gmail.com <kd...@gmail.com> #13
the code in question is accumulating draw data on the CPU
ok thanks for the clarification, in this case I agree that this would take days or more. what I observed is the same and my PC is i7-13700+64GB so neither CPU nor Memory should be bottleneck
Another thing I notice:
int conicCount = conics.size() / 3; // updated in gather_lines_and_quads
int quadAndConicCount = conicCount + quadCount;
this is also a potential overflow place that needs a patch.
It may reduce the required time to exploit (not magnitude level, but something like from 3day to 2day, as attacker only need to achieve INT_MAX * 2/3 in the for
loop, and the rest 1/3 INT_MAX can be add there)
it's a potential security flaw, therefore it's good to add a verification there.
ja...@google.com <ja...@google.com> #14
I tried reproducing this on a regular release build, which is much faster than an ASAN build. I realized that the size of quads
(and conics
) is bound by INT_MAX here:
Since in the quads
case this size is always 3 * quadCount
, this release check will always fire before quadCount
is able to overflow. It is however possible to trigger overflow by drawing very-nearly-quadratic curves which get subdivided here:
This takes a delicate balance of increasing quadCount
enough to overflow without increasing quads
's size enough to overflow. The following seems to work:
SkPaint paint;
paint.setAntiAlias(true);
paint.setStyle(SkPaint::kStroke_Style);
paint.setStrokeWidth(0);
SkPath path;
path.moveTo(0, 0);
for (float y = 0.0f; y < 200.0f; y += 0.01f) {
const float y1 = y + 200.0f;
constexpr float x0 = 0.0f;
constexpr float x1 = 400.0f / 3.0f;
constexpr float x2 = 800.0f / 3.0f;
constexpr float x3 = 400.0f;
path.cubicTo(x1, y1, x2, y1, x3, y);
path.cubicTo(x2, y1 + 0.005f, x1, y1 + 0.005f, x0, y + 0.005f);
}
path.close();
for (int i = 0; i < 15000; ++i) {
canvas->drawPath(path, paint);
}
However, I'm not sure if this by itself is enough to trigger an OOB read, because the count is cast to size_t before being used for an allocation here:
kd...@gmail.com <kd...@gmail.com> #15
However, I'm not sure if this by itself is enough to trigger an OOB read, because the count is cast to size_t before being used for an allocation here:
https://crsrc.org/c/third_party/skia/src/gpu/ganesh/GrBufferAllocPool.cpp;l=445;drc=f5e280b6
I don't get your point there,
for (...) {
quadCount += gather_lines_and_quads(args.fPath, args.fViewMatrix, args.fDevClipBounds,
args.fCapLength, convertConicsToQuads, &lines, &quads,
&conics, &qSubdivs, &cWeights); //[1]
}
// -----------------------------------------------------------------------------
int quadAndConicCount = conicCount + quadCount; [2]
if (lineCount > kMaxLines || quadAndConicCount > kMaxQuadsAndConics) {
return;
}
// -----------------------------------------------------------------------------
int vertexCount = kQuadNumVertices * quadAndConicCount;
// -----------------------------------------------------------------------------
void* vertices = target->makeVertexSpace(sizeof(BezierVertex), vertexCount, // [3]
&vertexBuffer, &firstVertex);
->GrOpFlushState::makeVertexSpace
->GrVertexBufferAllocPool::makeSpace(
My understanding is that overflow happens either at [1] or [2], so at [3], the vertexCount is already down-casted (overflowed) to an valid int. Therefore, the argument passed to GrVertexBufferAllocPool::makeSpace(
being casted to size_t
will not lead to any differences.
For instance, at [2] the quadCount is MAX_INT and conicCount is 0x10, then the quadAndConicCount will be downcast to 0xF (overflow),
end up leading the vertexCount
at [3] being 0xF * kQuadNumVertices
, no matter if this value is cast to size_t
, the buffer allocated in [3] will be too small to hold the temporary calculation results.
ja...@google.com <ja...@google.com> #16
I mostly agree with your analysis, however an important point is that at [2], if quadCount
is INT_MAX, the calculation will actually be 0x7FFFFFFF + 0x10. Then we end up with quadAndConicCount
equal to 0x8000000F, or -2147483633. So we actually have to increase quadCount
well beyond INT_MAX. We can do that by drawing even larger curves which are subdivided more than those in my first example. The following code seems to result in an OOB read by wrapping quadCount
back to a relatively small positive value:
SkPath path;
path.moveTo(0, 0);
for (float y = 0.0f; y < 800.0f; y += 0.05f) {
const float y1 = y + 800.0f;
constexpr float x0 = 0.0f;
constexpr float x1 = 1600.0f / 3.0f;
constexpr float x2 = 3200.0f / 3.0f;
constexpr float x3 = 1600.0f;
path.cubicTo(x1, y1, x2, y1, x3, y);
path.cubicTo(x2, y1 + 0.025f, x1, y1 + 0.025f, x0, y + 0.025f);
}
path.close();
for (int i = 0; i < 8500; ++i) {
canvas->drawPath(path, paint);
}
ja...@google.com <ja...@google.com> #17
Note that since an ASAN build was too slow to reproduce this, I used the following patch to verify an OOB write:
--- a/src/gpu/ganesh/ops/AAHairLinePathRenderer.cpp
+++ b/src/gpu/ganesh/ops/AAHairLinePathRenderer.cpp
@@ -701,6 +701,8 @@ void add_conics(const SkPoint p[3],
}
}
+const BezierVertex* dbg_end = nullptr;
+
void add_quads(const SkPoint p[3],
int subdiv,
const SkMatrix* toDevice,
@@ -727,6 +729,7 @@ void add_quads(const SkPoint p[3],
if (bloat_quad(choppedQuadPts, toDevice, toSrc, outVerts)) {
set_uv_quad(choppedQuadPts, outVerts);
+ SkASSERT_RELEASE(*vert <= dbg_end - kQuadNumVertices);
memcpy(*vert, outVerts, kQuadNumVertices * sizeof(BezierVertex));
*vert += kQuadNumVertices;
}
@@ -1289,6 +1292,7 @@ void AAHairlineOp::onPrepareDraws(GrMeshDrawTarget* target) {
// Setup vertices
BezierVertex* bezVerts = reinterpret_cast<BezierVertex*>(vertices);
+ dbg_end = bezVerts + vertexCount;
int unsubdivQuadCnt = quads.size() / 3;
for (int i = 0; i < unsubdivQuadCnt; ++i) {
ap...@google.com <ap...@google.com> #18
Project: skia
Branch: main
Author: James Godfrey-Kittle <
Link:
[ganesh] Avoid overflow when combining AAHairlineOps
Expand for full commit details
[ganesh] Avoid overflow when combining AAHairlineOps
Bug: b/382786791
Change-Id: I955d943015cce76f75221df9fab0897a6f22fe4b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/930577
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: James Godfrey-Kittle <jamesgk@google.com>
Files:
- M
src/gpu/ganesh/ops/AAHairLinePathRenderer.cpp
Hash: 8b030e47588af50f56ef380d81a17667baeb582b
Date: Tue Dec 17 12:14:17 2024
ph...@chromium.org <ph...@chromium.org> #19
I'm not entirely sure how to reproduce this. jamesgk@: Could you confirm whether
pe...@google.com <pe...@google.com> #20
jamesgk: Uh oh! This issue still open and hasn't been updated in the last 14 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 Disable-Nags (case sensitive) to the Chromium Labels custom field.
pe...@google.com <pe...@google.com> #22
Security Merge Request Consideration: This is sufficiently serious that it should be merged to stable. But I can't see a Chromium repo commit here,so you will need to investigate what - if anything - needs to be merged to M131. Is there a fix in some other repo which should be merged? Or, perhaps this ticket is a duplicate of some other ticket which has the real fix: please track that down and ensure it is merged appropriately. Security Merge Request Consideration: This is sufficiently serious that it should be merged to beta. But I can't see a Chromium repo commit here,so you will need to investigate what - if anything - needs to be merged to M132. Is there a fix in some other repo which should be merged? Or, perhaps this ticket is a duplicate of some other ticket which has the real fix: please track that down and ensure it is merged appropriately. Security Merge Request - Manual Review: Merge review required: no relevant commits could be automatically detected (via Git Watcher comments), sending to merge review for manual evaluation. If you have not already manually listed the relevant commits to be merged via a comment above, please do so ASAP.
Security Merge Request - Manual Review: Merge review required: no relevant commits could be automatically detected (via Git Watcher comments), sending to merge review for manual evaluation. If you have not already manually listed the relevant commits to be merged via a comment above, please do so ASAP.
Security Merge Request: Thank you for fixing this security bug! We aim to ship security fixes as quickly as possible, to limit their opportunity for exploitation as an "n-day" (that is, a bug where git fixes are developed into attacks before those fixes reach users).
We have determined this fix is necessary on milestone(s): [131, 132].
Please answer the following questions so that we can safely process this merge request:
- Which CLs should be backmerged? (Please include Gerrit links.)
- Has this fix been verified on Canary to not pose any stability regressions?
- Does this fix pose any potential non-verifiable stability risks?
- Does this fix pose any known compatibility risks?
- Does it require manual verification by the test team? If so, please describe required testing.
- (no answer required) Please check the OS custom field to ensure all impacted OSes are checked!
am...@chromium.org <am...@chromium.org> #24
Reading through this issue, it's unclear if this overflow and OOB write could be realistically exploited in a real world scenario, and if so, would be constrained / limited by scenarios requiring some degree of a patch of a large amount of time, providing reduced attacker control.
Given this, declining merge to branches earlier than 132, especially since Stable and Extended Stable updates are being cut tomorrow or Monday for release right after the current release freeze.
Not seeing any issues with this fix on Canary or dev since it was landed, therefore approving merge of this fix (
kd...@gmail.com <kd...@gmail.com> #25
Reading through this issue, it's unclear if this overflow and OOB write could be realistically exploited in a real world scenario, and if so, would be constrained / limited by scenarios requiring some degree of a patch of a large amount of time, providing reduced attacker control.
From my understanding, 1) this bug is exploitable 2) this bug can be exploited without any patch, but exploitation takes long.
First, with a compromised renderer, the adversary can craft arbitrary command sending to skia (same as
Second, all the patches in this issue aim at accelerating reproduction. This bugs indeed require long time to reproduce (several days in ASan build, it can be shorter for non-ASan release).
Therefore, I consider this bug an exploitable privilege escalation vulnerability (when adversaries have a compromised renderer, they can cause memory corruption in GPU process), but this vuln is mildly mitigated by the significant times required.
am...@chromium.org <am...@chromium.org> #26
I think we are saying the same thing, but you just used more words. :) I agree this could be exploitable, but mitigated to the extent that if exploited - as presented - in a real world scenario, there would be limited attacker control due to the timing and requirement of a compromised renderer. As such, this remains a vulnerability and set a high severity. In terms of backmerge justification, however, this scenario doesn't meet backmerge requirements in this scenario. Therefore, I made my assessment and declined backmerge to older branches and have approved backmerge to current beta branch for inclusion in the forthcoming Stable.
kd...@gmail.com <kd...@gmail.com> #27
Ok I misunderstood what you mean, thanks for the clarification:)
pe...@google.com <pe...@google.com> #28
This issue has been approved for a merge. Please merge the fix to any appropriate branches as soon as possible!
If all merges have been completed, please remove any remaining Merge-Approved labels from this issue.
Thanks for your time! To disable nags, add Disable-Nags (case sensitive) to the Chromium Labels custom field.
pe...@google.com <pe...@google.com> #29
The NextAction date has arrived: 2025-01-06 To opt-out from this automation rule, please add Optout-Blintz-Nextaction-Alert to the "Chromium Labels" custom field.
sr...@chromium.org <sr...@chromium.org> #30
ap...@google.com <ap...@google.com> #32
Project: skia
Branch: chrome/m132
Author: James Godfrey-Kittle <
Link:
[ganesh] Avoid overflow when combining AAHairlineOps
Expand for full commit details
[ganesh] Avoid overflow when combining AAHairlineOps
Bug: b/382786791
Change-Id: I955d943015cce76f75221df9fab0897a6f22fe4b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/930577
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: James Godfrey-Kittle <jamesgk@google.com>
(cherry picked from commit 8b030e47588af50f56ef380d81a17667baeb582b)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/935337
Reviewed-by: James Godfrey-Kittle <jamesgk@google.com>
Auto-Submit: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Files:
- M
src/gpu/ganesh/ops/AAHairLinePathRenderer.cpp
Hash: c17fe9bc158c29de3cdd655ac73d14f52c17810a
Date: Tue Dec 17 12:14:17 2024
pe...@google.com <pe...@google.com> #33
LTS Milestone M126
This issue has been flagged as a merge candidate for Chrome OS' LTS channel. If selected, our merge team will handle any additional merges. To help us determine if this issue requires a merge to LTS, please answer this short questionnaire:
- Was this issue a regression for the milestone it was found in?
- Is this issue related to a change or feature merged after the latest LTS Milestone?
pe...@google.com <pe...@google.com> #34
This issue requires additional review before it can be merged to the LTS channel. Please answer the following questions to help us evaluate this merge:
- Number of CLs needed for this fix and links to them.
- Level of complexity (High, Medium, Low - Explain)
- Has this been merged to a stable release? beta release?
- Overall Recommendation (Yes, No)
qk...@google.com <qk...@google.com> #35
sp...@google.com <sp...@google.com> #36
Hello,
Congratulations! The Chrome Vulnerability Rewards Program (VRP) Panel has decided to award you $3000.00 for this report.
Rationale for this decision:
$2,000 for report of highly mitigated memory corruption (mitigated by timing / limited attacker control and precondition of compromised renderer) memory corruption in a highly-privileged (GPU) process + $1,000 bisect bonus
Important: If you aren't already registered with Google as a supplier, p2p-vrp@google.com will reach out to you. If you have registered in the past, no need to repeat the process – you can sit back and relax, and we will process the payment soon.
If you have any payment related requests, please direct them to p2p-vrp@google.com. Please remember to include the subject of this email and the email address that the report was sent from.
Thank you for your efforts and helping us make Chrome more secure for all users!
Cheers,
Chrome VRP Panel Bot
P.S. One other thing we'd like to mention:
* Please do NOT publicly disclose details until a fix has been released to all our users. Early public disclosure may cancel the provisional reward. Also, please be considerate about disclosure when the bug affects a core library that may be used by other products. Please do NOT share this information with third parties who are not directly involved in fixing the bug. Doing so may cancel the provisional reward. Please be honest if you have already disclosed anything publicly or to third parties. Lastly, we understand that some of you are not interested in money. We offer the option to donate your reward to an eligible charity. If you prefer this option, let us know and we will also match your donation - subject to our discretion. Any rewards that are unclaimed after 12 months will be donated to a charity of our choosing.
Please contact security-vrp@chromium.org with any questions.
am...@chromium.org <am...@chromium.org> #37
Congratulations Han Zheng! Thank you for your efforts and reporting this issue to us!
ap...@google.com <ap...@google.com> #38
Project: skia
Branch: chrome/m126
Author: James Godfrey-Kittle <
Link:
[M126-LTS][ganesh] Avoid overflow when combining AAHairlineOps
Expand for full commit details
[M126-LTS][ganesh] Avoid overflow when combining AAHairlineOps
Bug: b/382786791
Change-Id: I955d943015cce76f75221df9fab0897a6f22fe4b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/930577
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: James Godfrey-Kittle <jamesgk@google.com>
(cherry picked from commit 8b030e47588af50f56ef380d81a17667baeb582b)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/935716
Commit-Queue: Gyuyoung Kim (xWF) <qkim@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: James Godfrey-Kittle <jamesgk@google.com>
Files:
- M
src/gpu/ganesh/ops/AAHairLinePathRenderer.cpp
Hash: 7d88e44d3c614c6783403ab0b5551b2e62c6de8e
Date: Tue Dec 17 12:14:17 2024
ch...@google.com <ch...@google.com> #39
This bug has been closed for more than 14 weeks. Removing issue access restrictions.
Description
Steps to reproduce the problem
Problem Description
In function
AAHairlineOp::onPrepareDraws
, thequadCount
iterate every path and addgather_lines_and_quads
, which can be controlled byfPath
. by creating crafted skia path, we're able to increase thegather_lines_and_quads
results to 0xf0f4 in the poc. and there are no additional verification for thequadCount
to prevent overflow.Subsequently, the
quadCount
is used for allocation at [2-3], endup being used to allocate buffer at [4]. Therefore, the OOB will happen at [5]Summary
Security: Skia integer overflow (results in OOB) at AAHairlineOp::onPrepareDraws
Custom Questions
Type of crash:
gpu
Reporter credit:
Han Zheng (HexHive)
Additional Data
Category: Security
Chrome Channel: Not sure
Regression: N/A