diff options
| author | Remi NGUYEN VAN <reminv@google.com> | 2018-04-24 18:54:58 +0900 |
|---|---|---|
| committer | Remi NGUYEN VAN <reminv@google.com> | 2018-04-26 11:25:02 +0900 |
| commit | eabc5da4df01564063eed65351d7973b7aa44341 (patch) | |
| tree | 049f09504dcd6025ccd22bccc4e60b3dd699050c /server/FwmarkServer.cpp | |
| parent | 05827de37e5413d165bf655bdfd13e3d49c906d1 (diff) | |
| download | platform_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.cpp | 9 |
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) { |
