More StrictMode work, keeping Binder & BlockGuard's thread-locals in-sync.
Change-Id: Ia67cabcc17a73a0f15907ffea683d06bc41b90e5
This commit is contained in:
parent
f568a7480d
commit
a877cd85b5
@ -58,9 +58,13 @@ public:
|
|||||||
|
|
||||||
// Writes the RPC header.
|
// Writes the RPC header.
|
||||||
status_t writeInterfaceToken(const String16& interface);
|
status_t writeInterfaceToken(const String16& interface);
|
||||||
|
|
||||||
// Parses the RPC header, returning true if the interface name
|
// Parses the RPC header, returning true if the interface name
|
||||||
// in the header matches the expected interface from the caller.
|
// in the header matches the expected interface from the caller.
|
||||||
bool enforceInterface(const String16& interface) const;
|
// If strict_policy_out is non-NULL, the RPC header's StrictMode policy
|
||||||
|
// mask is returned.
|
||||||
|
bool enforceInterface(const String16& interface,
|
||||||
|
int32_t* strict_policy_out = NULL) const;
|
||||||
bool checkInterface(IBinder*) const;
|
bool checkInterface(IBinder*) const;
|
||||||
|
|
||||||
void freeData();
|
void freeData();
|
||||||
|
@ -372,8 +372,8 @@ void IPCThreadState::setStrictModePolicy(int32_t policy)
|
|||||||
mStrictModePolicy = policy;
|
mStrictModePolicy = policy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t IPCThreadState::getStrictModePolicy() const
|
||||||
int32_t IPCThreadState::getStrictModePolicy() const {
|
{
|
||||||
return mStrictModePolicy;
|
return mStrictModePolicy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,6 +48,9 @@
|
|||||||
|
|
||||||
#define PAD_SIZE(s) (((s)+3)&~3)
|
#define PAD_SIZE(s) (((s)+3)&~3)
|
||||||
|
|
||||||
|
// Note: must be kept in sync with android/os/StrictMode.java's PENALTY_GATHER
|
||||||
|
#define STRICT_MODE_PENALTY_GATHER 0x100
|
||||||
|
|
||||||
// XXX This can be made public if we want to provide
|
// XXX This can be made public if we want to provide
|
||||||
// support for typed data.
|
// support for typed data.
|
||||||
struct small_flat_data
|
struct small_flat_data
|
||||||
@ -440,7 +443,8 @@ bool Parcel::hasFileDescriptors() const
|
|||||||
// Write RPC headers. (previously just the interface token)
|
// Write RPC headers. (previously just the interface token)
|
||||||
status_t Parcel::writeInterfaceToken(const String16& interface)
|
status_t Parcel::writeInterfaceToken(const String16& interface)
|
||||||
{
|
{
|
||||||
writeInt32(IPCThreadState::self()->getStrictModePolicy());
|
writeInt32(IPCThreadState::self()->getStrictModePolicy() |
|
||||||
|
STRICT_MODE_PENALTY_GATHER);
|
||||||
// currently the interface identification token is just its name as a string
|
// currently the interface identification token is just its name as a string
|
||||||
return writeString16(interface);
|
return writeString16(interface);
|
||||||
}
|
}
|
||||||
@ -450,9 +454,14 @@ bool Parcel::checkInterface(IBinder* binder) const
|
|||||||
return enforceInterface(binder->getInterfaceDescriptor());
|
return enforceInterface(binder->getInterfaceDescriptor());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Parcel::enforceInterface(const String16& interface) const
|
bool Parcel::enforceInterface(const String16& interface,
|
||||||
|
int32_t* strict_policy_out) const
|
||||||
{
|
{
|
||||||
int32_t strict_policy = readInt32();
|
int32_t strict_policy = readInt32();
|
||||||
|
IPCThreadState::self()->setStrictModePolicy(strict_policy);
|
||||||
|
if (strict_policy_out != NULL) {
|
||||||
|
*strict_policy_out = strict_policy;
|
||||||
|
}
|
||||||
const String16 str(readString16());
|
const String16 str(readString16());
|
||||||
if (str == interface) {
|
if (str == interface) {
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user