Commit 29085466 authored by valenting's avatar valenting
Browse files

Bug 1698388 - Fix static-analysis warnings in NetLinkService.cpp r=necko-reviewers,kershaw

parent 0fcd4881
Loading
Loading
Loading
Loading
+39 −29
Original line number Diff line number Diff line
@@ -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"
@@ -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;
@@ -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) {
@@ -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 {
@@ -278,7 +288,7 @@ class NetlinkLink {

 private:
  nsCString mName;
  struct ifinfomsg mIface;
  struct ifinfomsg mIface {};
};

class NetlinkRoute {
@@ -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) {
@@ -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;
@@ -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 {
@@ -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;
@@ -538,7 +548,7 @@ class NetlinkGenMsg : public NetlinkMsg {
  struct {
    struct nlmsghdr hdr;
    struct rtgenmsg gen;
  } mReq;
  } mReq{};
};

class NetlinkRtMsg : public NetlinkMsg {
@@ -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)
@@ -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;
@@ -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;
@@ -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]) {
+3 −3
Original line number Diff line number Diff line
@@ -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;
+0 −11
Original line number Diff line number Diff line
@@ -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