diff options
5 files changed, 42 insertions, 33 deletions
diff --git a/core/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl b/core/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl index 2aa17c4681bd..1af3b0f374f1 100644 --- a/core/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl +++ b/core/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl @@ -21,6 +21,7 @@ import android.app.ondeviceintelligence.IResponseCallback; import android.app.ondeviceintelligence.ITokenInfoCallback; import android.app.ondeviceintelligence.IProcessingSignal; import android.app.ondeviceintelligence.Feature; +import android.os.IRemoteCallback; import android.os.ICancellationSignal; import android.os.PersistableBundle; import android.os.Bundle; @@ -34,18 +35,19 @@ import android.service.ondeviceintelligence.IProcessingUpdateStatusCallback; * @hide */ oneway interface IOnDeviceSandboxedInferenceService { - void registerRemoteStorageService(in IRemoteStorageService storageService); + void registerRemoteStorageService(in IRemoteStorageService storageService, + in IRemoteCallback remoteCallback) = 0; void requestTokenInfo(int callerUid, in Feature feature, in Bundle request, in AndroidFuture cancellationSignal, - in ITokenInfoCallback tokenInfoCallback); + in ITokenInfoCallback tokenInfoCallback) = 1; void processRequest(int callerUid, in Feature feature, in Bundle request, in int requestType, in AndroidFuture cancellationSignal, in AndroidFuture processingSignal, - in IResponseCallback callback); + in IResponseCallback callback) = 2; void processRequestStreaming(int callerUid, in Feature feature, in Bundle request, in int requestType, in AndroidFuture cancellationSignal, in AndroidFuture processingSignal, - in IStreamingResponseCallback callback); + in IStreamingResponseCallback callback) = 3; void updateProcessingState(in Bundle processingState, - in IProcessingUpdateStatusCallback callback); + in IProcessingUpdateStatusCallback callback) = 4; }
\ No newline at end of file diff --git a/core/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java b/core/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java index d00485cb1ca5..a77e07662d23 100644 --- a/core/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java +++ b/core/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java @@ -51,6 +51,7 @@ import android.os.Handler; import android.os.HandlerExecutor; import android.os.IBinder; import android.os.ICancellationSignal; +import android.os.IRemoteCallback; import android.os.Looper; import android.os.OutcomeReceiver; import android.os.ParcelFileDescriptor; @@ -148,9 +149,12 @@ public abstract class OnDeviceSandboxedInferenceService extends Service { if (SERVICE_INTERFACE.equals(intent.getAction())) { return new IOnDeviceSandboxedInferenceService.Stub() { @Override - public void registerRemoteStorageService(IRemoteStorageService storageService) { + public void registerRemoteStorageService(IRemoteStorageService storageService, + IRemoteCallback remoteCallback) throws RemoteException { Objects.requireNonNull(storageService); mRemoteStorageService = storageService; + remoteCallback.sendResult( + Bundle.EMPTY); //to notify caller uid to system-server. } @Override diff --git a/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerInternal.java b/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerInternal.java index 81f11b52dcb7..07af8d042420 100644 --- a/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerInternal.java +++ b/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerInternal.java @@ -17,5 +17,5 @@ package com.android.server.ondeviceintelligence; public interface OnDeviceIntelligenceManagerInternal { - String getRemoteServicePackageName(); + int getInferenceServiceUid(); }
\ No newline at end of file diff --git a/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java b/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java index f540f1db6952..59964e0e6e87 100644 --- a/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java +++ b/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java @@ -56,6 +56,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.ICancellationSignal; +import android.os.IRemoteCallback; import android.os.Looper; import android.os.Message; import android.os.ParcelFileDescriptor; @@ -143,6 +144,9 @@ public class OnDeviceIntelligenceManagerService extends SystemService { volatile boolean mIsServiceEnabled; @GuardedBy("mLock") + private int remoteInferenceServiceUid = -1; + + @GuardedBy("mLock") private String[] mTemporaryServiceNames; @GuardedBy("mLock") private String[] mTemporaryBroadcastKeys; @@ -174,7 +178,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService { Context.ON_DEVICE_INTELLIGENCE_SERVICE, getOnDeviceIntelligenceManagerService(), /* allowIsolated = */true); LocalServices.addService(OnDeviceIntelligenceManagerInternal.class, - OnDeviceIntelligenceManagerService.this::getRemoteConfiguredPackageName); + this::getRemoteInferenceServiceUid); } @Override @@ -603,7 +607,13 @@ public class OnDeviceIntelligenceManagerService extends SystemService { try { ensureRemoteIntelligenceServiceInitialized(); service.registerRemoteStorageService( - getIRemoteStorageService()); + getIRemoteStorageService(), new IRemoteCallback.Stub() { + @Override + public void sendResult(Bundle bundle) { + final int uid = Binder.getCallingUid(); + setRemoteInferenceServiceUid(uid); + } + }); mRemoteOnDeviceIntelligenceService.run( IOnDeviceIntelligenceService::notifyInferenceServiceConnected); broadcastExecutor.execute( @@ -1038,4 +1048,16 @@ public class OnDeviceIntelligenceManagerService extends SystemService { Settings.Secure.ON_DEVICE_INTELLIGENCE_IDLE_TIMEOUT_MS, TimeUnit.HOURS.toMillis(1), mContext.getUserId()); } + + private int getRemoteInferenceServiceUid() { + synchronized (mLock) { + return remoteInferenceServiceUid; + } + } + + private void setRemoteInferenceServiceUid(int remoteInferenceServiceUid) { + synchronized (mLock){ + this.remoteInferenceServiceUid = remoteInferenceServiceUid; + } + } } diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java index e2a6b814cec4..f59ae168bdc3 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java @@ -4364,7 +4364,7 @@ public class ComputerEngine implements Computer { uid = getBaseSdkSandboxUid(); } final int callingUserId = UserHandle.getUserId(callingUid); - if (isKnownIsolatedComputeApp(uid, callingUserId)) { + if (isKnownIsolatedComputeApp(uid)) { try { uid = getIsolatedOwner(uid); } catch (IllegalStateException e) { @@ -4407,7 +4407,7 @@ public class ComputerEngine implements Computer { if (Process.isSdkSandboxUid(uid)) { uid = getBaseSdkSandboxUid(); } - if (isKnownIsolatedComputeApp(uid, callingUserId)) { + if (isKnownIsolatedComputeApp(uid)) { try { uid = getIsolatedOwner(uid); } catch (IllegalStateException e) { @@ -5809,7 +5809,7 @@ public class ComputerEngine implements Computer { } - private boolean isKnownIsolatedComputeApp(int uid, int callingUserId) { + private boolean isKnownIsolatedComputeApp(int uid) { if (!Process.isIsolatedUid(uid)) { return false; } @@ -5822,27 +5822,8 @@ public class ComputerEngine implements Computer { } OnDeviceIntelligenceManagerInternal onDeviceIntelligenceManagerInternal = mInjector.getLocalService(OnDeviceIntelligenceManagerInternal.class); - if (onDeviceIntelligenceManagerInternal == null) { - return false; - } - - String onDeviceIntelligencePackage = - onDeviceIntelligenceManagerInternal.getRemoteServicePackageName(); - if (onDeviceIntelligencePackage == null) { - return false; - } - - try { - if (getIsolatedOwner(uid) == getPackageUid(onDeviceIntelligencePackage, 0, - callingUserId)) { - return true; - } - } catch (IllegalStateException e) { - // If the owner uid doesn't exist, just use the current uid - Slog.wtf(TAG, "Expected isolated uid " + uid + " to have an owner", e); - } - - return false; + return onDeviceIntelligenceManagerInternal != null + && uid == onDeviceIntelligenceManagerInternal.getInferenceServiceUid(); } @Nullable |