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
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user