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:
committed by
Ben Pfaff
parent
cf1486e004
commit
1d4e6b55b5
@@ -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;
|
||||
|
Reference in New Issue
Block a user