Merge "hwbinder: explicitly disallow local java binder"

This commit is contained in:
Treehugger Robot
2019-04-16 18:47:41 +00:00
committed by Gerrit Code Review
3 changed files with 25 additions and 4 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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);