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

Commit 254d9df2 authored by Rick Yiu's avatar Rick Yiu
Browse files

Revert "NetworkCapabilities: Embed location senstive TransportInfo"

Revert "WifiLocationTest: Add test for Wifi TransportInfo"

Revert "WifiInfo: Embed location sensitive TransportInfo"

Revert submission 13274595

Reason for revert: DroidMonitor: Potential culprit for Bug 177390648 - verifying through Forrest before revert submission. This is part of the standard investigation process, and does not mean your CL will be reverted.
Reverted Changes:
Ibcf0c6711:WifiInfo: Embed location sensitive TransportInfo
Ic68546e2a:WifiService: Use WifiInfo for masking
Ie522d8c75:NetworkCapabilities: Embed location senstive Trans...
Iaf0fef999:WifiLocationTest: Add test for Wifi TransportInfo
I017de6d4c:ClientModeImpl: Fill info elements for connected b...
I384c9321e:WifiInfo: Add info elements for connected bssid

Change-Id: I4e96850b96dc5ea71d9bb6af2ff17343b8d09d68
parent e9261ea9
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -6851,7 +6851,6 @@ package android.net {
  }
  public final class NetworkCapabilities implements android.os.Parcelable {
    ctor public NetworkCapabilities(@Nullable android.net.NetworkCapabilities, boolean);
    method @NonNull public int[] getAdministratorUids();
    method @Nullable public String getSsid();
    method @NonNull public int[] getTransportTypes();
@@ -7073,11 +7072,6 @@ package android.net {
    field public static final int TAG_SYSTEM_IMPERSONATION_RANGE_START = -256; // 0xffffff00
  }
  public interface TransportInfo {
    method public default boolean hasLocationSensitiveFields();
    method @NonNull public default android.net.TransportInfo makeCopy(boolean);
  }
  public abstract class Uri implements java.lang.Comparable<android.net.Uri> android.os.Parcelable {
    method @NonNull public String toSafeString();
  }
+2 −5
Original line number Diff line number Diff line
@@ -408,8 +408,7 @@ public abstract class NetworkAgent {
            throw new IllegalArgumentException();
        }

        mInitialConfiguration = new InitialConfiguration(context,
                new NetworkCapabilities(nc, /* parcelLocationSensitiveFields */ true),
        mInitialConfiguration = new InitialConfiguration(context, new NetworkCapabilities(nc),
                new LinkProperties(lp), score, config, ni);
    }

@@ -819,9 +818,7 @@ public abstract class NetworkAgent {
        Objects.requireNonNull(networkCapabilities);
        mBandwidthUpdatePending.set(false);
        mLastBwRefreshTime = System.currentTimeMillis();
        final NetworkCapabilities nc =
                new NetworkCapabilities(networkCapabilities,
                        /* parcelLocationSensitiveFields */ true);
        final NetworkCapabilities nc = new NetworkCapabilities(networkCapabilities);
        queueOrSendMessage(reg -> reg.sendNetworkCapabilities(nc));
    }

+1 −34
Original line number Diff line number Diff line
@@ -76,33 +76,12 @@ public final class NetworkCapabilities implements Parcelable {
     */
    private String mRequestorPackageName;

    /**
     * Indicates whether parceling should preserve fields that are set based on permissions of
     * the process receiving the {@link NetworkCapabilities}.
     */
    private final boolean mParcelLocationSensitiveFields;

    public NetworkCapabilities() {
        mParcelLocationSensitiveFields = false;
        clearAll();
        mNetworkCapabilities = DEFAULT_CAPABILITIES;
    }

    public NetworkCapabilities(NetworkCapabilities nc) {
        this(nc, false /* parcelLocationSensitiveFields */);
    }

    /**
     * Make a copy of NetworkCapabilities.
     *
     * @param nc Original NetworkCapabilities
     * @param parcelLocationSensitiveFields Whether to parcel location sensitive data or not.
     * @hide
     */
    @SystemApi
    public NetworkCapabilities(
            @Nullable NetworkCapabilities nc, boolean parcelLocationSensitiveFields) {
        mParcelLocationSensitiveFields = parcelLocationSensitiveFields;
        if (nc != null) {
            set(nc);
        }
@@ -114,12 +93,6 @@ public final class NetworkCapabilities implements Parcelable {
     * @hide
     */
    public void clearAll() {
        // Ensures that the internal copies maintained by the connectivity stack does not set
        // this bit.
        if (mParcelLocationSensitiveFields) {
            throw new UnsupportedOperationException(
                    "Cannot clear NetworkCapabilities when parcelLocationSensitiveFields is set");
        }
        mNetworkCapabilities = mTransportTypes = mUnwantedNetworkCapabilities = 0;
        mLinkUpBandwidthKbps = mLinkDownBandwidthKbps = LINK_BANDWIDTH_UNSPECIFIED;
        mNetworkSpecifier = null;
@@ -136,8 +109,6 @@ public final class NetworkCapabilities implements Parcelable {

    /**
     * Set all contents of this object to the contents of a NetworkCapabilities.
     *
     * @param nc Original NetworkCapabilities
     * @hide
     */
    public void set(@NonNull NetworkCapabilities nc) {
@@ -146,11 +117,7 @@ public final class NetworkCapabilities implements Parcelable {
        mLinkUpBandwidthKbps = nc.mLinkUpBandwidthKbps;
        mLinkDownBandwidthKbps = nc.mLinkDownBandwidthKbps;
        mNetworkSpecifier = nc.mNetworkSpecifier;
        if (nc.getTransportInfo() != null) {
            setTransportInfo(nc.getTransportInfo().makeCopy(mParcelLocationSensitiveFields));
        } else {
            setTransportInfo(null);
        }
        mTransportInfo = nc.mTransportInfo;
        mSignalStrength = nc.mSignalStrength;
        setUids(nc.mUids); // Will make the defensive copy
        setAdministratorUids(nc.getAdministratorUids());
+0 −38
Original line number Diff line number Diff line
@@ -16,48 +16,10 @@

package android.net;

import android.annotation.NonNull;
import android.annotation.SystemApi;

/**
 * A container for transport-specific capabilities which is returned by
 * {@link NetworkCapabilities#getTransportInfo()}. Specific networks
 * may provide concrete implementations of this interface.
 * @see android.net.wifi.aware.WifiAwareNetworkInfo
 * @see android.net.wifi.WifiInfo
 */
public interface TransportInfo {

    /**
     * Create a copy of a {@link TransportInfo} that will preserve location sensitive fields that
     * were set based on the permissions of the process that originally received it.
     *
     * <p>By default {@link TransportInfo} does not preserve such fields during parceling, as
     * they should not be shared outside of the process that receives them without appropriate
     * checks.
     *
     * @param parcelLocationSensitiveFields Whether the location sensitive fields should be kept
     *                                      when parceling
     * @return Copy of this instance.
     * @hide
     */
    @SystemApi
    @NonNull
    default TransportInfo makeCopy(boolean parcelLocationSensitiveFields) {
        return this;
    }

    /**
     * Returns whether this TransportInfo type has location sensitive fields or not (helps
     * to determine whether to perform a location permission check or not before sending to
     * apps).
     *
     * @return {@code true} if this instance contains location sensitive info, {@code false}
     * otherwise.
     * @hide
     */
    @SystemApi
    default boolean hasLocationSensitiveFields() {
        return false;
    }
}
+21 −37
Original line number Diff line number Diff line
@@ -1557,7 +1557,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
        if (nc != null) {
            result.put(
                    nai.network,
                    createWithLocationInfoSanitizedIfNecessaryWhenParceled(
                    maybeSanitizeLocationInfoForCaller(
                            nc, mDeps.getCallingUid(), callingPackageName));
        }

@@ -1567,9 +1567,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
            for (Network network : networks) {
                nc = getNetworkCapabilitiesInternal(network);
                if (nc != null) {
                    result.put(
                            network,
                            createWithLocationInfoSanitizedIfNecessaryWhenParceled(
                    result.put(network, maybeSanitizeLocationInfoForCaller(
                                    nc, mDeps.getCallingUid(), callingPackageName));
                }
            }
@@ -1651,7 +1649,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
    public NetworkCapabilities getNetworkCapabilities(Network network, String callingPackageName) {
        mAppOpsManager.checkPackage(mDeps.getCallingUid(), callingPackageName);
        enforceAccessPermission();
        return createWithLocationInfoSanitizedIfNecessaryWhenParceled(
        return maybeSanitizeLocationInfoForCaller(
                getNetworkCapabilitiesInternal(network),
                mDeps.getCallingUid(), callingPackageName);
    }
@@ -1672,51 +1670,37 @@ public class ConnectivityService extends IConnectivityManager.Stub
        return newNc;
    }

    private boolean hasLocationPermission(int callerUid, @NonNull String callerPkgName) {
        final long token = Binder.clearCallingIdentity();
        try {
            return mLocationPermissionChecker.checkLocationPermission(
                    callerPkgName, null /* featureId */, callerUid, null /* message */);
        } finally {
            Binder.restoreCallingIdentity(token);
        }
    }

    @VisibleForTesting
    @Nullable
    NetworkCapabilities createWithLocationInfoSanitizedIfNecessaryWhenParceled(
    NetworkCapabilities maybeSanitizeLocationInfoForCaller(
            @Nullable NetworkCapabilities nc, int callerUid, @NonNull String callerPkgName) {
        if (nc == null) {
            return null;
        }
        Boolean hasLocationPermission = null;
        final NetworkCapabilities newNc;
        // Avoid doing location permission check if the transport info has no location sensitive
        // data.
        if (nc.getTransportInfo() != null && nc.getTransportInfo().hasLocationSensitiveFields()) {
            hasLocationPermission = hasLocationPermission(callerUid, callerPkgName);
            newNc = new NetworkCapabilities(nc, hasLocationPermission);
        } else {
            newNc = new NetworkCapabilities(nc, false /* parcelLocationSensitiveFields */);
        }
        // Reset owner uid if not destined for the owner app.
        if (callerUid != nc.getOwnerUid()) {
        final NetworkCapabilities newNc = new NetworkCapabilities(nc);
        if (callerUid != newNc.getOwnerUid()) {
            newNc.setOwnerUid(INVALID_UID);
            return newNc;
        }

        // Allow VPNs to see ownership of their own VPN networks - not location sensitive.
        if (nc.hasTransport(TRANSPORT_VPN)) {
            // Owner UIDs already checked above. No need to re-check.
            return newNc;
        }
        if (hasLocationPermission == null) {
            // Location permission not checked yet, check now for masking owner UID.
            hasLocationPermission = hasLocationPermission(callerUid, callerPkgName);
        }
        // Reset owner uid if the app has no location permission.
        if (!hasLocationPermission) {

        final long token = Binder.clearCallingIdentity();
        try {
            if (!mLocationPermissionChecker.checkLocationPermission(
                    callerPkgName, null /* featureId */, callerUid, null /* message */)) {
                // Caller does not have the requisite location permissions. Reset the
                // owner's UID in the NetworkCapabilities.
                newNc.setOwnerUid(INVALID_UID);
            }
        } finally {
            Binder.restoreCallingIdentity(token);
        }

        return newNc;
    }

@@ -6855,7 +6839,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
                                networkAgent.networkCapabilities, nri.mPid, nri.mUid);
                putParcelable(
                        bundle,
                        createWithLocationInfoSanitizedIfNecessaryWhenParceled(
                        maybeSanitizeLocationInfoForCaller(
                                nc, nri.mUid, nri.request.getRequestorPackageName()));
                putParcelable(bundle, linkPropertiesRestrictedForCallerPermissions(
                        networkAgent.linkProperties, nri.mPid, nri.mUid));
@@ -6874,7 +6858,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
                                networkAgent.networkCapabilities, nri.mPid, nri.mUid);
                putParcelable(
                        bundle,
                        createWithLocationInfoSanitizedIfNecessaryWhenParceled(
                        maybeSanitizeLocationInfoForCaller(
                                netCap, nri.mUid, nri.request.getRequestorPackageName()));
                break;
            }
Loading