Merge "Clear binder identity when executing callback"
diff --git a/javalib/src/android/system/virtualmachine/VirtualMachine.java b/javalib/src/android/system/virtualmachine/VirtualMachine.java
index ecd4491..c48c4fe 100644
--- a/javalib/src/android/system/virtualmachine/VirtualMachine.java
+++ b/javalib/src/android/system/virtualmachine/VirtualMachine.java
@@ -23,6 +23,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
+import android.os.Binder;
import android.os.IBinder;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
@@ -377,8 +378,13 @@
if (cb == null) {
return;
}
- mCallbackExecutor.execute(
- () -> cb.onPayloadStarted(VirtualMachine.this, stream));
+ final long restoreToken = Binder.clearCallingIdentity();
+ try {
+ mCallbackExecutor.execute(
+ () -> cb.onPayloadStarted(VirtualMachine.this, stream));
+ } finally {
+ Binder.restoreCallingIdentity(restoreToken);
+ }
}
@Override
@@ -387,7 +393,13 @@
if (cb == null) {
return;
}
- mCallbackExecutor.execute(() -> cb.onPayloadReady(VirtualMachine.this));
+ final long restoreToken = Binder.clearCallingIdentity();
+ try {
+ mCallbackExecutor.execute(
+ () -> cb.onPayloadReady(VirtualMachine.this));
+ } finally {
+ Binder.restoreCallingIdentity(restoreToken);
+ }
}
@Override
@@ -396,8 +408,13 @@
if (cb == null) {
return;
}
- mCallbackExecutor.execute(
- () -> cb.onPayloadFinished(VirtualMachine.this, exitCode));
+ final long restoreToken = Binder.clearCallingIdentity();
+ try {
+ mCallbackExecutor.execute(
+ () -> cb.onPayloadFinished(VirtualMachine.this, exitCode));
+ } finally {
+ Binder.restoreCallingIdentity(restoreToken);
+ }
}
@Override
@@ -406,8 +423,13 @@
if (cb == null) {
return;
}
- mCallbackExecutor.execute(
- () -> cb.onError(VirtualMachine.this, errorCode, message));
+ final long restoreToken = Binder.clearCallingIdentity();
+ try {
+ mCallbackExecutor.execute(
+ () -> cb.onError(VirtualMachine.this, errorCode, message));
+ } finally {
+ Binder.restoreCallingIdentity(restoreToken);
+ }
}
@Override
@@ -416,7 +438,13 @@
if (cb == null) {
return;
}
- mCallbackExecutor.execute(() -> cb.onDied(VirtualMachine.this, reason));
+ final long restoreToken = Binder.clearCallingIdentity();
+ try {
+ mCallbackExecutor.execute(
+ () -> cb.onDied(VirtualMachine.this, reason));
+ } finally {
+ Binder.restoreCallingIdentity(restoreToken);
+ }
}
});
service.asBinder()