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

Commit 1d050e01 authored by Roshan Pius's avatar Roshan Pius Committed by Android (Google) Code Review
Browse files

Merge "resolve merge conflicts of 403b7fd0 to...

Merge "resolve merge conflicts of 403b7fd0 to stage-aosp-master" into sc-dev
parents 819ee3fe 00617edb
Loading
Loading
Loading
Loading
+11 −0
Original line number Original line Diff line number Diff line
@@ -40,7 +40,13 @@ package android.net {
  }
  }


  public final class NetworkCapabilities implements android.os.Parcelable {
  public final class NetworkCapabilities implements android.os.Parcelable {
    ctor public NetworkCapabilities(@Nullable android.net.NetworkCapabilities, long);
    method @Nullable public java.util.Set<android.util.Range<java.lang.Integer>> getUids();
    method @Nullable public java.util.Set<android.util.Range<java.lang.Integer>> getUids();
    field public static final long REDACT_ALL = -1L; // 0xffffffffffffffffL
    field public static final long REDACT_FOR_ACCESS_FINE_LOCATION = 1L; // 0x1L
    field public static final long REDACT_FOR_LOCAL_MAC_ADDRESS = 2L; // 0x2L
    field public static final long REDACT_FOR_NETWORK_SETTINGS = 4L; // 0x4L
    field public static final long REDACT_NONE = 0L; // 0x0L
    field public static final int TRANSPORT_TEST = 7; // 0x7
    field public static final int TRANSPORT_TEST = 7; // 0x7
  }
  }


@@ -92,6 +98,11 @@ package android.net {
    field @NonNull public static final android.os.Parcelable.Creator<android.net.TestNetworkSpecifier> CREATOR;
    field @NonNull public static final android.os.Parcelable.Creator<android.net.TestNetworkSpecifier> CREATOR;
  }
  }


  public interface TransportInfo {
    method public default long getApplicableRedactions();
    method @NonNull public default android.net.TransportInfo makeCopy(long);
  }

  public final class VpnTransportInfo implements android.os.Parcelable android.net.TransportInfo {
  public final class VpnTransportInfo implements android.os.Parcelable android.net.TransportInfo {
    ctor public VpnTransportInfo(int);
    ctor public VpnTransportInfo(int);
    method public int describeContents();
    method public int describeContents();
+0 −6
Original line number Original line Diff line number Diff line
@@ -261,7 +261,6 @@ package android.net {
  }
  }


  public final class NetworkCapabilities implements android.os.Parcelable {
  public final class NetworkCapabilities implements android.os.Parcelable {
    ctor public NetworkCapabilities(@Nullable android.net.NetworkCapabilities, boolean);
    method @NonNull public int[] getAdministratorUids();
    method @NonNull public int[] getAdministratorUids();
    method @Nullable public String getSsid();
    method @Nullable public String getSsid();
    method @NonNull public int[] getTransportTypes();
    method @NonNull public int[] getTransportTypes();
@@ -435,11 +434,6 @@ package android.net {
    field public final int tcpWindowScale;
    field public final int tcpWindowScale;
  }
  }


  public interface TransportInfo {
    method public default boolean hasLocationSensitiveFields();
    method @NonNull public default android.net.TransportInfo makeCopy(boolean);
  }

}
}


package android.net.apf {
package android.net.apf {
+2 −3
Original line number Original line Diff line number Diff line
@@ -434,7 +434,7 @@ public abstract class NetworkAgent {
        }
        }


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


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


+96 −15
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@ package android.net;
import static com.android.internal.annotations.VisibleForTesting.Visibility.PRIVATE;
import static com.android.internal.annotations.VisibleForTesting.Visibility.PRIVATE;


import android.annotation.IntDef;
import android.annotation.IntDef;
import android.annotation.LongDef;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.RequiresPermission;
@@ -64,6 +65,68 @@ import java.util.StringJoiner;
public final class NetworkCapabilities implements Parcelable {
public final class NetworkCapabilities implements Parcelable {
    private static final String TAG = "NetworkCapabilities";
    private static final String TAG = "NetworkCapabilities";


    /**
     * Mechanism to support redaction of fields in NetworkCapabilities that are guarded by specific
     * app permissions.
     **/
    /**
     * Don't redact any fields since the receiving app holds all the necessary permissions.
     *
     * @hide
     */
    @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
    public static final long REDACT_NONE = 0;

    /**
     * Redact any fields that need {@link android.Manifest.permission#ACCESS_FINE_LOCATION}
     * permission since the receiving app does not hold this permission or the location toggle
     * is off.
     *
     * @see android.Manifest.permission#ACCESS_FINE_LOCATION
     * @hide
     */
    @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
    public static final long REDACT_FOR_ACCESS_FINE_LOCATION = 1 << 0;

    /**
     * Redact any fields that need {@link android.Manifest.permission#LOCAL_MAC_ADDRESS}
     * permission since the receiving app does not hold this permission.
     *
     * @see android.Manifest.permission#LOCAL_MAC_ADDRESS
     * @hide
     */
    @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
    public static final long REDACT_FOR_LOCAL_MAC_ADDRESS = 1 << 1;

    /**
     *
     * Redact any fields that need {@link android.Manifest.permission#NETWORK_SETTINGS}
     * permission since the receiving app does not hold this permission.
     *
     * @see android.Manifest.permission#NETWORK_SETTINGS
     * @hide
     */
    @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
    public static final long REDACT_FOR_NETWORK_SETTINGS = 1 << 2;

    /**
     * Redact all fields in this object that require any relevant permission.
     * @hide
     */
    @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
    public static final long REDACT_ALL = -1L;

    /** @hide */
    @LongDef(flag = true, prefix = { "REDACT_" }, value = {
            REDACT_NONE,
            REDACT_FOR_ACCESS_FINE_LOCATION,
            REDACT_FOR_LOCAL_MAC_ADDRESS,
            REDACT_FOR_NETWORK_SETTINGS,
            REDACT_ALL
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface RedactionType {}

    // Set to true when private DNS is broken.
    // Set to true when private DNS is broken.
    private boolean mPrivateDnsBroken;
    private boolean mPrivateDnsBroken;


@@ -78,32 +141,31 @@ public final class NetworkCapabilities implements Parcelable {
    private String mRequestorPackageName;
    private String mRequestorPackageName;


    /**
    /**
     * Indicates whether parceling should preserve fields that are set based on permissions of
     * Indicates what fields should be redacted from this instance.
     * the process receiving the {@link NetworkCapabilities}.
     */
     */
    private final boolean mParcelLocationSensitiveFields;
    private final @RedactionType long mRedactions;


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


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


    /**
    /**
     * Make a copy of NetworkCapabilities.
     * Make a copy of NetworkCapabilities.
     *
     *
     * @param nc Original NetworkCapabilities
     * @param nc Original NetworkCapabilities
     * @param parcelLocationSensitiveFields Whether to parcel location sensitive data or not.
     * @param redactions bitmask of redactions that needs to be performed on this new instance of
     *                   {@link NetworkCapabilities}.
     * @hide
     * @hide
     */
     */
    @SystemApi
    @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
    public NetworkCapabilities(
    public NetworkCapabilities(@Nullable NetworkCapabilities nc, @RedactionType long redactions) {
            @Nullable NetworkCapabilities nc, boolean parcelLocationSensitiveFields) {
        mRedactions = redactions;
        mParcelLocationSensitiveFields = parcelLocationSensitiveFields;
        if (nc != null) {
        if (nc != null) {
            set(nc);
            set(nc);
        }
        }
@@ -115,11 +177,13 @@ public final class NetworkCapabilities implements Parcelable {
     * @hide
     * @hide
     */
     */
    public void clearAll() {
    public void clearAll() {
        // Ensures that the internal copies maintained by the connectivity stack does not set
        // Ensures that the internal copies maintained by the connectivity stack does not set it to
        // this bit.
        // anything other than |REDACT_ALL|.
        if (mParcelLocationSensitiveFields) {
        if (mRedactions != REDACT_ALL) {
            // This is needed because the current redaction mechanism relies on redaction while
            // parceling.
            throw new UnsupportedOperationException(
            throw new UnsupportedOperationException(
                    "Cannot clear NetworkCapabilities when parcelLocationSensitiveFields is set");
                    "Cannot clear NetworkCapabilities when mRedactions is set");
        }
        }
        mNetworkCapabilities = mTransportTypes = mUnwantedNetworkCapabilities = 0;
        mNetworkCapabilities = mTransportTypes = mUnwantedNetworkCapabilities = 0;
        mLinkUpBandwidthKbps = mLinkDownBandwidthKbps = LINK_BANDWIDTH_UNSPECIFIED;
        mLinkUpBandwidthKbps = mLinkDownBandwidthKbps = LINK_BANDWIDTH_UNSPECIFIED;
@@ -149,7 +213,7 @@ public final class NetworkCapabilities implements Parcelable {
        mLinkDownBandwidthKbps = nc.mLinkDownBandwidthKbps;
        mLinkDownBandwidthKbps = nc.mLinkDownBandwidthKbps;
        mNetworkSpecifier = nc.mNetworkSpecifier;
        mNetworkSpecifier = nc.mNetworkSpecifier;
        if (nc.getTransportInfo() != null) {
        if (nc.getTransportInfo() != null) {
            setTransportInfo(nc.getTransportInfo().makeCopy(mParcelLocationSensitiveFields));
            setTransportInfo(nc.getTransportInfo().makeCopy(mRedactions));
        } else {
        } else {
            setTransportInfo(null);
            setTransportInfo(null);
        }
        }
@@ -2349,6 +2413,23 @@ public final class NetworkCapabilities implements Parcelable {
        }
        }
    }
    }


    /**
     * Returns a bitmask of all the applicable redactions (based on the permissions held by the
     * receiving app) to be performed on this object.
     *
     * @return bitmask of redactions applicable on this instance.
     * @hide
     */
    public @RedactionType long getApplicableRedactions() {
        // Currently, there are no fields redacted in NetworkCapabilities itself, so we just
        // passthrough the redactions required by the embedded TransportInfo. If this changes
        // in the future, modify this method.
        if (mTransportInfo == null) {
            return NetworkCapabilities.REDACT_NONE;
        }
        return mTransportInfo.getApplicableRedactions();
    }

    /**
    /**
     * Builder class for NetworkCapabilities.
     * Builder class for NetworkCapabilities.
     *
     *
+30 −18
Original line number Original line Diff line number Diff line
@@ -29,35 +29,47 @@ import android.annotation.SystemApi;
public interface TransportInfo {
public interface TransportInfo {


    /**
    /**
     * Create a copy of a {@link TransportInfo} that will preserve location sensitive fields that
     * Create a copy of a {@link TransportInfo} with some fields redacted based on the permissions
     * were set based on the permissions of the process that originally received it.
     * held by the receiving app.
     *
     *
     * <p>By default {@link TransportInfo} does not preserve such fields during parceling, as
     * <p>
     * they should not be shared outside of the process that receives them without appropriate
     * Usage by connectivity stack:
     * checks.
     * <ul>
     * <li> Connectivity stack will invoke {@link #getApplicableRedactions()} to find the list
     * of redactions that are required by this {@link TransportInfo} instance.</li>
     * <li> Connectivity stack then loops through each bit in the bitmask returned and checks if the
     * receiving app holds the corresponding permission.
     * <ul>
     * <li> If the app holds the corresponding permission, the bit is cleared from the
     * |redactions| bitmask. </li>
     * <li> If the app does not hold the corresponding permission, the bit is retained in the
     * |redactions| bitmask. </li>
     * </ul>
     * <li> Connectivity stack then invokes {@link #makeCopy(long)} with the necessary |redactions|
     * to create a copy to send to the corresponding app. </li>
     * </ul>
     * </p>
     *
     *
     * @param parcelLocationSensitiveFields Whether the location sensitive fields should be kept
     * @param redactions bitmask of redactions that needs to be performed on this instance.
     *                                      when parceling
     * @return Copy of this instance with the necessary redactions.
     * @return Copy of this instance.
     * @hide
     * @hide
     */
     */
    @SystemApi
    @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
    @NonNull
    @NonNull
    default TransportInfo makeCopy(boolean parcelLocationSensitiveFields) {
    default TransportInfo makeCopy(@NetworkCapabilities.RedactionType long redactions) {
        return this;
        return this;
    }
    }


    /**
    /**
     * Returns whether this TransportInfo type has location sensitive fields or not (helps
     * Returns a bitmask of all the applicable redactions (based on the permissions held by the
     * to determine whether to perform a location permission check or not before sending to
     * receiving app) to be performed on this TransportInfo.
     * apps).
     *
     *
     * @return {@code true} if this instance contains location sensitive info, {@code false}
     * @return bitmask of redactions applicable on this instance.
     * otherwise.
     * @see #makeCopy(long)
     * @hide
     * @hide
     */
     */
    @SystemApi
    @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
    default boolean hasLocationSensitiveFields() {
    default @NetworkCapabilities.RedactionType long getApplicableRedactions() {
        return false;
        return NetworkCapabilities.REDACT_NONE;
    }
    }
}
}
Loading