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

Commit f88ebeb2 authored by Sudheer Shanka's avatar Sudheer Shanka
Browse files

Use correct packageName for checking if it belongs to callingUid.

In AccountManagerService.getAccountsAsUser, we check if opPackageName
belongs to calling uid by calling AppOpsManager.checkPackage. But when
AccountManagerService.getAccountsAsUser is called from
AccountManagerService.addSharedAccountsFromParentUser, we're using the
opPackageName from system context instead of calling context.

Bug: 35258008
Test: cts-tradefed run singleCommand cts-dev --module CtsMultiUserHostTestCases \
      -t android.host.multiuser.CreateUsersPermissionTest#testCanCreateRestrictedUser
Change-Id: I5c425d9314beb86f7c64a5b5c64b7d879711879a
parent d725de1e
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ import android.os.Handler;
import android.os.HandlerThread;
import android.os.IUserManager;
import android.os.ParcelFileDescriptor;
import android.os.Process;
import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.SELinux;
@@ -1004,7 +1005,8 @@ public final class Pm {
                // In non-split user mode, userId can only be SYSTEM
                int parentUserId = userId >= 0 ? userId : UserHandle.USER_SYSTEM;
                info = mUm.createRestrictedProfile(name, parentUserId);
                mAm.addSharedAccountsFromParentUser(parentUserId, userId);
                mAm.addSharedAccountsFromParentUser(parentUserId, userId,
                        (Process.myUid() == Process.ROOT_UID) ? "root" : "com.android.shell");
            } else if (userId < 0) {
                info = mUm.createUser(name, flags);
            } else {
+1 −1
Original line number Diff line number Diff line
@@ -1802,7 +1802,7 @@ public class AccountManager {
    public void addSharedAccountsFromParentUser(UserHandle parentUser, UserHandle user) {
        try {
            mService.addSharedAccountsFromParentUser(parentUser.getIdentifier(),
                    user.getIdentifier());
                    user.getIdentifier(), mContext.getOpPackageName());
        } catch (RemoteException re) {
            throw re.rethrowFromSystemServer();
        }
+1 −1
Original line number Diff line number Diff line
@@ -80,7 +80,7 @@ interface IAccountManager {
    /* Shared accounts */
    Account[] getSharedAccountsAsUser(int userId);
    boolean removeSharedAccountAsUser(in Account account, int userId);
    void addSharedAccountsFromParentUser(int parentUserId, int userId);
    void addSharedAccountsFromParentUser(int parentUserId, int userId, String opPackageName);

    /* Account renaming. */
    void renameAccount(in IAccountManagerResponse response, in Account accountToRename, String newName);
+3 −2
Original line number Diff line number Diff line
@@ -4087,9 +4087,10 @@ public class AccountManagerService
    }

    @Override
    public void addSharedAccountsFromParentUser(int parentUserId, int userId) {
    public void addSharedAccountsFromParentUser(int parentUserId, int userId,
            String opPackageName) {
        checkManageOrCreateUsersPermission("addSharedAccountsFromParentUser");
        Account[] accounts = getAccountsAsUser(null, parentUserId, mContext.getOpPackageName());
        Account[] accounts = getAccountsAsUser(null, parentUserId, opPackageName);
        for (Account account : accounts) {
            addSharedAccountAsUser(account, userId);
        }