Re: git: 8f6561e8adbd - stable/15 - ixv: fix multicast address enumeration

Bruce Simpson <[email protected]>
Newsgroups gmane.os.freebsd.devel.cvs.src
Organization The FreeBSD Project
Message-ID <57daffd7-3a4b-40dc-80fb-945851929412__13218.4267089301$1786176534$gmane$org@FreeBSD.org>
Somewhat related: I'm concerned that ifmcstat(8) may not be reporting 
AF_LINK memberships in all cases, only the ones which were plumbed there 
by an upper layer (AF_INET, AF_INET6).

I noticed this when preparing "add that which was never ratified" for 
IPv6 sockets.

It's a potential issue for LLDP, Carrier Ethernet and IS-IS bring-up. 
Has anyone else observed this? Is anyone else actively using it, or 
using FreeBSD for these control plane protocols?

It may be a "bms@ ends up having to fix it again" issue because I merged 
ifmcstat(8) from NetBSD originally. #tragedyofthecommons

On 08/08/2026 01:38, Kevin Bowling wrote:
> The branch stable/15 has been updated by kbowling:
>
> URL: https://cgit.FreeBSD.org/src/commit/?id=8f6561e8adbd07f52278b5a404c72d5c9643b471
>
> commit 8f6561e8adbd07f52278b5a404c72d5c9643b471
> Author:     Kevin Bowling <[email protected]>
> AuthorDate: 2026-07-28 11:06:23 +0000
> Commit:     Kevin Bowling <[email protected]>
> CommitDate: 2026-08-08 00:34:24 +0000
>
>      ixv: fix multicast address enumeration
>      
>      if_foreach_llmaddr() adds each callback return value to its running
>      count.  Returning the incremented count made the address indices grow
>      as 0, 1, 3, 7, and so on, eventually writing beyond the multicast
>      address array.
>      
>      Return one address per callback and stop copying when the array is
>      full, matching the ixv-1.6.12 driver.
>      
>      Fixes:          ff06a8dbb677 ("Mechanically convert ixgbe(4) to IfAPI")
>      
>      (cherry picked from commit 6020de5ad154d54c8b9a838f28612c2182330c67)
> ---
>   sys/dev/ixgbe/if_ixv.c | 6 ++++--
>   1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/sys/dev/ixgbe/if_ixv.c b/sys/dev/ixgbe/if_ixv.c
> index 8a1c1aae041d..24e6fa714a7b 100644
> --- a/sys/dev/ixgbe/if_ixv.c
> +++ b/sys/dev/ixgbe/if_ixv.c
> @@ -842,11 +842,14 @@ ixv_negotiate_api(struct ixgbe_softc *sc)
>   static u_int
>   ixv_if_multi_set_cb(void *cb_arg, struct sockaddr_dl *addr, u_int cnt)
>   {
> +	if (cnt >= MAX_NUM_MULTICAST_ADDRESSES)
> +		return (0);
> +
>   	bcopy(LLADDR(addr),
>   	    &((u8 *)cb_arg)[cnt * IXGBE_ETH_LENGTH_OF_ADDRESS],
>   	    IXGBE_ETH_LENGTH_OF_ADDRESS);
>   
> -	return (++cnt);
> +	return (1);
>   }
>   
>   /************************************************************************
> @@ -1982,4 +1985,3 @@ ixv_init_device_features(struct ixgbe_softc *sc)
>   	if (sc->feat_cap & IXGBE_FEATURE_NEEDS_CTXD)
>   		sc->feat_en |= IXGBE_FEATURE_NEEDS_CTXD;
>   } /* ixv_init_device_features */
> -
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.