Loading core/java/com/android/server/SystemConfig.java +15 −0 Original line number Diff line number Diff line Loading @@ -206,6 +206,8 @@ public class SystemConfig { // associate with any other apps, but does not limit what apps B can associate with. final ArrayMap<String, ArraySet<String>> mAllowedAssociations = new ArrayMap<>(); private final ArraySet<String> mBugreportWhitelistedPackages = new ArraySet<>(); public static SystemConfig getInstance() { synchronized (SystemConfig.class) { if (sInstance == null) { Loading Loading @@ -339,6 +341,10 @@ public class SystemConfig { return mAllowedAssociations; } public ArraySet<String> getBugreportWhitelistedPackages() { return mBugreportWhitelistedPackages; } SystemConfig() { // Read configuration from system readPermissions(Environment.buildPath( Loading Loading @@ -924,6 +930,15 @@ public class SystemConfig { } XmlUtils.skipCurrentTag(parser); } break; case "bugreport-whitelisted": { String pkgname = parser.getAttributeValue(null, "package"); if (pkgname == null) { Slog.w(TAG, "<" + name + "> without package in " + permFile + " at " + parser.getPositionDescription()); } else { mBugreportWhitelistedPackages.add(pkgname); } } break; default: { Slog.w(TAG, "Tag " + name + " is unknown in " + permFile + " at " + parser.getPositionDescription()); Loading services/core/java/com/android/server/os/BugreportManagerServiceImpl.java +9 −0 Original line number Diff line number Diff line Loading @@ -31,10 +31,12 @@ import android.os.ServiceManager; import android.os.SystemClock; import android.os.SystemProperties; import android.os.UserManager; import android.util.ArraySet; import android.util.Slog; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.Preconditions; import com.android.server.SystemConfig; import java.io.FileDescriptor; Loading @@ -55,10 +57,13 @@ class BugreportManagerServiceImpl extends IDumpstate.Stub { private final Object mLock = new Object(); private final Context mContext; private final AppOpsManager mAppOps; private final ArraySet<String> mBugreportWhitelistedPackages; BugreportManagerServiceImpl(Context context) { mContext = context; mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); mBugreportWhitelistedPackages = SystemConfig.getInstance().getBugreportWhitelistedPackages(); } @Override Loading Loading @@ -88,6 +93,10 @@ class BugreportManagerServiceImpl extends IDumpstate.Stub { int callingUid = Binder.getCallingUid(); mAppOps.checkPackage(callingUid, callingPackage); if (!mBugreportWhitelistedPackages.contains(callingPackage)) { throw new SecurityException( callingPackage + " is not whitelisted to use Bugreport API"); } synchronized (mLock) { startBugreportLocked(callingUid, callingPackage, bugreportFd, screenshotFd, bugreportMode, listener); Loading Loading
core/java/com/android/server/SystemConfig.java +15 −0 Original line number Diff line number Diff line Loading @@ -206,6 +206,8 @@ public class SystemConfig { // associate with any other apps, but does not limit what apps B can associate with. final ArrayMap<String, ArraySet<String>> mAllowedAssociations = new ArrayMap<>(); private final ArraySet<String> mBugreportWhitelistedPackages = new ArraySet<>(); public static SystemConfig getInstance() { synchronized (SystemConfig.class) { if (sInstance == null) { Loading Loading @@ -339,6 +341,10 @@ public class SystemConfig { return mAllowedAssociations; } public ArraySet<String> getBugreportWhitelistedPackages() { return mBugreportWhitelistedPackages; } SystemConfig() { // Read configuration from system readPermissions(Environment.buildPath( Loading Loading @@ -924,6 +930,15 @@ public class SystemConfig { } XmlUtils.skipCurrentTag(parser); } break; case "bugreport-whitelisted": { String pkgname = parser.getAttributeValue(null, "package"); if (pkgname == null) { Slog.w(TAG, "<" + name + "> without package in " + permFile + " at " + parser.getPositionDescription()); } else { mBugreportWhitelistedPackages.add(pkgname); } } break; default: { Slog.w(TAG, "Tag " + name + " is unknown in " + permFile + " at " + parser.getPositionDescription()); Loading
services/core/java/com/android/server/os/BugreportManagerServiceImpl.java +9 −0 Original line number Diff line number Diff line Loading @@ -31,10 +31,12 @@ import android.os.ServiceManager; import android.os.SystemClock; import android.os.SystemProperties; import android.os.UserManager; import android.util.ArraySet; import android.util.Slog; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.Preconditions; import com.android.server.SystemConfig; import java.io.FileDescriptor; Loading @@ -55,10 +57,13 @@ class BugreportManagerServiceImpl extends IDumpstate.Stub { private final Object mLock = new Object(); private final Context mContext; private final AppOpsManager mAppOps; private final ArraySet<String> mBugreportWhitelistedPackages; BugreportManagerServiceImpl(Context context) { mContext = context; mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); mBugreportWhitelistedPackages = SystemConfig.getInstance().getBugreportWhitelistedPackages(); } @Override Loading Loading @@ -88,6 +93,10 @@ class BugreportManagerServiceImpl extends IDumpstate.Stub { int callingUid = Binder.getCallingUid(); mAppOps.checkPackage(callingUid, callingPackage); if (!mBugreportWhitelistedPackages.contains(callingPackage)) { throw new SecurityException( callingPackage + " is not whitelisted to use Bugreport API"); } synchronized (mLock) { startBugreportLocked(callingUid, callingPackage, bugreportFd, screenshotFd, bugreportMode, listener); Loading