Fix issue #9074296: Device Admins can activate in a way...
...that makes it impossible to deactive/uninstall them Don't allow device admins to directly launch the add UI if they are malformed. Change-Id: I0d3140222d8015f680e1f199bddae2221ee0e726
This commit is contained in:
@@ -50,6 +50,8 @@ import android.widget.TextView;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class DeviceAdminAdd extends Activity {
|
public class DeviceAdminAdd extends Activity {
|
||||||
static final String TAG = "DeviceAdminAdd";
|
static final String TAG = "DeviceAdminAdd";
|
||||||
@@ -104,7 +106,7 @@ public class DeviceAdminAdd extends Activity {
|
|||||||
finish();
|
finish();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ActivityInfo ai;
|
ActivityInfo ai;
|
||||||
try {
|
try {
|
||||||
ai = getPackageManager().getReceiverInfo(cn, PackageManager.GET_META_DATA);
|
ai = getPackageManager().getReceiverInfo(cn, PackageManager.GET_META_DATA);
|
||||||
@@ -113,7 +115,37 @@ public class DeviceAdminAdd extends Activity {
|
|||||||
finish();
|
finish();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure the given component name is actually a valid device admin.
|
||||||
|
List<ResolveInfo> avail = getPackageManager().queryBroadcastReceivers(
|
||||||
|
new Intent(DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED),
|
||||||
|
PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS);
|
||||||
|
int count = avail == null ? 0 : avail.size();
|
||||||
|
boolean found = false;
|
||||||
|
for (int i=0; i<count; i++) {
|
||||||
|
ResolveInfo ri = avail.get(i);
|
||||||
|
if (ai.packageName.equals(ri.activityInfo.packageName)
|
||||||
|
&& ai.name.equals(ri.activityInfo.name)) {
|
||||||
|
try {
|
||||||
|
// We didn't retrieve the meta data for all possible matches, so
|
||||||
|
// need to use the activity info of this specific one that was retrieved.
|
||||||
|
ri.activityInfo = ai;
|
||||||
|
DeviceAdminInfo dpi = new DeviceAdminInfo(this, ri);
|
||||||
|
found = true;
|
||||||
|
} catch (XmlPullParserException e) {
|
||||||
|
Log.w(TAG, "Bad " + ri.activityInfo, e);
|
||||||
|
} catch (IOException e) {
|
||||||
|
Log.w(TAG, "Bad " + ri.activityInfo, e);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
Log.w(TAG, "Request to add invalid device admin: " + cn);
|
||||||
|
finish();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ResolveInfo ri = new ResolveInfo();
|
ResolveInfo ri = new ResolveInfo();
|
||||||
ri.activityInfo = ai;
|
ri.activityInfo = ai;
|
||||||
try {
|
try {
|
||||||
|
Reference in New Issue
Block a user