Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 03bd2484 authored by Brad Fitzpatrick's avatar Brad Fitzpatrick Committed by Android (Google) Code Review
Browse files

Merge "Start of work on passing around StrictMode policy over Binder calls." into gingerbread

parents f955be99 702ea9d4
Loading
Loading
Loading
Loading
+5 −1
Original line number Original line Diff line number Diff line
@@ -41,6 +41,9 @@ public:
            int                 getCallingPid();
            int                 getCallingPid();
            int                 getCallingUid();
            int                 getCallingUid();


            void                setStrictModePolicy(int32_t policy);
            int32_t             getStrictModePolicy() const;
            
            int64_t             clearCallingIdentity();
            int64_t             clearCallingIdentity();
            void                restoreCallingIdentity(int64_t token);
            void                restoreCallingIdentity(int64_t token);
            
            
@@ -109,6 +112,7 @@ private:
            status_t            mLastError;
            status_t            mLastError;
            pid_t               mCallingPid;
            pid_t               mCallingPid;
            uid_t               mCallingUid;
            uid_t               mCallingUid;
            int32_t             mStrictModePolicy;
};
};


}; // namespace android
}; // namespace android
+4 −1
Original line number Original line Diff line number Diff line
@@ -56,7 +56,10 @@ public:


    bool                hasFileDescriptors() const;
    bool                hasFileDescriptors() const;


    // 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
    // in the header matches the expected interface from the caller.
    bool                enforceInterface(const String16& interface) const;
    bool                enforceInterface(const String16& interface) const;
    bool                checkInterface(IBinder*) const;
    bool                checkInterface(IBinder*) const;


+12 −1
Original line number Original line Diff line number Diff line
@@ -367,6 +367,16 @@ int64_t IPCThreadState::clearCallingIdentity()
    return token;
    return token;
}
}


void IPCThreadState::setStrictModePolicy(int32_t policy)
{
    mStrictModePolicy = policy;
}


int32_t IPCThreadState::getStrictModePolicy() const {
    return mStrictModePolicy;
}

void IPCThreadState::restoreCallingIdentity(int64_t token)
void IPCThreadState::restoreCallingIdentity(int64_t token)
{
{
    mCallingUid = (int)(token>>32);
    mCallingUid = (int)(token>>32);
@@ -588,7 +598,8 @@ status_t IPCThreadState::clearDeathNotification(int32_t handle, BpBinder* proxy)
}
}


IPCThreadState::IPCThreadState()
IPCThreadState::IPCThreadState()
    : mProcess(ProcessState::self()), mMyThreadId(androidGetTid())
    : mProcess(ProcessState::self()), mMyThreadId(androidGetTid()),
      mStrictModePolicy(0)
{
{
    pthread_setspecific(gTLS, this);
    pthread_setspecific(gTLS, this);
    clearCaller();
    clearCaller();
+3 −4
Original line number Original line Diff line number Diff line
@@ -136,7 +136,7 @@ public:
        for (n = 0; n < 5; n++){
        for (n = 0; n < 5; n++){
            sp<IBinder> svc = checkService(name);
            sp<IBinder> svc = checkService(name);
            if (svc != NULL) return svc;
            if (svc != NULL) return svc;
            LOGI("Waiting for sevice %s...\n", String8(name).string());
            LOGI("Waiting for service %s...\n", String8(name).string());
            sleep(1);
            sleep(1);
        }
        }
        return NULL;
        return NULL;
@@ -226,4 +226,3 @@ status_t BnServiceManager::onTransact(
}
}


}; // namespace android
}; // namespace android
+6 −2
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@


#include <binder/Parcel.h>
#include <binder/Parcel.h>


#include <binder/IPCThreadState.h>
#include <binder/Binder.h>
#include <binder/Binder.h>
#include <binder/BpBinder.h>
#include <binder/BpBinder.h>
#include <utils/Debug.h>
#include <utils/Debug.h>
@@ -436,8 +437,10 @@ bool Parcel::hasFileDescriptors() const
    return mHasFds;
    return mHasFds;
}
}


// 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());
    // 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);
}
}
@@ -449,6 +452,7 @@ bool Parcel::checkInterface(IBinder* binder) const


bool Parcel::enforceInterface(const String16& interface) const
bool Parcel::enforceInterface(const String16& interface) const
{
{
    int32_t strict_policy = readInt32();
    const String16 str(readString16());
    const String16 str(readString16());
    if (str == interface) {
    if (str == interface) {
        return true;
        return true;