--- a/python-ethtool/etherinfo.c.orig 2014-01-13 13:38:58.716919961 +0100 +++ b/python-ethtool/etherinfo.c 2014-01-13 13:52:15.838033480 +0100 @@ -327,6 +327,9 @@ */ if( ethinf->index < 0 ) { link_cache = rtnl_link_alloc_cache(*data->nlc); + if( link_cache == NULL ) { + return 0; + } ethinf->index = rtnl_link_name2i(link_cache, ethinf->device); if( ethinf->index < 0 ) { return 0; @@ -339,6 +342,9 @@ case NLQRY_LINK: /* Extract MAC/hardware address of the interface */ link_cache = rtnl_link_alloc_cache(*data->nlc); + if( link_cache == NULL ) { + return 0; + } link = rtnl_link_alloc(); rtnl_link_set_ifindex(link, ethinf->index); nl_cache_foreach_filter(link_cache, (struct nl_object *)link, callback_nl_link, ethinf); @@ -350,7 +356,14 @@ case NLQRY_ADDR: /* Extract IP address information */ addr_cache = rtnl_addr_alloc_cache(*data->nlc); + if( addr_cache == NULL ) { + return 0; + } addr = rtnl_addr_alloc(); + if( addr == NULL ) { + nl_cache_free(addr_cache); + return 0; + } rtnl_addr_set_ifindex(addr, ethinf->index); /* Make sure we don't have any old IPv6 addresses saved */ @@ -409,7 +422,9 @@ /* No earlier connections exists, establish a new one */ *data->nlc = nl_handle_alloc(); - nl_connect(*data->nlc, NETLINK_ROUTE); + if( nl_connect(*data->nlc, NETLINK_ROUTE) != 0 ) { + return 0; + } if( (*data->nlc != NULL) ) { /* Force O_CLOEXEC flag on the NETLINK socket */ if( fcntl(nl_socket_get_fd(*data->nlc), F_SETFD, FD_CLOEXEC) == -1 ) {