Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bgpd: Avoid use-after-free when flushing bgp_distance_table #17748

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

ton31337
Copy link
Member

@ton31337 ton31337 commented Jan 2, 2025

No description provided.

Fixes: 663281c ("BGP: Clean address-family config on daemon restart")

Signed-off-by: Donatas Abraitis <[email protected]>
@@ -15794,7 +15794,7 @@ void bgp_address_family_distance_delete(void)
bgp_distance_free(bdistance);

bgp_dest_set_bgp_distance_info(dest, NULL);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm - I'm not quite following.
above, the one-dest code calls bgp_dest_set_bgp_path_info(dest, NULL) instead of set_bgp_distance_info() - is one of these wrong?
and why does adding the dest = help ? if that unlock_node frees dest, it'll be NULL, and the iteration will stop - and that seems ... wrong: shouldn't the iteration continue through all of the dests?
I thought in some other places where a loop could free an object, we find the "next" at the top of the clause, instead of using the object in the for clause directly?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe you are right, I'm just trying to fix use-after-free by using the same pattern it's used somewhere else in the code too. You can see bgp_static_delete() as an example.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants