summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiashen Wang <jiashenwang@google.com>2020-01-27 19:03:06 -0800
committerJiashen Wang <jiashenwang@google.com>2020-02-08 15:35:50 -0800
commit4cb4e19ccee06764e63bca94fa2f674bf1a254e8 (patch)
tree17aa80b7e2ac11f818202d3ed5364f3e1c2a2b4d
parent57c17a81367dd2c21d9196dff7d507d730eef98a (diff)
Clear calling identity when executing the callback
Callbacks need to be executed within Binder.clearCallingIdentity() since user code executed in the callback should be with the calling pid/uid of the app, not the system. Bug: 117795921 Test: Manually tested on eSIM operations Change-Id: Ie50315e3fd287559ed516a24de09af6707c03d2f Merged-In: Ie50315e3fd287559ed516a24de09af6707c03d2f
-rw-r--r--telephony/java/android/telephony/euicc/EuiccCardManager.java158
1 files changed, 136 insertions, 22 deletions
diff --git a/telephony/java/android/telephony/euicc/EuiccCardManager.java b/telephony/java/android/telephony/euicc/EuiccCardManager.java
index 994c49cd2315..e52be44d9797 100644
--- a/telephony/java/android/telephony/euicc/EuiccCardManager.java
+++ b/telephony/java/android/telephony/euicc/EuiccCardManager.java
@@ -20,6 +20,7 @@ import android.annotation.IntDef;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.content.Context;
+import android.os.Binder;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.service.euicc.EuiccProfileInfo;
@@ -165,7 +166,12 @@ public class EuiccCardManager {
new IGetAllProfilesCallback.Stub() {
@Override
public void onComplete(int resultCode, EuiccProfileInfo[] profiles) {
- executor.execute(() -> callback.onComplete(resultCode, profiles));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, profiles));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -189,7 +195,12 @@ public class EuiccCardManager {
new IGetProfileCallback.Stub() {
@Override
public void onComplete(int resultCode, EuiccProfileInfo profile) {
- executor.execute(() -> callback.onComplete(resultCode, profile));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, profile));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -214,7 +225,12 @@ public class EuiccCardManager {
refresh, new IDisableProfileCallback.Stub() {
@Override
public void onComplete(int resultCode) {
- executor.execute(() -> callback.onComplete(resultCode, null));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, null));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -240,7 +256,12 @@ public class EuiccCardManager {
refresh, new ISwitchToProfileCallback.Stub() {
@Override
public void onComplete(int resultCode, EuiccProfileInfo profile) {
- executor.execute(() -> callback.onComplete(resultCode, profile));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, profile));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -265,7 +286,12 @@ public class EuiccCardManager {
nickname, new ISetNicknameCallback.Stub() {
@Override
public void onComplete(int resultCode) {
- executor.execute(() -> callback.onComplete(resultCode, null));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, null));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -289,7 +315,12 @@ public class EuiccCardManager {
new IDeleteProfileCallback.Stub() {
@Override
public void onComplete(int resultCode) {
- executor.execute(() -> callback.onComplete(resultCode, null));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, null));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -314,7 +345,12 @@ public class EuiccCardManager {
new IResetMemoryCallback.Stub() {
@Override
public void onComplete(int resultCode) {
- executor.execute(() -> callback.onComplete(resultCode, null));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, null));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -337,7 +373,12 @@ public class EuiccCardManager {
new IGetDefaultSmdpAddressCallback.Stub() {
@Override
public void onComplete(int resultCode, String address) {
- executor.execute(() -> callback.onComplete(resultCode, address));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, address));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -360,7 +401,12 @@ public class EuiccCardManager {
new IGetSmdsAddressCallback.Stub() {
@Override
public void onComplete(int resultCode, String address) {
- executor.execute(() -> callback.onComplete(resultCode, address));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, address));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -385,7 +431,12 @@ public class EuiccCardManager {
new ISetDefaultSmdpAddressCallback.Stub() {
@Override
public void onComplete(int resultCode) {
- executor.execute(() -> callback.onComplete(resultCode, null));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, null));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -408,7 +459,12 @@ public class EuiccCardManager {
new IGetRulesAuthTableCallback.Stub() {
@Override
public void onComplete(int resultCode, EuiccRulesAuthTable rat) {
- executor.execute(() -> callback.onComplete(resultCode, rat));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, rat));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -431,7 +487,12 @@ public class EuiccCardManager {
new IGetEuiccChallengeCallback.Stub() {
@Override
public void onComplete(int resultCode, byte[] challenge) {
- executor.execute(() -> callback.onComplete(resultCode, challenge));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, challenge));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -454,7 +515,12 @@ public class EuiccCardManager {
new IGetEuiccInfo1Callback.Stub() {
@Override
public void onComplete(int resultCode, byte[] info) {
- executor.execute(() -> callback.onComplete(resultCode, info));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, info));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -477,7 +543,12 @@ public class EuiccCardManager {
new IGetEuiccInfo2Callback.Stub() {
@Override
public void onComplete(int resultCode, byte[] info) {
- executor.execute(() -> callback.onComplete(resultCode, info));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, info));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -519,7 +590,12 @@ public class EuiccCardManager {
new IAuthenticateServerCallback.Stub() {
@Override
public void onComplete(int resultCode, byte[] response) {
- executor.execute(() -> callback.onComplete(resultCode, response));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, response));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -558,7 +634,12 @@ public class EuiccCardManager {
new IPrepareDownloadCallback.Stub() {
@Override
public void onComplete(int resultCode, byte[] response) {
- executor.execute(() -> callback.onComplete(resultCode, response));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, response));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -586,7 +667,12 @@ public class EuiccCardManager {
new ILoadBoundProfilePackageCallback.Stub() {
@Override
public void onComplete(int resultCode, byte[] response) {
- executor.execute(() -> callback.onComplete(resultCode, response));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, response));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -616,7 +702,12 @@ public class EuiccCardManager {
new ICancelSessionCallback.Stub() {
@Override
public void onComplete(int resultCode, byte[] response) {
- executor.execute(() -> callback.onComplete(resultCode, response));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, response));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -640,7 +731,13 @@ public class EuiccCardManager {
new IListNotificationsCallback.Stub() {
@Override
public void onComplete(int resultCode, EuiccNotification[] notifications) {
- executor.execute(() -> callback.onComplete(resultCode, notifications));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(
+ resultCode, notifications));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -664,7 +761,13 @@ public class EuiccCardManager {
events, new IRetrieveNotificationListCallback.Stub() {
@Override
public void onComplete(int resultCode, EuiccNotification[] notifications) {
- executor.execute(() -> callback.onComplete(resultCode, notifications));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(
+ resultCode, notifications));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -688,7 +791,13 @@ public class EuiccCardManager {
seqNumber, new IRetrieveNotificationCallback.Stub() {
@Override
public void onComplete(int resultCode, EuiccNotification notification) {
- executor.execute(() -> callback.onComplete(resultCode, notification));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(
+ resultCode, notification));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {
@@ -715,7 +824,12 @@ public class EuiccCardManager {
new IRemoveNotificationFromListCallback.Stub() {
@Override
public void onComplete(int resultCode) {
- executor.execute(() -> callback.onComplete(resultCode, null));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onComplete(resultCode, null));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
});
} catch (RemoteException e) {