summaryrefslogtreecommitdiffstats
path: root/server/FwmarkServer.cpp
diff options
context:
space:
mode:
authorRemi NGUYEN VAN <reminv@google.com>2018-04-24 18:54:58 +0900
committerRemi NGUYEN VAN <reminv@google.com>2018-04-26 11:25:02 +0900
commiteabc5da4df01564063eed65351d7973b7aa44341 (patch)
tree049f09504dcd6025ccd22bccc4e60b3dd699050c /server/FwmarkServer.cpp
parent05827de37e5413d165bf655bdfd13e3d49c906d1 (diff)
downloadplatform_system_netd-eabc5da4df01564063eed65351d7973b7aa44341.tar.gz
platform_system_netd-eabc5da4df01564063eed65351d7973b7aa44341.tar.bz2
platform_system_netd-eabc5da4df01564063eed65351d7973b7aa44341.zip
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
Diffstat (limited to 'server/FwmarkServer.cpp')
-rw-r--r--server/FwmarkServer.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/server/FwmarkServer.cpp b/server/FwmarkServer.cpp
index 32b856a67..0c22f2624 100644
--- a/server/FwmarkServer.cpp
+++ b/server/FwmarkServer.cpp
@@ -156,6 +156,15 @@ int FwmarkServer::processClient(SocketClient* client, int* socketFd) {
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) {