Commit 3db8561a authored by Vlad Tsyrklevich's avatar Vlad Tsyrklevich Committed by Commit Bot

ui/base: Deprecate use of base::ProtectedMemory

base::ProtectedMemory is being deprecated because it's not widely used
enough to make a security impact and justify its maintenance burden.
Replace use of base::ProtectedMemory with raw function pointers and add
an attribute to disable CFI-icall checking.

Bug: 1018834
Change-Id: If05a835c62dbb81850b4e0ba3a9a96f606adc2dc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1884366Reviewed-by: default avatarSadrul Chowdhury <sadrul@chromium.org>
Commit-Queue: Vlad Tsyrklevich <vtsyrklevich@chromium.org>
Cr-Commit-Position: refs/heads/master@{#710654}
parent 10dfc048
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
#include <dlfcn.h> #include <dlfcn.h>
#include "base/compiler_specific.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/memory/protected_memory_cfi.h"
#include "ui/base/x/x11_util.h" #include "ui/base/x/x11_util.h"
#include "ui/display/util/display_util.h" #include "ui/display/util/display_util.h"
#include "ui/display/util/x11/edid_parser_x11.h" #include "ui/display/util/x11/edid_parser_x11.h"
...@@ -23,11 +23,7 @@ constexpr int kMinVersionXrandr = 103; // Need at least xrandr version 1.3. ...@@ -23,11 +23,7 @@ constexpr int kMinVersionXrandr = 103; // Need at least xrandr version 1.3.
typedef XRRMonitorInfo* (*XRRGetMonitors)(::Display*, Window, bool, int*); typedef XRRMonitorInfo* (*XRRGetMonitors)(::Display*, Window, bool, int*);
typedef void (*XRRFreeMonitors)(XRRMonitorInfo*); typedef void (*XRRFreeMonitors)(XRRMonitorInfo*);
PROTECTED_MEMORY_SECTION base::ProtectedMemory<XRRGetMonitors> NO_SANITIZE("cfi-icall")
g_XRRGetMonitors_ptr;
PROTECTED_MEMORY_SECTION base::ProtectedMemory<XRRFreeMonitors>
g_XRRFreeMonitors_ptr;
std::map<RROutput, int> GetMonitors(int version, std::map<RROutput, int> GetMonitors(int version,
XDisplay* xdisplay, XDisplay* xdisplay,
GLXWindow window) { GLXWindow window) {
...@@ -35,22 +31,21 @@ std::map<RROutput, int> GetMonitors(int version, ...@@ -35,22 +31,21 @@ std::map<RROutput, int> GetMonitors(int version,
if (version >= 105) { if (version >= 105) {
void* xrandr_lib = dlopen(nullptr, RTLD_NOW); void* xrandr_lib = dlopen(nullptr, RTLD_NOW);
if (xrandr_lib) { if (xrandr_lib) {
static base::ProtectedMemory<XRRGetMonitors>::Initializer get_init( static XRRGetMonitors XRRGetMonitors_ptr =
&g_XRRGetMonitors_ptr, reinterpret_cast<XRRGetMonitors>( reinterpret_cast<XRRGetMonitors>(dlsym(xrandr_lib, "XRRGetMonitors"));
dlsym(xrandr_lib, "XRRGetMonitors"))); static XRRFreeMonitors XRRFreeMonitors_ptr =
static base::ProtectedMemory<XRRFreeMonitors>::Initializer free_init( reinterpret_cast<XRRFreeMonitors>(
&g_XRRFreeMonitors_ptr, reinterpret_cast<XRRFreeMonitors>( dlsym(xrandr_lib, "XRRFreeMonitors"));
dlsym(xrandr_lib, "XRRFreeMonitors"))); if (XRRGetMonitors_ptr && XRRFreeMonitors_ptr) {
if (*g_XRRGetMonitors_ptr && *g_XRRFreeMonitors_ptr) {
int nmonitors = 0; int nmonitors = 0;
XRRMonitorInfo* monitors = base::UnsanitizedCfiCall( XRRMonitorInfo* monitors =
g_XRRGetMonitors_ptr)(xdisplay, window, false, &nmonitors); XRRGetMonitors_ptr(xdisplay, window, false, &nmonitors);
for (int monitor = 0; monitor < nmonitors; monitor++) { for (int monitor = 0; monitor < nmonitors; monitor++) {
for (int j = 0; j < monitors[monitor].noutput; j++) { for (int j = 0; j < monitors[monitor].noutput; j++) {
output_to_monitor[monitors[monitor].outputs[j]] = monitor; output_to_monitor[monitors[monitor].outputs[j]] = monitor;
} }
} }
base::UnsanitizedCfiCall(g_XRRFreeMonitors_ptr)(monitors); XRRFreeMonitors_ptr(monitors);
} }
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment