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

Commit e02fe0f4 authored by Andres Morales's avatar Andres Morales Committed by Android (Google) Code Review
Browse files

Merge "Implement clear SID API"

parents 617b330d 7c9c3bc9
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -123,6 +123,13 @@ status_t BnGateKeeperService::onTransact(
            reply->writeInt64(sid);
            return NO_ERROR;
        }
        case CLEAR_SECURE_USER_ID: {
            CHECK_INTERFACE(IGateKeeperService, data, reply);
            uint32_t uid = data.readInt32();
            clearSecureUserId(uid);
            reply->writeNoException();
            return NO_ERROR;
        }
        default:
            return BBinder::onTransact(code, data, reply, flags);
    }
+6 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ public:
        VERIFY = IBinder::FIRST_CALL_TRANSACTION + 1,
        VERIFY_CHALLENGE = IBinder::FIRST_CALL_TRANSACTION + 2,
        GET_SECURE_USER_ID = IBinder::FIRST_CALL_TRANSACTION + 3,
        CLEAR_SECURE_USER_ID = IBinder::FIRST_CALL_TRANSACTION + 4,
    };

    // DECLARE_META_INTERFACE - C++ client interface not needed
@@ -70,6 +71,11 @@ public:
     * Returns the secure user ID for the provided android user
     */
    virtual uint64_t getSecureUserId(uint32_t uid) = 0;

    /**
     * Clears the secure user ID associated with the user.
     */
    virtual void clearSecureUserId(uint32_t uid) = 0;
};

// ----------------------------------------------------------------------------
+11 −0
Original line number Diff line number Diff line
@@ -173,6 +173,17 @@ public:
        return read_sid(uid);
    }

    virtual void clearSecureUserId(uint32_t uid) {
        IPCThreadState* ipc = IPCThreadState::self();
        const int calling_pid = ipc->getCallingPid();
        const int calling_uid = ipc->getCallingUid();
        if (!PermissionCache::checkPermission(KEYGUARD_PERMISSION, calling_pid, calling_uid)) {
            ALOGE("%s: permission denied for [%d:%d]", __func__, calling_pid, calling_uid);
            return;
        }
        store_sid(uid, 0);
    }

    virtual status_t dump(int fd, const Vector<String16> &) {
        IPCThreadState* ipc = IPCThreadState::self();
        const int pid = ipc->getCallingPid();