2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-31 14:25:26 +00:00

ovn-nbd: Fix unsafe HMAP_FOR_EACH_WITH_HASH usage.

The previous code assumed that hash_node would be NULL when the loop
terminated without a match.  That's not the case, so track the match a
little differently.

Signed-off-by: Russell Bryant <rbryant@redhat.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
Russell Bryant
2015-04-14 21:52:54 -04:00
committed by Ben Pfaff
parent cf1486e004
commit 1d4e6b55b5

View File

@@ -152,19 +152,20 @@ set_bindings(struct nbd_context *ctx)
}
NBREC_LOGICAL_PORT_FOR_EACH(lport, ctx->ovnnb_idl) {
binding = NULL;
HMAP_FOR_EACH_WITH_HASH(hash_node, node,
hash_string(lport->name, 0), &bindings_hmap) {
if (!strcmp(lport->name, hash_node->binding->logical_port)) {
binding = hash_node->binding;
break;
}
}
if (hash_node) {
if (binding) {
/* We found an existing binding for this logical port. Update its
* contents. Right now the only thing we expect that could change
* is the list of MAC addresses. */
binding = hash_node->binding;
hmap_remove(&bindings_hmap, &hash_node->node);
free(hash_node);
hash_node = NULL;