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

Commit 7e959e42 authored by Jeff Sharkey's avatar Jeff Sharkey Committed by Android (Google) Code Review
Browse files

Merge "Protect usage data with OP_GET_USAGE_STATS." into pi-dev

parents 18d03214 7afcb3f9
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -49,6 +49,19 @@ public:
        return reply.readInt32() != 0;
    }

    virtual int32_t noteOp(const String16& op, int32_t uid, const String16& packageName)
    {
        Parcel data, reply;
        data.writeInterfaceToken(IPermissionController::getInterfaceDescriptor());
        data.writeString16(op);
        data.writeInt32(uid);
        data.writeString16(packageName);
        remote()->transact(NOTE_OP_TRANSACTION, data, &reply);
        // fail on exception
        if (reply.readExceptionCode() != 0) return 2; // MODE_ERRORED
        return reply.readInt32();
    }

    virtual void getPackagesForUid(const uid_t uid, Vector<String16>& packages)
    {
        Parcel data, reply;
@@ -111,6 +124,17 @@ status_t BnPermissionController::onTransact(
            return NO_ERROR;
        } break;

        case NOTE_OP_TRANSACTION: {
            CHECK_INTERFACE(IPermissionController, data, reply);
            String16 op = data.readString16();
            int32_t uid = data.readInt32();
            String16 packageName = data.readString16();
            int32_t res = noteOp(op, uid, packageName);
            reply->writeNoException();
            reply->writeInt32(res);
            return NO_ERROR;
        } break;

        case GET_PACKAGES_FOR_UID_TRANSACTION: {
            CHECK_INTERFACE(IPermissionController, data, reply);
            int32_t uid = data.readInt32();
+6 −0
Original line number Diff line number Diff line
@@ -59,6 +59,12 @@ bool PermissionController::checkPermission(const String16& permission, int32_t p
    return service != NULL ? service->checkPermission(permission, pid, uid) : false;
}

int32_t PermissionController::noteOp(const String16& op, int32_t uid, const String16& packageName)
{
    sp<IPermissionController> service = getService();
    return service != NULL ? service->noteOp(op, uid, packageName) : MODE_ERRORED;
}

void PermissionController::getPackagesForUid(const uid_t uid, Vector<String16> &packages)
{
    sp<IPermissionController> service = getService();
+6 −3
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@ public:

    virtual bool checkPermission(const String16& permission, int32_t pid, int32_t uid) = 0;

    virtual int32_t noteOp(const String16& op, int32_t uid, const String16& packageName) = 0;

    virtual void getPackagesForUid(const uid_t uid, Vector<String16> &packages) = 0;

    virtual bool isRuntimePermission(const String16& permission) = 0;
@@ -40,9 +42,10 @@ public:

    enum {
        CHECK_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION,
        GET_PACKAGES_FOR_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 1,
        IS_RUNTIME_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 2,
        GET_PACKAGE_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 3
        NOTE_OP_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 1,
        GET_PACKAGES_FOR_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 2,
        IS_RUNTIME_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 3,
        GET_PACKAGE_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 4
    };
};

+8 −0
Original line number Diff line number Diff line
@@ -35,9 +35,17 @@ public:
        MATCH_INSTANT = 1<<23
    };

    enum {
        MODE_ALLOWED = 0,
        MODE_IGNORED = 1,
        MODE_ERRORED = 2,
        MODE_DEFAULT = 3,
    };

    PermissionController();

    bool checkPermission(const String16& permission, int32_t pid, int32_t uid);
    int32_t noteOp(const String16& op, int32_t uid, const String16& packageName);
    void getPackagesForUid(const uid_t uid, Vector<String16>& packages);
    bool isRuntimePermission(const String16& permission);
    int getPackageUid(const String16& package, int flags);