Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 06dbadf4 authored by Aurélien Pomini's avatar Aurélien Pomini
Browse files

Add permission check in notifyWakingUp/GoingToSleep

These AIDL were not protected by any permission.

Although there is no security risk associated with that, those two
methods are not intended to be public.

Bug: 280419125
Test: atest WallpaperManagerTest
Change-Id: Ia5a22fb2926a533b1aaaaa2cf0f49b46783d07c6
parent 4422c68b
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ import android.os.IBinder;
import android.os.IInterface;
import android.os.IRemoteCallback;
import android.os.ParcelFileDescriptor;
import android.os.Process;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.os.ResultReceiver;
@@ -2514,6 +2515,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
     * Propagate a wake event to the wallpaper engine(s).
     */
    public void notifyWakingUp(int x, int y, @NonNull Bundle extras) {
        checkCallerIsSystemOrSystemUi();
        synchronized (mLock) {
            if (mIsLockscreenLiveWallpaperEnabled) {
                for (WallpaperData data : getActiveWallpapers()) {
@@ -2551,6 +2553,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
     * Propagate a sleep event to the wallpaper engine(s).
     */
    public void notifyGoingToSleep(int x, int y, @NonNull Bundle extras) {
        checkCallerIsSystemOrSystemUi();
        synchronized (mLock) {
            if (mIsLockscreenLiveWallpaperEnabled) {
                for (WallpaperData data : getActiveWallpapers()) {
@@ -3684,6 +3687,14 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
                mActivityManager.getPackageImportance(callingPackage) == IMPORTANCE_FOREGROUND);
    }

    /** Check that the caller is either system_server or systemui */
    private void checkCallerIsSystemOrSystemUi() {
        if (Binder.getCallingUid() != Process.myUid() && mContext.checkCallingPermission(
                android.Manifest.permission.STATUS_BAR_SERVICE) != PERMISSION_GRANTED) {
            throw new SecurityException("Access denied: only system processes can call this");
        }
    }

    /**
     * Certain user types do not support wallpapers (e.g. managed profiles). The check is
     * implemented through through the OP_WRITE_WALLPAPER AppOp.