summaryrefslogtreecommitdiffstats
path: root/camera
diff options
context:
space:
mode:
authorRuben Brunk <rubenbrunk@google.com>2015-04-30 17:44:07 -0700
committerRuben Brunk <rubenbrunk@google.com>2015-05-14 18:49:53 -0700
commit6267b539d0d1ee7118aafd976d75cb8db397bc24 (patch)
tree5c950439fc8243ffd960bd72a666b4fce172a24d /camera
parent51c834c8d321cee50cd07026771e46167a640dd3 (diff)
downloadframeworks_av-6267b539d0d1ee7118aafd976d75cb8db397bc24.zip
frameworks_av-6267b539d0d1ee7118aafd976d75cb8db397bc24.tar.gz
frameworks_av-6267b539d0d1ee7118aafd976d75cb8db397bc24.tar.bz2
camera2: Fix work-profile eviction handling.
Bug: 20124384 Change-Id: I6fb82dbfd5f98746ed4befed81a583e3709bfee8
Diffstat (limited to 'camera')
-rw-r--r--camera/ICameraService.cpp28
1 files changed, 23 insertions, 5 deletions
diff --git a/camera/ICameraService.cpp b/camera/ICameraService.cpp
index 51a775b..a02dbe2 100644
--- a/camera/ICameraService.cpp
+++ b/camera/ICameraService.cpp
@@ -20,6 +20,7 @@
#include <utils/Errors.h>
#include <utils/String16.h>
+#include <inttypes.h>
#include <stdint.h>
#include <sys/types.h>
@@ -303,10 +304,10 @@ public:
return res;
}
- virtual void notifySystemEvent(int eventId, int arg0) {
+ virtual void notifySystemEvent(int32_t eventId, const int32_t* args, size_t len) {
Parcel data, reply;
data.writeInt32(eventId);
- data.writeInt32(arg0);
+ data.writeInt32Array(len, args);
remote()->transact(BnCameraService::NOTIFY_SYSTEM_EVENT, data, &reply,
IBinder::FLAG_ONEWAY);
}
@@ -481,9 +482,26 @@ status_t BnCameraService::onTransact(
} break;
case NOTIFY_SYSTEM_EVENT: {
CHECK_INTERFACE(ICameraService, data, reply);
- int eventId = data.readInt32();
- int arg0 = data.readInt32();
- notifySystemEvent(eventId, arg0);
+ int32_t eventId = data.readInt32();
+ int32_t len = data.readInt32();
+ if (len < 0) {
+ ALOGE("%s: Received poorly formatted length in binder request: notifySystemEvent.",
+ __FUNCTION__);
+ return FAILED_TRANSACTION;
+ }
+ if (len > 512) {
+ ALOGE("%s: Length %" PRIi32 " too long in binder request: notifySystemEvent.",
+ __FUNCTION__, len);
+ return FAILED_TRANSACTION;
+ }
+ int32_t events[len] = {};
+ status_t status = data.read(events, sizeof(int32_t) * len);
+ if (status != NO_ERROR) {
+ ALOGE("%s: Received poorly formatted binder request: notifySystemEvent.",
+ __FUNCTION__);
+ return FAILED_TRANSACTION;
+ }
+ notifySystemEvent(eventId, events, len);
return NO_ERROR;
} break;
default: