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()