Allow the NFC process to call Bluetooth APIs.
The NFC process used to be only running as user 0, and it may be calling into Bluetooth. Most of the handover code has now moved to a separate process running as the current user. Fix the existing checks to take into account the correct NFC UID, whatever user it is running as. Bug: 7309141 Change-Id: I953cfb263a28aef7fe1be5880b053425dc359a29
This commit is contained in:
@@ -43,8 +43,6 @@ import android.os.SystemClock;
|
||||
import android.os.UserHandle;
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
class BluetoothManagerService extends IBluetoothManager.Stub {
|
||||
private static final String TAG = "BluetoothManagerService";
|
||||
private static final boolean DBG = true;
|
||||
@@ -334,9 +332,12 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
|
||||
Log.d(TAG,"enableNoAutoConnect(): mBluetooth =" + mBluetooth +
|
||||
" mBinding = " + mBinding);
|
||||
}
|
||||
if (Binder.getCallingUid() != Process.NFC_UID) {
|
||||
int callingAppId = UserHandle.getAppId(Binder.getCallingUid());
|
||||
|
||||
if (callingAppId != Process.NFC_UID) {
|
||||
throw new SecurityException("no permission to enable Bluetooth quietly");
|
||||
}
|
||||
|
||||
Message msg = mHandler.obtainMessage(MESSAGE_ENABLE);
|
||||
msg.arg1=0; //No persist
|
||||
msg.arg2=1; //Quiet mode
|
||||
@@ -943,11 +944,14 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
|
||||
private boolean checkIfCallerIsForegroundUser() {
|
||||
int foregroundUser;
|
||||
int callingUser = UserHandle.getCallingUserId();
|
||||
int callingUid = Binder.getCallingUid();
|
||||
long callingIdentity = Binder.clearCallingIdentity();
|
||||
int callingAppId = UserHandle.getAppId(callingUid);
|
||||
boolean valid = false;
|
||||
try {
|
||||
foregroundUser = ActivityManager.getCurrentUser();
|
||||
valid = (callingUser == foregroundUser);
|
||||
valid = (callingUser == foregroundUser) ||
|
||||
callingAppId == Process.NFC_UID;
|
||||
if (DBG) {
|
||||
Log.d(TAG, "checkIfCallerIsForegroundUser: valid=" + valid
|
||||
+ " callingUser=" + callingUser
|
||||
|
||||
Reference in New Issue
Block a user