From 475c3eadb01447aba1601891c875ee793d940d5d Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Thu, 19 Jan 2017 11:55:54 -0700 Subject: [PATCH] StrictMode to detect untagged network traffic. Network usage is tracked by the kernel at the UID level, which is granular enough for normal apps, but large components (such as the system server) are impossible to debug without adding additional socket tagging to help identify subsystems within a UID. To help ensure that system components tag all their network traffic, this change offers a new StrictMode option to detect and report untagged sockets. Test: builds, boots, all common traffic tagged Bug: 30943431, 30414041 Change-Id: I825c7941076054732264690247de2863342638e2 --- .../android/server/connectivity/NetworkDiagnostics.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/connectivity/NetworkDiagnostics.java b/services/core/java/com/android/server/connectivity/NetworkDiagnostics.java index 5f9efe704f..85d1d1ef1d 100644 --- a/services/core/java/com/android/server/connectivity/NetworkDiagnostics.java +++ b/services/core/java/com/android/server/connectivity/NetworkDiagnostics.java @@ -23,6 +23,7 @@ import android.net.LinkProperties; import android.net.Network; import android.net.NetworkUtils; import android.net.RouteInfo; +import android.net.TrafficStats; import android.os.SystemClock; import android.system.ErrnoException; import android.system.Os; @@ -381,7 +382,12 @@ public class NetworkDiagnostics { protected void setupSocket( int sockType, int protocol, long writeTimeout, long readTimeout, int dstPort) throws ErrnoException, IOException { - mFileDescriptor = Os.socket(mAddressFamily, sockType, protocol); + final int oldTag = TrafficStats.getAndSetThreadStatsTag(TrafficStats.TAG_SYSTEM_PROBE); + try { + mFileDescriptor = Os.socket(mAddressFamily, sockType, protocol); + } finally { + TrafficStats.setThreadStatsTag(oldTag); + } // Setting SNDTIMEO is purely for defensive purposes. Os.setsockoptTimeval(mFileDescriptor, SOL_SOCKET, SO_SNDTIMEO, StructTimeval.fromMillis(writeTimeout));