Re: [v2] net/ceph/messenger: support IPv6 Link-Local with scope identifier
Alex Markuze <[email protected]> Mon, 6 Jul 2026 16:18:11 +0000
| Newsgroups | org.kernel.vger.ceph-devel |
|---|---|
| Message-ID | <[email protected]> |
Hi Max,
NACK for now. Thanks for the patch, but I have some concerns
that need a v2:
1. [critical] net/ceph/messenger.c:1241: IPv4 addresses with explicit ports no longer parse correctly
`ceph_pton()` now sets `*ipend = str + len`, where `len` extends to
the list delimiter (comma/end-of-string). For
`10.0.0.1:7001,10.0.0.2:7001`, `ipend` lands on the comma, not the
colon. The caller `ceph_parse_ips()` (line 1350) checks `*ipend ==
':'` to find the port — it never will. Depending on how
`inet_pton_with_scope()` handles the trailing `:7001` in the
address string, this either silently defaults every monitor to
`CEPH_MON_PORT` or fails the parse entirely. Either way, existing
mount strings with explicit ports regress.
Suggested fix: Split the address from the port before passing to
`inet_pton_with_scope()`, or set `*ipend` to where the address
portion actually ends (before the colon) so the caller's
port-parsing logic still works.
2. [major] net/ceph/messenger.c:1241: init_net instead of caller's network namespace
The patch passes `&init_net` to `inet_pton_with_scope()`. The rest
of the file uses the caller's namespace: `ceph_messenger_init()`
saves `current->nsproxy->net_ns` into `msgr->net` (line 1695),
`sock_create_kern()` uses `read_pnet(&con->msgr->net)` (line 448),
and `dns_query()` uses `current->nsproxy->net_ns` (line 1271).
Resolving `%eth0` scope identifiers against `init_net` will
silently break in containers where the interface only exists in the
container's namespace — exactly where link-local addresses are most
commonly used.
Suggested fix: Use `current->nsproxy->net_ns` instead of
`&init_net`.
3. [nit] net/ceph/messenger.c:1252: Spaces instead of tab indentation
Line is indented with spaces instead of tabs. Kernel coding style
requires tabs.
Suggested fix: Replace the 4 spaces with a tab.
New ipend placement breaks IPv4 port parsing (regression); init_net wrong namespace for container use.
--
Alex Markuze