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

Commit c33c224b authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "hwbinder: explicitly disallow local java binder"

parents 4e572b59 47942d97
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -224,6 +224,21 @@ status_t JHwBinder::onTransact(
    return err;
}

bool validateCanUseHwBinder(const sp<hardware::IBinder>& binder) {
    if (binder != nullptr && binder->localBinder() != nullptr) {
        // untested/unsupported/inefficient
        // see b/129150021, doesn't work with scatter-gather
        //
        // explicitly disabling until it is supported
        // (note, even if this is fixed to work with scatter gather, we would also need
        // to convert this to the Java object rather than re-wrapping with a proxy)
        LOG(ERROR) << "Local Java Binder not supported.";
        return false;
    }

    return true;
}

}  // namespace android

////////////////////////////////////////////////////////////////////////////////
@@ -324,9 +339,9 @@ static jobject JHwBinder_native_getService(
    sp<IBase> ret = getRawServiceInternal(ifaceName, serviceName, retry /* retry */, false /* getStub */);
    sp<hardware::IBinder> service = hardware::toBinder<hidl::base::V1_0::IBase>(ret);

    if (service == NULL) {
    if (service == nullptr || !validateCanUseHwBinder(service)) {
        signalExceptionForError(env, NAME_NOT_FOUND);
        return NULL;
        return nullptr;
    }

    LOG(INFO) << "HwBinder: Starting thread pool for getting: " << ifaceName << "/" << serviceName;
+2 −0
Original line number Diff line number Diff line
@@ -54,6 +54,8 @@ private:

int register_android_os_HwBinder(JNIEnv *env);

bool validateCanUseHwBinder(const sp<hardware::IBinder>& binder);

}  // namespace android

#endif  // _ANDROID_OS_HW_BINDER_H
+6 −2
Original line number Diff line number Diff line
@@ -883,8 +883,12 @@ static jobject JHwParcel_native_readStrongBinder(JNIEnv *env, jobject thiz) {

    sp<hardware::IBinder> binder = parcel->readStrongBinder();

    if (binder == NULL) {
        return NULL;
    if (binder == nullptr) {
        return nullptr;
    }

    if (!validateCanUseHwBinder(binder)) {
        return nullptr;
    }

    return JHwRemoteBinder::NewObject(env, binder);