summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChiachang Wang <chiachangwang@google.com>2019-11-27 21:53:39 +0800
committerChiachang Wang <chiachangwang@google.com>2019-11-28 10:36:29 +0800
commitc46b981ef03366f1171aead5cf1c5a6026404420 (patch)
tree77d66e1db6d95be0153501e5084e2132848edc09 /src
parent4336b91fb41df54e6dcb855e4b30ab1f30dd3409 (diff)
Avoid incorrect nlmsg_type in returned INetDiagMessage
The target parsing mechanism focuses on SOCK_DIAG_BY_FAMILY. The returned message with unexpected messages will cause the parsing mechanism does not work as intended. Thus, skip parsing on incorrect message. Bug: 145275899 Bug: 142035706 Test: atest NetworkStackTests NetworkStackNextTests Change-Id: I73ab979c735268551a54b0a88de18c6d1a2068c4
Diffstat (limited to 'src')
-rw-r--r--src/com/android/networkstack/netlink/TcpSocketTracker.java8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/com/android/networkstack/netlink/TcpSocketTracker.java b/src/com/android/networkstack/netlink/TcpSocketTracker.java
index fc762cb..a4d713d 100644
--- a/src/com/android/networkstack/netlink/TcpSocketTracker.java
+++ b/src/com/android/networkstack/netlink/TcpSocketTracker.java
@@ -20,6 +20,7 @@ import static android.net.netlink.NetlinkConstants.INET_DIAG_MEMINFO;
import static android.net.netlink.NetlinkConstants.NLA_ALIGNTO;
import static android.net.netlink.NetlinkConstants.NLMSG_DONE;
import static android.net.netlink.NetlinkConstants.SOCKDIAG_MSG_HEADER_SIZE;
+import static android.net.netlink.NetlinkConstants.SOCK_DIAG_BY_FAMILY;
import static android.net.netlink.StructNlMsgHdr.NLM_F_DUMP;
import static android.net.netlink.StructNlMsgHdr.NLM_F_REQUEST;
import static android.net.util.DataStallUtils.CONFIG_MIN_PACKETS_THRESHOLD;
@@ -180,8 +181,15 @@ public class TcpSocketTracker {
}
final int nlmsgLen = nlmsghdr.nlmsg_len;
log("pollSocketsInfo: nlmsghdr=" + nlmsghdr);
+ // End of the message. Stop parsing.
if (nlmsghdr.nlmsg_type == NLMSG_DONE) break;
+ if (nlmsghdr.nlmsg_type != SOCK_DIAG_BY_FAMILY) {
+ Log.e(TAG, "Expect to get family " + family
+ + " SOCK_DIAG_BY_FAMILY message but get " + nlmsghdr.nlmsg_type);
+ break;
+ }
+
if (isValidInetDiagMsgSize(nlmsgLen)) {
// Get the socket cookie value. Composed by two Integers value.
// Corresponds to inet_diag_sockid in