[libvirt] [PATCH] network: fix element size in memmove

The memmove to move elements in the dhcp hosts array when inserting and deleting items was mistakenly basing the length of the copy on the size of a virNetworkDHCPHostDefPtr rather than virNetworkDHCPHostDef, with the expected disastrous results. --- We really should create a VIR_SOMETHING() macro to take care of this... src/conf/network_conf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index db398ae..046891c 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -2449,7 +2449,7 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def, } else { /* implied (command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST) */ memmove(ipdef->hosts + 1, ipdef->hosts, - sizeof(ipdef->hosts) * ipdef->nhosts); + sizeof(*ipdef->hosts) * ipdef->nhosts); ipdef->hosts[0] = host; ipdef->nhosts++; memset(&host, 0, sizeof(host)); @@ -2481,7 +2481,7 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def, /* remove it */ virNetworkDHCPHostDefClear(&ipdef->hosts[ii]); memmove(ipdef->hosts + ii, ipdef->hosts + ii + 1, - sizeof(ipdef->hosts) * ipdef->nhosts - ii - 1); + sizeof(*ipdef->hosts) * ipdef->nhosts - ii - 1); ipdef->nhosts--; ignore_value(VIR_REALLOC_N(ipdef->hosts, ipdef->nhosts)); } -- 1.7.11.4

On 09/19/2012 05:19 PM, Laine Stump wrote:
The memmove to move elements in the dhcp hosts array when inserting and deleting items was mistakenly basing the length of the copy on the size of a virNetworkDHCPHostDefPtr rather than virNetworkDHCPHostDef, with the expected disastrous results. ---
We really should create a VIR_SOMETHING() macro to take care of this...
src/conf/network_conf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index db398ae..046891c 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -2449,7 +2449,7 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def, } else { /* implied (command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST) */
memmove(ipdef->hosts + 1, ipdef->hosts, - sizeof(ipdef->hosts) * ipdef->nhosts); + sizeof(*ipdef->hosts) * ipdef->nhosts);
Okay.
ipdef->hosts[0] = host; ipdef->nhosts++; memset(&host, 0, sizeof(host)); @@ -2481,7 +2481,7 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def, /* remove it */ virNetworkDHCPHostDefClear(&ipdef->hosts[ii]); memmove(ipdef->hosts + ii, ipdef->hosts + ii + 1, - sizeof(ipdef->hosts) * ipdef->nhosts - ii - 1); + sizeof(*ipdef->hosts) * ipdef->nhosts - ii - 1);
Not so good. Here, you want: sizeof(*ipdef->hosts) * (ipdef->nhosts - ii - 1) ACK with that additional bug fix. -- Eric Blake eblake@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
participants (2)
-
Eric Blake
-
Laine Stump