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

fix: don't use invalid port 0 when NATMap fails #3058

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

Conversation

wlynxg
Copy link
Contributor

@wlynxg wlynxg commented Nov 21, 2024

fix: #3057

Copy link
Member

@sukunrt sukunrt left a comment

Choose a reason for hiding this comment

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

Thanks for the PR @wlynxg

Comment on lines 109 to 112
extPort, found := nat.mappings[entry{protocol: protocol, port: port}]
if !found {
if !found || extPort == 0 {
return netip.AddrPort{}, false
}
Copy link
Member

Choose a reason for hiding this comment

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

Remove the check from here.

Comment on lines +934 to +935
successMapCnt++

Copy link
Member

@sukunrt sukunrt Nov 25, 2024

Choose a reason for hiding this comment

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

Add the port 0 check to line 911 where we check for is unspecified address. If you do so, it removes the need for introducing this new successMapCnt variable.

I would prefer keeping this change small because this code is pretty bad and we intend to rewrite it soon in #2229

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Does the check placed on line 911 mean that the continue is executed when the extMaddr port is 0? If so, when all extMaddr ports are 0, will observedAddrs not be added to the finalAddrs address list?

Copy link
Member

Choose a reason for hiding this comment

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

I don't think so.

		if !manet.IsIPUnspecified(extMaddr) {
				// Add in the mapped addr.
				finalAddrs = append(finalAddrs, extMaddr)
} else {

If the nat provided address is not an unspecified addr and(new change) it's not port == 0, we will add it to final addrs.
We still fall through and add the observed addresses.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It is OK to add the address whose port is not 0 to finalAddrs here.

However, at

finalAddrs = append(finalAddrs, ma.Join(ip, extMaddrNoIP))
, it is also necessary to judge whether the port is 0. If the port is 0, should the obsMaddr address be added directly without splicing?

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

Successfully merging this pull request may close these issues.

NATMap mapping failed, resulting in an observed address error
2 participants