summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChiachang Wang <chiachangwang@google.com>2019-11-28 04:26:39 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2019-11-28 04:26:39 +0000
commited4e6885d87c3216618d01a6cc5b072efe32bc41 (patch)
tree359de99c7f6aba0a616df6d313dc265b316a93cc
parent00e3086c939ef0865c8182982a9f3d94da854a3b (diff)
parentc46b981ef03366f1171aead5cf1c5a6026404420 (diff)
Merge "Avoid incorrect nlmsg_type in returned INetDiagMessage"
-rw-r--r--src/com/android/networkstack/netlink/TcpSocketTracker.java8
-rw-r--r--tests/unit/src/com/android/networkstack/netlink/TcpSocketTrackerTest.java4
2 files changed, 10 insertions, 2 deletions
diff --git a/src/com/android/networkstack/netlink/TcpSocketTracker.java b/src/com/android/networkstack/netlink/TcpSocketTracker.java
index d3057ea..a055617 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
diff --git a/tests/unit/src/com/android/networkstack/netlink/TcpSocketTrackerTest.java b/tests/unit/src/com/android/networkstack/netlink/TcpSocketTrackerTest.java
index 6a92d8a..b4a33dd 100644
--- a/tests/unit/src/com/android/networkstack/netlink/TcpSocketTrackerTest.java
+++ b/tests/unit/src/com/android/networkstack/netlink/TcpSocketTrackerTest.java
@@ -56,7 +56,7 @@ public class TcpSocketTrackerTest {
private static final String DIAG_MSG_HEX =
// struct nlmsghdr.
"00000058" + // length = 88
- "0020" + // type = SOCK_DIAG_BY_FAMILY
+ "0014" + // type = SOCK_DIAG_BY_FAMILY
"0103" + // flags = NLM_F_REQUEST | NLM_F_DUMP
"00000000" + // seqno
"00000000" + // pid (0 == kernel)
@@ -83,7 +83,7 @@ public class TcpSocketTrackerTest {
private static final String SOCK_DIAG_TCP_INET_HEX =
// struct nlmsghdr.
"00000114" + // length = 276
- "0020" + // type = SOCK_DIAG_BY_FAMILY
+ "0014" + // type = SOCK_DIAG_BY_FAMILY
"0103" + // flags = NLM_F_REQUEST | NLM_F_DUMP
"00000000" + // seqno
"00000000" + // pid (0 == kernel)