jerpelea opened a new pull request, #19619:
URL: https://github.com/apache/nuttx/pull/19619
## Summary
The group address in the IGMP header is declared as uint16_t grpaddr[2], so
it decays to a pointer. Comparing it against INADDR_ANY compares the address
of a struct member against 0, which is always false. The General Query branch
is therefore unreachable and GCC discards it entirely.
Commit 09bb292fa2 ("net/igmp: fix build warning on GCC 12.2.0") replaced the
original
if (igmp->grpaddr == 0)
with
if (net_ipv4addr_cmp(igmp->grpaddr, INADDR_ANY) != 0)
but net_ipv4addr_cmp(a, b) expands to (a == b) and INADDR_ANY expands to
((in_addr_t)0), so the emitted comparison is unchanged. The -Waddress
diagnostic disappeared only because the comparison now originates inside a
macro expanded from a header included via -isystem, and GCC suppresses warnings
from system-header macros. The defect was hidden, not fixed.
That commit also rewrote the unicast query test from group->grpaddr != 0,
which was well-formed, into the same pointer comparison, making it
unconditionally true.
Convert the header field with net_ip4addr_conv32() once, and compare the
resulting in_addr_t. The conversion was already being done in the
group-specific branch, so this only hoists it and reuses it.
Impact: a General Query (destination 224.0.0.1, group address 0) is the
periodic query every IGMP querier sends. It currently falls through to the
group-specific branch, where igmp_grpallocfind() allocates a group for 0.0.0.0
and schedules a report for it, while joined groups never have their report
timers restarted. The querier then ages out the membership and multicast
delivery to the device stops.
## Impact
RELEASE
## Testing
CI
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]