From c5fe5044f44d0bcbba3ea56cc4d17e80e4b74ef9 Mon Sep 17 00:00:00 2001 From: Dan Stoza Date: Mon, 1 May 2017 16:31:53 -0700 Subject: [PATCH] libgui: Check slot received from IGBP in Surface Checks that the slot number received from mGraphicBufferProducer in Surface::dequeueBuffer is on the interval [0, NUM_BUFFER_SLOTS) to protect against a malicious BnGraphicBufferProducer. Bug: 36991414 AOSP-Change-Id: I1a76fd1bcce1c558f1c0c30f03638278288ed4fa (cherry picked from commit 90ce2a9c1d3af422c66b4061805831cb208263d8) CVE-2017-0665 Change-Id: If0fd4864b9fc4ea5a1c83d10adef26cdabb0f7e8 --- libs/gui/Surface.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp index 1abb6c375..2e78a6b6f 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp @@ -237,6 +237,12 @@ int Surface::dequeueBuffer(android_native_buffer_t** buffer, int* fenceFd) { return result; } + if (buf < 0 || buf >= NUM_BUFFER_SLOTS) { + ALOGE("dequeueBuffer: IGraphicBufferProducer returned invalid slot number %d", buf); + android_errorWriteLog(0x534e4554, "36991414"); // SafetyNet logging + return FAILED_TRANSACTION; + } + Mutex::Autolock lock(mMutex); sp& gbuf(mSlots[buf].buffer);