diff options
4 files changed, 45 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityClientController.java b/services/core/java/com/android/server/wm/ActivityClientController.java index 5fe853a38dd7..ce951b85ffe6 100644 --- a/services/core/java/com/android/server/wm/ActivityClientController.java +++ b/services/core/java/com/android/server/wm/ActivityClientController.java @@ -54,6 +54,7 @@ import android.content.res.Configuration; import android.os.Binder; import android.os.Bundle; import android.os.IBinder; +import android.os.Parcel; import android.os.PersistableBundle; import android.os.RemoteException; import android.os.SystemClock; @@ -100,6 +101,17 @@ class ActivityClientController extends IActivityClientController.Stub { } @Override + public boolean onTransact(int code, Parcel data, Parcel reply, int flags) + throws RemoteException { + try { + return super.onTransact(code, data, reply, flags); + } catch (RuntimeException e) { + throw ActivityTaskManagerService.logAndRethrowRuntimeExceptionOnTransact( + "ActivityClientController", e); + } + } + + @Override public void activityIdle(IBinder token, Configuration config, boolean stopProfiling) { final long origId = Binder.clearCallingIdentity(); try { diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index a97eb7fb2235..2d6e9b2c68c5 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -4849,13 +4849,19 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { try { return super.onTransact(code, data, reply, flags); } catch (RuntimeException e) { - if (!(e instanceof SecurityException)) { - Slog.w(TAG, "Activity Task Manager onTransact aborts " - + " UID:" + Binder.getCallingUid() - + " PID:" + Binder.getCallingPid(), e); - } - throw e; + throw logAndRethrowRuntimeExceptionOnTransact(TAG, e); + } + } + + /** Provides the full stack traces of non-security exception that occurs in onTransact. */ + static RuntimeException logAndRethrowRuntimeExceptionOnTransact(String name, + RuntimeException e) { + if (!(e instanceof SecurityException)) { + Slog.w(TAG, name + " onTransact aborts" + + " UID:" + Binder.getCallingUid() + + " PID:" + Binder.getCallingPid(), e); } + throw e; } /** diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java index b3e010872d3b..9fac3f003f70 100644 --- a/services/core/java/com/android/server/wm/TaskOrganizerController.java +++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java @@ -20,6 +20,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_WINDOW_ORGANIZER; +import static com.android.server.wm.ActivityTaskManagerService.enforceTaskPermission; import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING; import static com.android.server.wm.WindowOrganizerController.CONTROLLABLE_CONFIGS; import static com.android.server.wm.WindowOrganizerController.CONTROLLABLE_WINDOW_CONFIGS; @@ -33,6 +34,7 @@ import android.content.pm.ActivityInfo; import android.content.pm.ParceledListSlice; import android.os.Binder; import android.os.IBinder; +import android.os.Parcel; import android.os.RemoteException; import android.util.Slog; import android.view.SurfaceControl; @@ -357,8 +359,14 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { mGlobalLock = atm.mGlobalLock; } - private void enforceTaskPermission(String func) { - mService.enforceTaskPermission(func); + @Override + public boolean onTransact(int code, Parcel data, Parcel reply, int flags) + throws RemoteException { + try { + return super.onTransact(code, data, reply, flags); + } catch (RuntimeException e) { + throw ActivityTaskManagerService.logAndRethrowRuntimeExceptionOnTransact(TAG, e); + } } /** diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java index 1b81914bbe7c..bd7116a7e2aa 100644 --- a/services/core/java/com/android/server/wm/WindowOrganizerController.java +++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java @@ -40,6 +40,7 @@ import android.graphics.PixelFormat; import android.graphics.Rect; import android.os.Binder; import android.os.IBinder; +import android.os.Parcel; import android.os.RemoteException; import android.util.ArraySet; import android.util.Slog; @@ -112,6 +113,16 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub } @Override + public boolean onTransact(int code, Parcel data, Parcel reply, int flags) + throws RemoteException { + try { + return super.onTransact(code, data, reply, flags); + } catch (RuntimeException e) { + throw ActivityTaskManagerService.logAndRethrowRuntimeExceptionOnTransact(TAG, e); + } + } + + @Override public void applyTransaction(WindowContainerTransaction t) { enforceTaskPermission("applyTransaction()"); if (t == null) { |