StrictMode: gather and return violating stacks in Binder replies

Now, when Thread A has a strict mode policy in effect and does a
Binder call to Thread B (most likely in another process), the strict
mode policy is passed along, but with the GATHER penalty bit set which
overrides other policies and instead gathers all offending stack
traces to a threadlocal which are then written back in the Parcel's
reply header.

Change-Id: I7d4497032a0609b37b1a2a15855f5c929ba0584d
This commit is contained in:
Brad Fitzpatrick 2010-07-12 11:05:38 -07:00
parent a877cd85b5
commit d36f4a5f13
1 changed files with 12 additions and 1 deletions

View File

@ -51,6 +51,9 @@
// Note: must be kept in sync with android/os/StrictMode.java's PENALTY_GATHER
#define STRICT_MODE_PENALTY_GATHER 0x100
// Note: must be kept in sync with android/os/Parcel.java's EX_HAS_REPLY_HEADER
#define EX_HAS_REPLY_HEADER -128
// XXX This can be made public if we want to provide
// support for typed data.
struct small_flat_data
@ -959,7 +962,15 @@ wp<IBinder> Parcel::readWeakBinder() const
int32_t Parcel::readExceptionCode() const
{
int32_t exception_code = readAligned<int32_t>();
// TODO: skip over the response header here, once that's in.
if (exception_code == EX_HAS_REPLY_HEADER) {
int32_t header_size = readAligned<int32_t>();
// Skip over fat responses headers. Not used (or propagated) in
// native code
setDataPosition(dataPosition() + header_size);
// And fat response headers are currently only used when there are no
// exceptions, so return no error:
return 0;
}
return exception_code;
}