OSDN Git Service

Binder: Don't cast directly from a pointer to binder_uintptr_t
authorArve Hjønnevåg <arve@android.com>
Wed, 19 Feb 2014 05:04:31 +0000 (21:04 -0800)
committerArve Hjønnevåg <arve@android.com>
Wed, 19 Feb 2014 05:14:39 +0000 (21:14 -0800)
When using the 64 bit binder interface from a 32 bit process the
pointer may get sign extended and cause the kernel to fail to read
from it.

Change-Id: I90fcf53880e2aa92e230a9723f9b3f7696170e32

libs/binder/IPCThreadState.cpp

index 7796309..65329f5 100644 (file)
@@ -921,7 +921,7 @@ status_t IPCThreadState::writeTransactionData(int32_t cmd, uint32_t binderFlags,
         tr.flags |= TF_STATUS_CODE;
         *statusBuffer = err;
         tr.data_size = sizeof(status_t);
-        tr.data.ptr.buffer = reinterpret_cast<binder_uintptr_t>(statusBuffer);
+        tr.data.ptr.buffer = reinterpret_cast<uintptr_t>(statusBuffer);
         tr.offsets_size = 0;
         tr.data.ptr.offsets = 0;
     } else {