Loading netwerk/system/netlink/NetlinkService.cpp +39 −29 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include "mozilla/Base64.h" #include "mozilla/FileUtils.h" #include "mozilla/FunctionTypeTraits.h" #include "mozilla/Services.h" #include "mozilla/Sprintf.h" #include "mozilla/Telemetry.h" Loading @@ -33,11 +34,20 @@ # include <resolv.h> #endif /* a shorter name that better explains what it does */ #define EINTR_RETRY(x) MOZ_TEMP_FAILURE_RETRY(x) namespace mozilla::net { template <typename F> static auto eintr_retry(F&& func) -> typename FunctionTypeTraits<decltype(func)>::ReturnType { typename FunctionTypeTraits<decltype(func)>::ReturnType _rc; do { _rc = func(); } while (_rc == -1 && errno == EINTR); return _rc; } #define EINTR_RETRY(expr) eintr_retry([&]() { return expr; }) // period during which to absorb subsequent network change events, in // milliseconds static const unsigned int kNetworkChangeCoalescingPeriod = 1000; Loading @@ -48,10 +58,10 @@ static LazyLogModule gNlSvcLog("NetlinkService"); #undef LOG_ENABLED #define LOG_ENABLED() MOZ_LOG_TEST(gNlSvcLog, mozilla::LogLevel::Debug) typedef union { using in_common_addr = union { struct in_addr addr4; struct in6_addr addr6; } in_common_addr; }; static void GetAddrStr(const in_common_addr* aAddr, uint8_t aFamily, nsACString& _retval) { Loading Loading @@ -230,9 +240,9 @@ class NetlinkNeighbor { private: bool mHasMAC; uint8_t mMAC[ETH_ALEN]; in_common_addr mAddr; struct ndmsg mNeigh; uint8_t mMAC[ETH_ALEN]{}; in_common_addr mAddr{}; struct ndmsg mNeigh {}; }; class NetlinkLink { Loading Loading @@ -278,7 +288,7 @@ class NetlinkLink { private: nsCString mName; struct ifinfomsg mIface; struct ifinfomsg mIface {}; }; class NetlinkRoute { Loading Loading @@ -307,7 +317,7 @@ class NetlinkRoute { bool Equals(const NetlinkRoute& aOther) const { size_t addrSize = (mRtm.rtm_family == AF_INET) ? sizeof(mDstAddr.addr4) : sizeof(mDstAddr.addr6); if (memcmp(&mRtm, &(aOther.mRtm), sizeof(mRtm))) { if (memcmp(&mRtm, &(aOther.mRtm), sizeof(mRtm)) != 0) { return false; } if (mHasOif != aOther.mHasOif || mOif != aOther.mOif) { Loading @@ -317,16 +327,16 @@ class NetlinkRoute { return false; } if ((mHasGWAddr != aOther.mHasGWAddr) || (mHasGWAddr && memcmp(&mGWAddr, &(aOther.mGWAddr), addrSize))) { (mHasGWAddr && memcmp(&mGWAddr, &(aOther.mGWAddr), addrSize) != 0)) { return false; } if ((mHasDstAddr != aOther.mHasDstAddr) || (mHasDstAddr && memcmp(&mDstAddr, &(aOther.mDstAddr), addrSize))) { (mHasDstAddr && memcmp(&mDstAddr, &(aOther.mDstAddr), addrSize) != 0)) { return false; } if ((mHasPrefSrcAddr != aOther.mHasPrefSrcAddr) || (mHasPrefSrcAddr && memcmp(&mPrefSrcAddr, &(aOther.mPrefSrcAddr), addrSize))) { memcmp(&mPrefSrcAddr, &(aOther.mPrefSrcAddr), addrSize) != 0)) { return false; } return true; Loading Loading @@ -457,13 +467,13 @@ class NetlinkRoute { bool mHasOif : 1; bool mHasPrio : 1; in_common_addr mGWAddr; in_common_addr mDstAddr; in_common_addr mPrefSrcAddr; in_common_addr mGWAddr{}; in_common_addr mDstAddr{}; in_common_addr mPrefSrcAddr{}; uint32_t mOif; uint32_t mPrio; struct rtmsg mRtm; uint32_t mOif{}; uint32_t mPrio{}; struct rtmsg mRtm {}; }; class NetlinkMsg { Loading @@ -484,17 +494,17 @@ class NetlinkMsg { bool SendRequest(int aFD, void* aRequest, uint32_t aRequestLength) { MOZ_ASSERT(!mIsPending, "Request has been already sent!"); struct sockaddr_nl kernel; struct sockaddr_nl kernel {}; memset(&kernel, 0, sizeof(kernel)); kernel.nl_family = AF_NETLINK; kernel.nl_groups = 0; struct iovec io; struct iovec io {}; memset(&io, 0, sizeof(io)); io.iov_base = aRequest; io.iov_len = aRequestLength; struct msghdr rtnl_msg; struct msghdr rtnl_msg {}; memset(&rtnl_msg, 0, sizeof(rtnl_msg)); rtnl_msg.msg_iov = &io; rtnl_msg.msg_iovlen = 1; Loading Loading @@ -538,7 +548,7 @@ class NetlinkGenMsg : public NetlinkMsg { struct { struct nlmsghdr hdr; struct rtgenmsg gen; } mReq; } mReq{}; }; class NetlinkRtMsg : public NetlinkMsg { Loading Loading @@ -581,7 +591,7 @@ class NetlinkRtMsg : public NetlinkMsg { struct nlmsghdr hdr; struct rtmsg rtm; unsigned char data[1024]; } mReq; } mReq{}; }; NetlinkService::LinkInfo::LinkInfo(UniquePtr<NetlinkLink>&& aLink) Loading Loading @@ -648,17 +658,17 @@ void NetlinkService::OnNetlinkMessage(int aNetlinkSocket) { // for netlink messages. char buffer[4096]; struct sockaddr_nl kernel; struct sockaddr_nl kernel {}; memset(&kernel, 0, sizeof(kernel)); kernel.nl_family = AF_NETLINK; kernel.nl_groups = 0; struct iovec io; struct iovec io {}; memset(&io, 0, sizeof(io)); io.iov_base = buffer; io.iov_len = sizeof(buffer); struct msghdr rtnl_reply; struct msghdr rtnl_reply {}; memset(&rtnl_reply, 0, sizeof(rtnl_reply)); rtnl_reply.msg_iov = &io; rtnl_reply.msg_iovlen = 1; Loading Loading @@ -1158,7 +1168,7 @@ NetlinkService::Run() { return NS_ERROR_FAILURE; } struct sockaddr_nl addr; struct sockaddr_nl addr {}; memset(&addr, 0, sizeof(addr)); addr.nl_family = AF_NETLINK; Loading Loading @@ -1680,7 +1690,7 @@ void NetlinkService::ComputeDNSSuffixList() { MOZ_ASSERT(!NS_IsMainThread(), "Must not be called on the main thread"); nsTArray<nsCString> suffixList; #if defined(HAVE_RES_NINIT) struct __res_state res; struct __res_state res {}; if (res_ninit(&res) == 0) { for (int i = 0; i < MAXDNSRCH; i++) { if (!res.dnsrch[i]) { Loading netwerk/system/netlink/NetlinkService.h +3 −3 Original line number Diff line number Diff line Loading @@ -84,11 +84,11 @@ class NetlinkService : public nsIRunnable { bool mInitialScanFinished; // A pipe to signal shutdown with. int mShutdownPipe[2]; int mShutdownPipe[2]{}; // IP addresses that are used to check the route for public traffic. struct in_addr mRouteCheckIPv4; struct in6_addr mRouteCheckIPv6; struct in_addr mRouteCheckIPv4 {}; struct in6_addr mRouteCheckIPv6 {}; pid_t mPid; uint32_t mMsgId; Loading xpcom/glue/FileUtils.h +0 −11 Original line number Diff line number Diff line Loading @@ -161,17 +161,6 @@ void ReadAheadFile(pathstr_t aFilePath, const size_t aOffset = 0, void ReadAhead(filedesc_t aFd, const size_t aOffset = 0, const size_t aCount = SIZE_MAX); #if defined(XP_UNIX) # define MOZ_TEMP_FAILURE_RETRY(exp) \ (__extension__({ \ typeof(exp) _rc; \ do { \ _rc = (exp); \ } while (_rc == -1 && errno == EINTR); \ _rc; \ })) #endif } // namespace mozilla #endif Loading
netwerk/system/netlink/NetlinkService.cpp +39 −29 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include "mozilla/Base64.h" #include "mozilla/FileUtils.h" #include "mozilla/FunctionTypeTraits.h" #include "mozilla/Services.h" #include "mozilla/Sprintf.h" #include "mozilla/Telemetry.h" Loading @@ -33,11 +34,20 @@ # include <resolv.h> #endif /* a shorter name that better explains what it does */ #define EINTR_RETRY(x) MOZ_TEMP_FAILURE_RETRY(x) namespace mozilla::net { template <typename F> static auto eintr_retry(F&& func) -> typename FunctionTypeTraits<decltype(func)>::ReturnType { typename FunctionTypeTraits<decltype(func)>::ReturnType _rc; do { _rc = func(); } while (_rc == -1 && errno == EINTR); return _rc; } #define EINTR_RETRY(expr) eintr_retry([&]() { return expr; }) // period during which to absorb subsequent network change events, in // milliseconds static const unsigned int kNetworkChangeCoalescingPeriod = 1000; Loading @@ -48,10 +58,10 @@ static LazyLogModule gNlSvcLog("NetlinkService"); #undef LOG_ENABLED #define LOG_ENABLED() MOZ_LOG_TEST(gNlSvcLog, mozilla::LogLevel::Debug) typedef union { using in_common_addr = union { struct in_addr addr4; struct in6_addr addr6; } in_common_addr; }; static void GetAddrStr(const in_common_addr* aAddr, uint8_t aFamily, nsACString& _retval) { Loading Loading @@ -230,9 +240,9 @@ class NetlinkNeighbor { private: bool mHasMAC; uint8_t mMAC[ETH_ALEN]; in_common_addr mAddr; struct ndmsg mNeigh; uint8_t mMAC[ETH_ALEN]{}; in_common_addr mAddr{}; struct ndmsg mNeigh {}; }; class NetlinkLink { Loading Loading @@ -278,7 +288,7 @@ class NetlinkLink { private: nsCString mName; struct ifinfomsg mIface; struct ifinfomsg mIface {}; }; class NetlinkRoute { Loading Loading @@ -307,7 +317,7 @@ class NetlinkRoute { bool Equals(const NetlinkRoute& aOther) const { size_t addrSize = (mRtm.rtm_family == AF_INET) ? sizeof(mDstAddr.addr4) : sizeof(mDstAddr.addr6); if (memcmp(&mRtm, &(aOther.mRtm), sizeof(mRtm))) { if (memcmp(&mRtm, &(aOther.mRtm), sizeof(mRtm)) != 0) { return false; } if (mHasOif != aOther.mHasOif || mOif != aOther.mOif) { Loading @@ -317,16 +327,16 @@ class NetlinkRoute { return false; } if ((mHasGWAddr != aOther.mHasGWAddr) || (mHasGWAddr && memcmp(&mGWAddr, &(aOther.mGWAddr), addrSize))) { (mHasGWAddr && memcmp(&mGWAddr, &(aOther.mGWAddr), addrSize) != 0)) { return false; } if ((mHasDstAddr != aOther.mHasDstAddr) || (mHasDstAddr && memcmp(&mDstAddr, &(aOther.mDstAddr), addrSize))) { (mHasDstAddr && memcmp(&mDstAddr, &(aOther.mDstAddr), addrSize) != 0)) { return false; } if ((mHasPrefSrcAddr != aOther.mHasPrefSrcAddr) || (mHasPrefSrcAddr && memcmp(&mPrefSrcAddr, &(aOther.mPrefSrcAddr), addrSize))) { memcmp(&mPrefSrcAddr, &(aOther.mPrefSrcAddr), addrSize) != 0)) { return false; } return true; Loading Loading @@ -457,13 +467,13 @@ class NetlinkRoute { bool mHasOif : 1; bool mHasPrio : 1; in_common_addr mGWAddr; in_common_addr mDstAddr; in_common_addr mPrefSrcAddr; in_common_addr mGWAddr{}; in_common_addr mDstAddr{}; in_common_addr mPrefSrcAddr{}; uint32_t mOif; uint32_t mPrio; struct rtmsg mRtm; uint32_t mOif{}; uint32_t mPrio{}; struct rtmsg mRtm {}; }; class NetlinkMsg { Loading @@ -484,17 +494,17 @@ class NetlinkMsg { bool SendRequest(int aFD, void* aRequest, uint32_t aRequestLength) { MOZ_ASSERT(!mIsPending, "Request has been already sent!"); struct sockaddr_nl kernel; struct sockaddr_nl kernel {}; memset(&kernel, 0, sizeof(kernel)); kernel.nl_family = AF_NETLINK; kernel.nl_groups = 0; struct iovec io; struct iovec io {}; memset(&io, 0, sizeof(io)); io.iov_base = aRequest; io.iov_len = aRequestLength; struct msghdr rtnl_msg; struct msghdr rtnl_msg {}; memset(&rtnl_msg, 0, sizeof(rtnl_msg)); rtnl_msg.msg_iov = &io; rtnl_msg.msg_iovlen = 1; Loading Loading @@ -538,7 +548,7 @@ class NetlinkGenMsg : public NetlinkMsg { struct { struct nlmsghdr hdr; struct rtgenmsg gen; } mReq; } mReq{}; }; class NetlinkRtMsg : public NetlinkMsg { Loading Loading @@ -581,7 +591,7 @@ class NetlinkRtMsg : public NetlinkMsg { struct nlmsghdr hdr; struct rtmsg rtm; unsigned char data[1024]; } mReq; } mReq{}; }; NetlinkService::LinkInfo::LinkInfo(UniquePtr<NetlinkLink>&& aLink) Loading Loading @@ -648,17 +658,17 @@ void NetlinkService::OnNetlinkMessage(int aNetlinkSocket) { // for netlink messages. char buffer[4096]; struct sockaddr_nl kernel; struct sockaddr_nl kernel {}; memset(&kernel, 0, sizeof(kernel)); kernel.nl_family = AF_NETLINK; kernel.nl_groups = 0; struct iovec io; struct iovec io {}; memset(&io, 0, sizeof(io)); io.iov_base = buffer; io.iov_len = sizeof(buffer); struct msghdr rtnl_reply; struct msghdr rtnl_reply {}; memset(&rtnl_reply, 0, sizeof(rtnl_reply)); rtnl_reply.msg_iov = &io; rtnl_reply.msg_iovlen = 1; Loading Loading @@ -1158,7 +1168,7 @@ NetlinkService::Run() { return NS_ERROR_FAILURE; } struct sockaddr_nl addr; struct sockaddr_nl addr {}; memset(&addr, 0, sizeof(addr)); addr.nl_family = AF_NETLINK; Loading Loading @@ -1680,7 +1690,7 @@ void NetlinkService::ComputeDNSSuffixList() { MOZ_ASSERT(!NS_IsMainThread(), "Must not be called on the main thread"); nsTArray<nsCString> suffixList; #if defined(HAVE_RES_NINIT) struct __res_state res; struct __res_state res {}; if (res_ninit(&res) == 0) { for (int i = 0; i < MAXDNSRCH; i++) { if (!res.dnsrch[i]) { Loading
netwerk/system/netlink/NetlinkService.h +3 −3 Original line number Diff line number Diff line Loading @@ -84,11 +84,11 @@ class NetlinkService : public nsIRunnable { bool mInitialScanFinished; // A pipe to signal shutdown with. int mShutdownPipe[2]; int mShutdownPipe[2]{}; // IP addresses that are used to check the route for public traffic. struct in_addr mRouteCheckIPv4; struct in6_addr mRouteCheckIPv6; struct in_addr mRouteCheckIPv4 {}; struct in6_addr mRouteCheckIPv6 {}; pid_t mPid; uint32_t mMsgId; Loading
xpcom/glue/FileUtils.h +0 −11 Original line number Diff line number Diff line Loading @@ -161,17 +161,6 @@ void ReadAheadFile(pathstr_t aFilePath, const size_t aOffset = 0, void ReadAhead(filedesc_t aFd, const size_t aOffset = 0, const size_t aCount = SIZE_MAX); #if defined(XP_UNIX) # define MOZ_TEMP_FAILURE_RETRY(exp) \ (__extension__({ \ typeof(exp) _rc; \ do { \ _rc = (exp); \ } while (_rc == -1 && errno == EINTR); \ _rc; \ })) #endif } // namespace mozilla #endif