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

Commit 3b906878 authored by Remi NGUYEN VAN's avatar Remi NGUYEN VAN
Browse files

Fix bluetooth tethering on multi-user

Bluetooth runs as UID 1001002 when on a secondary user. With this change
the NetworkStack verifies that the calling UID matches the Bluetooth app
regardless of the user.

Test: flashed, BT reverse tethering still working as primary user
      (no option to turn on as secondary user on phones)
Bug: 123655057
Change-Id: I23f9c5fa40f3bb676ac65dd8c15106c9d78309a4
parent 602df1aa
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -223,7 +223,7 @@ public class NetworkStack {
    private void requestConnector(@NonNull NetworkStackCallback request) {
        // TODO: PID check.
        final int caller = Binder.getCallingUid();
        if (caller != Process.SYSTEM_UID && caller != Process.BLUETOOTH_UID) {
        if (caller != Process.SYSTEM_UID && !UserHandle.isSameApp(caller, Process.BLUETOOTH_UID)) {
            // Don't even attempt to obtain the connector and give a nice error message
            throw new SecurityException(
                    "Only the system server should try to bind to the network stack.");
+2 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.server.util;
import static android.os.Binder.getCallingUid;

import android.os.Process;
import android.os.UserHandle;

/**
 * Utility class to check calling permissions on the network stack.
@@ -32,7 +33,7 @@ public final class PermissionUtil {
    public static void checkNetworkStackCallingPermission() {
        // TODO: check that the calling PID is the system server.
        final int caller = getCallingUid();
        if (caller != Process.SYSTEM_UID && caller != Process.BLUETOOTH_UID) {
        if (caller != Process.SYSTEM_UID && UserHandle.getAppId(caller) != Process.BLUETOOTH_UID) {
            throw new SecurityException("Invalid caller: " + caller);
        }
    }