Merge "Redact location info from PhysicalChannelConfig" am: 92f92c7ce0 am: 8dd68b73cc

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1644103

Change-Id: I7c92bd310f0eca7848daa0851be3a0511ef6d04f
This commit is contained in:
Rambo Wang
2021-03-25 01:15:12 +00:00
committed by Automerger Merge Worker
2 changed files with 57 additions and 6 deletions

View File

@@ -1170,7 +1170,9 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
TelephonyCallback.EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED)) { TelephonyCallback.EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED)) {
try { try {
r.callback.onPhysicalChannelConfigChanged( r.callback.onPhysicalChannelConfigChanged(
mPhysicalChannelConfigs); shouldSanitizeLocationForPhysicalChannelConfig(r)
? getLocationSanitizedConfigs(mPhysicalChannelConfigs)
: mPhysicalChannelConfigs);
} catch (RemoteException ex) { } catch (RemoteException ex) {
remove(r.binder); remove(r.binder);
} }
@@ -2371,8 +2373,10 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
return; return;
} }
List<PhysicalChannelConfig> sanitizedConfigs = getLocationSanitizedConfigs(configs);
if (VDBG) { if (VDBG) {
log("notifyPhysicalChannelConfig: subId=" + subId + " configs=" + configs); log("notifyPhysicalChannelConfig: subId=" + subId + " configs=" + configs
+ " sanitizedConfigs=" + sanitizedConfigs);
} }
synchronized (mRecords) { synchronized (mRecords) {
@@ -2385,11 +2389,14 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
&& idMatch(r.subId, subId, phoneId)) { && idMatch(r.subId, subId, phoneId)) {
try { try {
if (DBG_LOC) { if (DBG_LOC) {
log("notifyPhysicalChannelConfig: " log("notifyPhysicalChannelConfig: mPhysicalChannelConfigs="
+ "mPhysicalChannelConfigs=" + (shouldSanitizeLocationForPhysicalChannelConfig(r)
+ configs + " r=" + r); ? sanitizedConfigs : configs)
+ " r=" + r);
} }
r.callback.onPhysicalChannelConfigChanged(configs); r.callback.onPhysicalChannelConfigChanged(
shouldSanitizeLocationForPhysicalChannelConfig(r)
? sanitizedConfigs : configs);
} catch (RemoteException ex) { } catch (RemoteException ex) {
mRemoveList.add(r.binder); mRemoveList.add(r.binder);
} }
@@ -2400,6 +2407,25 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
} }
} }
private static boolean shouldSanitizeLocationForPhysicalChannelConfig(Record record) {
// Always redact location info from PhysicalChannelConfig if the registrant is from neither
// PHONE nor SYSTEM process. There is no user case that the registrant needs the location
// info (e.g. physicalCellId). This also remove the need for the location permissions check.
return record.callerUid != Process.PHONE_UID && record.callerUid != Process.SYSTEM_UID;
}
/**
* Return a copy of the PhysicalChannelConfig list but with location info removed.
*/
private static List<PhysicalChannelConfig> getLocationSanitizedConfigs(
List<PhysicalChannelConfig> configs) {
List<PhysicalChannelConfig> sanitizedConfigs = new ArrayList<>(configs.size());
for (PhysicalChannelConfig config : configs) {
sanitizedConfigs.add(config.createLocationInfoSanitizedCopy());
}
return sanitizedConfigs;
}
/** /**
* Notify that the data enabled has changed. * Notify that the data enabled has changed.
* *

View File

@@ -291,6 +291,14 @@ public final class PhysicalChannelConfig implements Parcelable {
return mCellConnectionStatus; return mCellConnectionStatus;
} }
/**
* Return a copy of this PhysicalChannelConfig object but redact all the location info.
* @hide
*/
public PhysicalChannelConfig createLocationInfoSanitizedCopy() {
return new Builder(this).setPhysicalCellId(PHYSICAL_CELL_ID_UNKNOWN).build();
}
/** /**
* @return String representation of the connection status * @return String representation of the connection status
* @hide * @hide
@@ -540,6 +548,23 @@ public final class PhysicalChannelConfig implements Parcelable {
mBand = BAND_UNKNOWN; mBand = BAND_UNKNOWN;
} }
/**
* Builder object constructed from existing PhysicalChannelConfig object.
* @hide
*/
public Builder(PhysicalChannelConfig config) {
mNetworkType = config.getNetworkType();
mFrequencyRange = config.getFrequencyRange();
mDownlinkChannelNumber = config.getDownlinkChannelNumber();
mUplinkChannelNumber = config.getUplinkChannelNumber();
mCellBandwidthDownlinkKhz = config.getCellBandwidthDownlinkKhz();
mCellBandwidthUplinkKhz = config.getCellBandwidthUplinkKhz();
mCellConnectionStatus = config.getConnectionStatus();
mContextIds = Arrays.copyOf(config.getContextIds(), config.getContextIds().length);
mPhysicalCellId = config.getPhysicalCellId();
mBand = config.getBand();
}
public PhysicalChannelConfig build() { public PhysicalChannelConfig build() {
return new PhysicalChannelConfig(this); return new PhysicalChannelConfig(this);
} }