You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by ad...@apache.org on 2017/05/19 22:18:23 UTC

[2/2] kudu git commit: KUDU-2022 Fix nullptr access at GetLocalNetworks.

KUDU-2022 Fix nullptr access at GetLocalNetworks.

GetLocalNetworks accesses member with nullptr when retrieves
local network interfaces, as both ifaddrs.ifa_addr and
ifaddrs.ifa_netmask fields can contain null pointer. This
patch checks if either of these fields is null before
accessing.

Change-Id: I99d308a48450a25a103afef08b6dcdc557c61f08
Reviewed-on: http://gerrit.cloudera.org:8080/6932
Reviewed-by: Adar Dembo <ad...@cloudera.com>
Tested-by: Kudu Jenkins


Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/11f0775e
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/11f0775e
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/11f0775e

Branch: refs/heads/master
Commit: 11f0775e828319c2d27eb530ae54400aa8d02206
Parents: aeb7bf9
Author: hahao <ha...@cloudera.com>
Authored: Fri May 19 14:28:35 2017 -0700
Committer: Adar Dembo <ad...@cloudera.com>
Committed: Fri May 19 22:18:06 2017 +0000

----------------------------------------------------------------------
 src/kudu/util/net/net_util.cc | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/11f0775e/src/kudu/util/net/net_util.cc
----------------------------------------------------------------------
diff --git a/src/kudu/util/net/net_util.cc b/src/kudu/util/net/net_util.cc
index ac5c67f..aca1ae2 100644
--- a/src/kudu/util/net/net_util.cc
+++ b/src/kudu/util/net/net_util.cc
@@ -278,10 +278,12 @@ Status GetLocalNetworks(std::vector<Network>* net) {
 
   net->clear();
   for (struct ifaddrs *ifa = ifap; ifa; ifa = ifa->ifa_next) {
+    if (ifa->ifa_addr == nullptr || ifa->ifa_netmask == nullptr) continue;
+
     if (ifa->ifa_addr->sa_family == AF_INET) {
       Sockaddr addr(*reinterpret_cast<struct sockaddr_in*>(ifa->ifa_addr));
-      Sockaddr mask(*reinterpret_cast<struct sockaddr_in*>(ifa->ifa_netmask));
-      Network network(addr.addr().sin_addr.s_addr, mask.addr().sin_addr.s_addr);
+      Sockaddr netmask(*reinterpret_cast<struct sockaddr_in*>(ifa->ifa_netmask));
+      Network network(addr.addr().sin_addr.s_addr, netmask.addr().sin_addr.s_addr);
       net->push_back(network);
     }
   }