Chrome · Ozone
CVE-2026-2321
UAF in Ozone
Overview
Medium
Severity
—
CVSS
No
Exploited ITW
Fixed
Fix Status
Changed Functions
| Function | Change | Notes |
|---|---|---|
ifui/ozone/platform/wayland/host/wayland_wp_color_management_output.cc |
modified | |
forui/ozone/platform/wayland/host/wayland_wp_color_manager.cc |
modified |
Files Changed
ui/ozone/platform/wayland/host/wayland_wp_color_management_output.ccui/ozone/platform/wayland/host/wayland_wp_color_management_output.hui/ozone/platform/wayland/host/wayland_wp_color_management_surface.ccui/ozone/platform/wayland/host/wayland_wp_color_management_surface.hui/ozone/platform/wayland/host/wayland_wp_color_manager.ccui/ozone/platform/wayland/host/wayland_wp_color_manager.h
Patch
From 2cc3c5b2b5f16287fc8464e3506a5c6607340270 Mon Sep 17 00:00:00 2001 From: Kramer Ge <[email protected]> Date: Mon, 08 Dec 2025 14:05:38 -0800 Subject: [PATCH] Resolve WaylandWpColorManager::Observer UAF `WaylandWpColorManagementOutput` is observing `WaylandWpColorManager`. The former outlives the latter because former is owned by `WaylandOutput` and is destroyed in member list. Fixed: 462468374, 461877477 Change-Id: Ida658bf700a8686b3f87c233e627d87981454436 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7239547 Commit-Queue: Kramer Ge <[email protected]> Reviewed-by: Thomas Anderson <[email protected]> Cr-Commit-Position: refs/heads/main@{#1555723} --- diff --git a/ui/ozone/platform/wayland/host/wayland_wp_color_management_output.cc b/ui/ozone/platform/wayland/host/wayland_wp_color_management_output.cc index e80056c..e730f6f3 100644 --- a/ui/ozone/platform/wayland/host/wayland_wp_color_management_output.cc +++ b/ui/ozone/platform/wayland/host/wayland_wp_color_management_output.cc @@ -58,6 +58,10 @@ weak_factory_.GetWeakPtr())); } +void WaylandWpColorManagementOutput::OnColorManagerDestroyed() { + color_manager_observation_.Reset(); +} + void WaylandWpColorManagementOutput::OnImageDescription( scoped_refptr<WaylandWpImageDescription> image_description) { if (!image_description) { diff --git a/ui/ozone/platform/wayland/host/wayland_wp_color_management_output.h b/ui/ozone/platform/wayland/host/wayland_wp_color_management_output.h index 8f235dd..f01976d 100644 --- a/ui/ozone/platform/wayland/host/wayland_wp_color_management_output.h +++ b/ui/ozone/platform/wayland/host/wayland_wp_color_management_output.h @@ -46,6 +46,7 @@ // WaylandWpColorManager::Observer: void OnHdrEnabledChanged(bool hdr_enabled) override; + void OnColorManagerDestroyed() override; void GetCurrentColorSpace(); void OnImageDescription( diff --git a/ui/ozone/platform/wayland/host/wayland_wp_color_management_surface.cc b/ui/ozone/platform/wayland/host/wayland_wp_color_management_surface.cc index 9c245b4..8089dc5 100644 --- a/ui/ozone/platform/wayland/host/wayland_wp_color_management_surface.cc +++ b/ui/ozone/platform/wayland/host/wayland_wp_color_management_surface.cc @@ -8,6 +8,7 @@ #include "base/logging.h" #include "base/memory/scoped_refptr.h" #include "base/notimplemented.h" +#include "base/notreached.h" #include "ui/gfx/display_color_spaces.h" #include "ui/ozone/platform/wayland/host/wayland_connection.h" #include "ui/ozone/platform/wayland/host/wayland_surface.h" @@ -124,4 +125,8 @@ : base::MakeRefCounted<gfx::DisplayColorSpacesRef>()); } +void WaylandWpColorManagementSurface::OnColorManagerDestroyed() { + NOTREACHED(); +} + } // namespace ui diff --git a/ui/ozone/platform/wayland/host/wayland_wp_color_management_surface.h b/ui/ozone/platform/wayland/host/wayland_wp_color_management_surface.h index 4d63600..3db62dde 100644 --- a/ui/ozone/platform/wayland/host/wayland_wp_color_management_surface.h +++ b/ui/ozone/platform/wayland/host/wayland_wp_color_management_surface.h @@ -49,6 +49,7 @@ // WaylandWpColorManager::Observer: void OnHdrEnabledChanged(bool hdr_enabled) override; + void OnColorManagerDestroyed() override; void OnSetColorSpace( scoped_refptr<WaylandWpImageDescription> image_description); diff --git a/ui/ozone/platform/wayland/host/wayland_wp_color_manager.cc b/ui/ozone/platform/wayland/host/wayland_wp_color_manager.cc index 7c4d29bb..8ac5b579 100644 --- a/ui/ozone/platform/wayland/host/wayland_wp_color_manager.cc +++ b/ui/ozone/platform/wayland/host/wayland_wp_color_manager.cc @@ -169,7 +169,11 @@ wp_color_manager_v1_add_listener(manager_.get(), &kListener, this); } -WaylandWpColorManager::~WaylandWpColorManager() = default; +WaylandWpColorManager::~WaylandWpColorManager() { + for (auto& observer : observers_) { + observer.OnColorManagerDestroyed(); + } +} void WaylandWpColorManager::GetImageDescription( const gfx::ColorSpace& color_space, diff --git a/ui/ozone/platform/wayland/host/wayland_wp_color_manager.h b/ui/ozone/platform/wayland/host/wayland_wp_color_manager.h index 0599b06..e7e52dfb 100644 --- a/ui/ozone/platform/wayland/host/wayland_wp_color_manager.h +++ b/ui/ozone/platform/wayland/host/wayland_wp_color_manager.h @@ -34,6 +34,7 @@ ~Observer() override = default; virtual void OnHdrEnabledChanged(bool hdr_enabled) = 0; + virtual void OnColorManagerDestroyed() = 0; }; static constexpr char kInterfaceName[] = "wp_color_manager_v1";
Loading diff…
Original Bug Report
The reporter's bug is still restricted on the tracker. Chrome de-restricts security bugs ~30–90 days after the fix ships; a later run will backfill it here.
References
On This Page