Do not access MTP devices when disabled.

am: 5201f1e61c

Change-Id: I9aa036678f2677054666b137533e61eaeac88159
This commit is contained in:
Philip P. Moltmann
2016-10-06 19:55:28 +00:00
committed by android-build-merger
4 changed files with 45 additions and 9 deletions

View File

@@ -16,8 +16,10 @@
package android.hardware.usb;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.os.ParcelFileDescriptor;
import java.io.FileDescriptor;
@@ -31,6 +33,8 @@ public class UsbDeviceConnection {
private final UsbDevice mDevice;
private Context mContext;
// used by the JNI code
private long mNativeContext;
@@ -42,10 +46,21 @@ public class UsbDeviceConnection {
mDevice = device;
}
/* package */ boolean open(String name, ParcelFileDescriptor pfd) {
/* package */ boolean open(String name, ParcelFileDescriptor pfd, @NonNull Context context) {
mContext = context.getApplicationContext();
return native_open(name, pfd.getFileDescriptor());
}
/**
* @return The application context the connection was created for.
*
* @hide
*/
public @Nullable Context getContext() {
return mContext;
}
/**
* Releases all system resources related to the device.
* Once the object is closed it cannot be used again.

View File

@@ -330,7 +330,7 @@ public class UsbManager {
ParcelFileDescriptor pfd = mService.openDevice(deviceName);
if (pfd != null) {
UsbDeviceConnection connection = new UsbDeviceConnection(device);
boolean result = connection.open(deviceName, pfd);
boolean result = connection.open(deviceName, pfd, mContext);
pfd.close();
if (result) {
return connection;

View File

@@ -18,11 +18,13 @@ package android.mtp;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbDeviceConnection;
import android.os.CancellationSignal;
import android.os.ParcelFileDescriptor;
import android.os.UserManager;
import com.android.internal.util.Preconditions;
import java.io.IOException;
@@ -62,7 +64,17 @@ public final class MtpDevice {
* @return true if the device was successfully opened.
*/
public boolean open(UsbDeviceConnection connection) {
boolean result = native_open(mDevice.getDeviceName(), connection.getFileDescriptor());
boolean result = false;
Context context = connection.getContext();
if (context != null) {
UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
if (!userManager.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER)) {
result = native_open(mDevice.getDeviceName(), connection.getFileDescriptor());
}
}
if (!result) {
connection.close();
}

View File

@@ -1437,13 +1437,22 @@ class MountService extends IMountService.Stub
* Decide if volume is mountable per device policies.
*/
private boolean isMountDisallowed(VolumeInfo vol) {
if (vol.type == VolumeInfo.TYPE_PUBLIC || vol.type == VolumeInfo.TYPE_PRIVATE) {
final UserManager userManager = mContext.getSystemService(UserManager.class);
return userManager.hasUserRestriction(UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA,
UserManager userManager = mContext.getSystemService(UserManager.class);
boolean isUsbRestricted = false;
if (vol.disk != null && vol.disk.isUsb()) {
isUsbRestricted = userManager.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER,
Binder.getCallingUserHandle());
} else {
return false;
}
boolean isTypeRestricted = false;
if (vol.type == VolumeInfo.TYPE_PUBLIC || vol.type == VolumeInfo.TYPE_PRIVATE) {
isTypeRestricted = userManager
.hasUserRestriction(UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA,
Binder.getCallingUserHandle());
}
return isUsbRestricted || isTypeRestricted;
}
private void enforceAdminUser() {