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) {
|
NBREC_LOGICAL_PORT_FOR_EACH(lport, ctx->ovnnb_idl) {
|
||||||
|
binding = NULL;
|
||||||
HMAP_FOR_EACH_WITH_HASH(hash_node, node,
|
HMAP_FOR_EACH_WITH_HASH(hash_node, node,
|
||||||
hash_string(lport->name, 0), &bindings_hmap) {
|
hash_string(lport->name, 0), &bindings_hmap) {
|
||||||
if (!strcmp(lport->name, hash_node->binding->logical_port)) {
|
if (!strcmp(lport->name, hash_node->binding->logical_port)) {
|
||||||
|
binding = hash_node->binding;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hash_node) {
|
if (binding) {
|
||||||
/* We found an existing binding for this logical port. Update its
|
/* We found an existing binding for this logical port. Update its
|
||||||
* contents. Right now the only thing we expect that could change
|
* contents. Right now the only thing we expect that could change
|
||||||
* is the list of MAC addresses. */
|
* is the list of MAC addresses. */
|
||||||
|
|
||||||
binding = hash_node->binding;
|
|
||||||
hmap_remove(&bindings_hmap, &hash_node->node);
|
hmap_remove(&bindings_hmap, &hash_node->node);
|
||||||
free(hash_node);
|
free(hash_node);
|
||||||
hash_node = NULL;
|
hash_node = NULL;
|
||||||
|
Reference in New Issue
Block a user