提交 9359167e 编写于 作者: L Laine Stump

util: allow calling virSocketAddrGetIPPrefix with NULL netmask or address

There are times when we don't have a netmask pointer to give to
virSocketAddrGetIPPrefix() (e.g. the IP addresses in domain interfaces
only have a prefix, no netmask), but it would have caused a segv if we
called it with NULL instead of a pointer to a netmask. This patch
qualifies the code that would use the netmask or address pointers to
check for NULL first.
上级 e1219b6f
/* /*
* Copyright (C) 2009-2015 Red Hat, Inc. * Copyright (C) 2009-2016 Red Hat, Inc.
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
...@@ -1026,9 +1026,9 @@ virSocketAddrGetIPPrefix(const virSocketAddr *address, ...@@ -1026,9 +1026,9 @@ virSocketAddrGetIPPrefix(const virSocketAddr *address,
{ {
if (prefix > 0) { if (prefix > 0) {
return prefix; return prefix;
} else if (VIR_SOCKET_ADDR_VALID(netmask)) { } else if (netmask && VIR_SOCKET_ADDR_VALID(netmask)) {
return virSocketAddrGetNumNetmaskBits(netmask); return virSocketAddrGetNumNetmaskBits(netmask);
} else if (VIR_SOCKET_ADDR_IS_FAMILY(address, AF_INET)) { } else if (address && VIR_SOCKET_ADDR_IS_FAMILY(address, AF_INET)) {
/* Return the natural prefix for the network's ip address. /* Return the natural prefix for the network's ip address.
* On Linux we could use the IN_CLASSx() macros, but those * On Linux we could use the IN_CLASSx() macros, but those
* aren't guaranteed on all platforms, so we just deal with * aren't guaranteed on all platforms, so we just deal with
...@@ -1053,7 +1053,7 @@ virSocketAddrGetIPPrefix(const virSocketAddr *address, ...@@ -1053,7 +1053,7 @@ virSocketAddrGetIPPrefix(const virSocketAddr *address,
return 24; return 24;
} }
return -1; return -1;
} else if (VIR_SOCKET_ADDR_IS_FAMILY(address, AF_INET6)) { } else if (address && VIR_SOCKET_ADDR_IS_FAMILY(address, AF_INET6)) {
if (virSocketAddrIsWildcard(address)) if (virSocketAddrIsWildcard(address))
return 0; return 0;
return 64; return 64;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册