Loading services/core/java/com/android/server/TelephonyRegistry.java +32 −6 Original line number Diff line number Diff line Loading @@ -1170,7 +1170,9 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { TelephonyCallback.EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED)) { try { r.callback.onPhysicalChannelConfigChanged( mPhysicalChannelConfigs); shouldSanitizeLocationForPhysicalChannelConfig(r) ? getLocationSanitizedConfigs(mPhysicalChannelConfigs) : mPhysicalChannelConfigs); } catch (RemoteException ex) { remove(r.binder); } Loading Loading @@ -2371,8 +2373,10 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { return; } List<PhysicalChannelConfig> sanitizedConfigs = getLocationSanitizedConfigs(configs); if (VDBG) { log("notifyPhysicalChannelConfig: subId=" + subId + " configs=" + configs); log("notifyPhysicalChannelConfig: subId=" + subId + " configs=" + configs + " sanitizedConfigs=" + sanitizedConfigs); } synchronized (mRecords) { Loading @@ -2385,11 +2389,14 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { && idMatch(r.subId, subId, phoneId)) { try { if (DBG_LOC) { log("notifyPhysicalChannelConfig: " + "mPhysicalChannelConfigs=" + configs + " r=" + r); log("notifyPhysicalChannelConfig: mPhysicalChannelConfigs=" + (shouldSanitizeLocationForPhysicalChannelConfig(r) ? sanitizedConfigs : configs) + " r=" + r); } r.callback.onPhysicalChannelConfigChanged(configs); r.callback.onPhysicalChannelConfigChanged( shouldSanitizeLocationForPhysicalChannelConfig(r) ? sanitizedConfigs : configs); } catch (RemoteException ex) { mRemoveList.add(r.binder); } Loading @@ -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. * Loading telephony/java/android/telephony/PhysicalChannelConfig.java +25 −0 Original line number Diff line number Diff line Loading @@ -291,6 +291,14 @@ public final class PhysicalChannelConfig implements Parcelable { 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 * @hide Loading Loading @@ -540,6 +548,23 @@ public final class PhysicalChannelConfig implements Parcelable { 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() { return new PhysicalChannelConfig(this); } Loading Loading
services/core/java/com/android/server/TelephonyRegistry.java +32 −6 Original line number Diff line number Diff line Loading @@ -1170,7 +1170,9 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { TelephonyCallback.EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED)) { try { r.callback.onPhysicalChannelConfigChanged( mPhysicalChannelConfigs); shouldSanitizeLocationForPhysicalChannelConfig(r) ? getLocationSanitizedConfigs(mPhysicalChannelConfigs) : mPhysicalChannelConfigs); } catch (RemoteException ex) { remove(r.binder); } Loading Loading @@ -2371,8 +2373,10 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { return; } List<PhysicalChannelConfig> sanitizedConfigs = getLocationSanitizedConfigs(configs); if (VDBG) { log("notifyPhysicalChannelConfig: subId=" + subId + " configs=" + configs); log("notifyPhysicalChannelConfig: subId=" + subId + " configs=" + configs + " sanitizedConfigs=" + sanitizedConfigs); } synchronized (mRecords) { Loading @@ -2385,11 +2389,14 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { && idMatch(r.subId, subId, phoneId)) { try { if (DBG_LOC) { log("notifyPhysicalChannelConfig: " + "mPhysicalChannelConfigs=" + configs + " r=" + r); log("notifyPhysicalChannelConfig: mPhysicalChannelConfigs=" + (shouldSanitizeLocationForPhysicalChannelConfig(r) ? sanitizedConfigs : configs) + " r=" + r); } r.callback.onPhysicalChannelConfigChanged(configs); r.callback.onPhysicalChannelConfigChanged( shouldSanitizeLocationForPhysicalChannelConfig(r) ? sanitizedConfigs : configs); } catch (RemoteException ex) { mRemoveList.add(r.binder); } Loading @@ -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. * Loading
telephony/java/android/telephony/PhysicalChannelConfig.java +25 −0 Original line number Diff line number Diff line Loading @@ -291,6 +291,14 @@ public final class PhysicalChannelConfig implements Parcelable { 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 * @hide Loading Loading @@ -540,6 +548,23 @@ public final class PhysicalChannelConfig implements Parcelable { 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() { return new PhysicalChannelConfig(this); } Loading