> On Sep 18, 2025, at 7:17 PM, Nakayama Kenjiro <nakayamakenj...@gmail.com> > wrote: > > Hi, > > There is a new diagnostic, alloc-size, in clang of LLVM22 that warns if the > size given to a malloc is smaller than the size of the struct pointed to by > its destination - https://github.com/llvm/llvm-project/pull/150028 > <https://github.com/llvm/llvm-project/pull/150028> > When we enable this option, in_mcast.c triggers this diagnostic, causing the > build to fail. > > ``` > freebsd/sys/netinet/in_mcast.c:749:10: error: allocation of insufficient size > '40' for type 'struct ip_msource' with size '48' [-Werror,-Walloc-size] > 749 | nims = malloc(sizeof(struct in_msource), M_INMFILTER, > | ^ > ``` > > https://github.com/freebsd/freebsd-src/blob/stable/15/sys/netinet/in_mcast.c#L749 > > <https://github.com/freebsd/freebsd-src/blob/stable/15/sys/netinet/in_mcast.c#L749> > ``` > static int > imf_get_source(struct in_mfilter *imf, const struct sockaddr_in *psin, > struct in_msource **plims) > { > ... > struct ip_msource *ims, *nims; > ... > nims = malloc(sizeof(struct in_msource), M_INMFILTER, > M_NOWAIT | M_ZERO);
The following lines has this ``` lims = (struct in_msource *)nims; ``` So probably assign the alloced memory directly to lims would make Clang happy, say ``` lims = malloc(sizeof( .... ; nims = (struct ip_mfilter *)lims; ``` You can have a try with that. Good luck with you ! > ``` > > As the error message explained, the mismatch between struct ip_msource * and > malloc(sizeof(struct in_msource)) triggers the error. > > However, when reading the source code carefully, it seems that *nims is > intentionally of type ip_msource instead of in_msource. > I would like to build with LLVM's alloc-size option enabled, but does anyone > have any good ideas on how to address this problem? Or would it be better to > report it as a false positive to LLVM? Though, I am aware that there is a > workaround to partially disable this option... Best regards, Zhenlei