From 6f210bd0191e1936bbc1f036912c6efc4ea69475 Mon Sep 17 00:00:00 2001 From: Robert Greenwalt Date: Thu, 14 Mar 2013 13:16:04 -0700 Subject: [PATCH] Fail fast if somebody is adding default routes bug:2655011 Change-Id: I25da940e024825bc6e1d1ac5fe7b0d951609c1c1 --- .../com/android/server/ConnectivityService.java | 14 ++++++++++++++ .../android/server/NetworkManagementService.java | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index c83a919efa60d..5ed23cfdc0e2d 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -2306,6 +2306,20 @@ public class ConnectivityService extends IConnectivityManager.Stub { boolean routesChanged = (routeDiff.removed.size() != 0 || routeDiff.added.size() != 0); + // look for a radio-added default route (v4-only for now TODO) + RouteInfo[] routes = new RouteInfo[0]; + try { + routes = mNetd.getRoutes(newLp.getInterfaceName()); + } catch (Exception e) {} + + for (RouteInfo route : routes) { + if (route.isDefaultRoute() && route.getGateway() instanceof Inet4Address && + mAddedRoutes.contains(route) == false) { + throw new IllegalStateException("Unexpected default route found for interface " + + newLp.getInterfaceName()); + } + } + for (RouteInfo r : routeDiff.removed) { if (isLinkDefault || ! r.isDefaultRoute()) { removeRoute(curLp, r, TO_DEFAULT_TABLE); diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java index 768670575baa7..8d3127136208c 100644 --- a/services/java/com/android/server/NetworkManagementService.java +++ b/services/java/com/android/server/NetworkManagementService.java @@ -711,7 +711,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub InetAddress gatewayAddr = NetworkUtils.intToInetAddress((int)Long.parseLong(gate, 16)); - RouteInfo route = new RouteInfo(linkAddress, gatewayAddr); + RouteInfo route = new RouteInfo(linkAddress, gatewayAddr, iface); routes.add(route); } catch (Exception e) { Log.e(TAG, "Error parsing route " + s + " : " + e); @@ -743,7 +743,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub InetAddress gateAddr = NetworkUtils.hexToInet6Address(gate); - RouteInfo route = new RouteInfo(linkAddress, gateAddr); + RouteInfo route = new RouteInfo(linkAddress, gateAddr, iface); routes.add(route); } catch (Exception e) { Log.e(TAG, "Error parsing route " + s + " : " + e);