OSDN Git Service

SurfaceFlinger: Add NULL check for buffer handling
authorPraveena Pachipulusu <pveena@codeaurora.org>
Thu, 21 Nov 2013 13:27:31 +0000 (18:57 +0530)
committerChih-Wei Huang <cwhuang@linux.org.tw>
Thu, 5 May 2016 17:57:08 +0000 (01:57 +0800)
Add buffer handling NULL check in dequeueBuffer and
verify whether the output data from binder is not NULL
in queueBuffer and connect api's to avoid SF crash

CRs-Fixed: 573088
CRs-Fixed: 572315

Change-Id: I41cebbc0cbcbbb0fd5ecb38db7ec7b0c91cdffe9

libs/gui/IGraphicBufferProducer.cpp
libs/gui/Surface.cpp

index c3c6235..da02c68 100644 (file)
@@ -185,7 +185,12 @@ public:
         if (result != NO_ERROR) {
             return result;
         }
-        memcpy(output, reply.readInplace(sizeof(*output)), sizeof(*output));
+        const void *out_data =reply.readInplace(sizeof(*output));
+        if(out_data != NULL) {
+            memcpy(output, out_data, sizeof(*output));
+        } else {
+            return BAD_VALUE;
+        }
         result = reply.readInt32();
         return result;
     }
@@ -227,7 +232,12 @@ public:
         if (result != NO_ERROR) {
             return result;
         }
-        memcpy(output, reply.readInplace(sizeof(*output)), sizeof(*output));
+        const void *out_data =reply.readInplace(sizeof(*output));
+        if(out_data != NULL) {
+            memcpy(output, out_data, sizeof(*output));
+        } else {
+            return BAD_VALUE;
+        }
         result = reply.readInt32();
         return result;
     }
index ed24094..4f8a9a1 100644 (file)
@@ -257,6 +257,9 @@ int Surface::dequeueBuffer(android_native_buffer_t** buffer, int* fenceFd) {
             ALOGE("dequeueBuffer: IGraphicBufferProducer::requestBuffer failed: %d", result);
             mGraphicBufferProducer->cancelBuffer(buf, fence);
             return result;
+        } else if (gbuf == 0) {
+            ALOGE("dequeueBuffer: Buffer is null return");
+            return INVALID_OPERATION;
         }
     }