Return -EAFNOSUPPORT for invalid sockets
Previously NetworkTest#testBindSocketOfLocalSocketThrows would fail when
selinux is disabled because netd does not check for local sockets.
Bug: b/78484123
Test: NetworkTest#testBindSocketOfLocalSocketThrows passes w/o selinux
Change-Id: Ia696bb9f25df46177303bac5127ed2f6ada56e7d
diff --git a/server/FwmarkServer.cpp b/server/FwmarkServer.cpp
index 32b856a..0c22f26 100644
--- a/server/FwmarkServer.cpp
+++ b/server/FwmarkServer.cpp
@@ -156,6 +156,15 @@
return -EBADF;
}
+ int family;
+ socklen_t familyLen = sizeof(family);
+ if (getsockopt(*socketFd, SOL_SOCKET, SO_DOMAIN, &family, &familyLen) == -1) {
+ return -errno;
+ }
+ if (!FwmarkCommand::isSupportedFamily(family)) {
+ return -EAFNOSUPPORT;
+ }
+
Fwmark fwmark;
socklen_t fwmarkLen = sizeof(fwmark.intValue);
if (getsockopt(*socketFd, SOL_SOCKET, SO_MARK, &fwmark.intValue, &fwmarkLen) == -1) {