[libvirt] [PATCH] network: selectively disable -Wcast-align in virNetDevParseDadStatus

Jim Fehlig jfehlig at suse.com
Tue Dec 1 04:18:20 UTC 2015


On 11/26/2015 08:10 AM, Ian Campbell wrote:
> Commit 0f7436ca54c9 "network: wait for DAD to finish for bridge IPv6 addresses"
> results in:
>
>  CC     util/libvirt_util_la-virnetdevmacvlan.lo
> util/virnetdev.c: In function 'virNetDevParseDadStatus':
> util/virnetdev.c:1319:188: error: cast increases required alignment of target type [-Werror=cast-align]
> util/virnetdev.c:1332:41: error: cast increases required alignment of target type [-Werror=cast-align]
> util/virnetdev.c:1334:92: error: cast increases required alignment of target type [-Werror=cast-align]
> cc1: all warnings being treated as errors
>
> on at least ARM platforms.

Thanks for looking into this issue Ian.

> The three macros involved (NLMSG_NEXT, IFA_RTA and RTA_NEXT) all appear to
> correctly take care of alignment, therefore suppress Wcast-align around their
> uses.

Indeed those macros seem to handle alignment, even on one of my older machines
with 2.6 kernel headers. IMO this falls under the "difficult or impossible to
address" scenarios that Daniel mentioned when introducing the VIR_WARNINGS_*
macros via commit e57aaa6f. Adding Daniel to cc for a sanity check of my weak ACK.

Regards,
Jim

>
> Signed-off-by: Ian Campbell <ian.campbell at citrix.com>
> Cc: Maxim Perevedentsev <mperevedentsev at virtuozzo.com>
> Cc: Laine Stump <laine at laine.org>
> Cc: Dario Faggioli <dario.faggioli at citrix.com>
> Cc: Jim Fehlig <jfehlig at suse.com>
> ---
>  src/util/virnetdev.c | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c
> index ade9afa..0bc809e 100644
> --- a/src/util/virnetdev.c
> +++ b/src/util/virnetdev.c
> @@ -1316,7 +1316,10 @@ virNetDevParseDadStatus(struct nlmsghdr *nlh, int len,
>      struct rtattr *rtattr_ptr;
>      size_t i;
>      struct in6_addr *addr;
> +
> +    VIR_WARNINGS_NO_CAST_ALIGN
>      for (; NLMSG_OK(nlh, len); nlh = NLMSG_NEXT(nlh, len)) {
> +    VIR_WARNINGS_RESET
>          if (NLMSG_PAYLOAD(nlh, 0) < sizeof(struct ifaddrmsg)) {
>              /* Message without payload is the last one. */
>              break;
> @@ -1329,9 +1332,11 @@ virNetDevParseDadStatus(struct nlmsghdr *nlh, int len,
>          }
>  
>          ifaddrmsg_len = IFA_PAYLOAD(nlh);
> +        VIR_WARNINGS_NO_CAST_ALIGN
>          rtattr_ptr = (struct rtattr *) IFA_RTA(ifaddrmsg_ptr);
>          for (; RTA_OK(rtattr_ptr, ifaddrmsg_len);
>              rtattr_ptr = RTA_NEXT(rtattr_ptr, ifaddrmsg_len)) {
> +            VIR_WARNINGS_RESET
>              if (RTA_PAYLOAD(rtattr_ptr) != sizeof(struct in6_addr)) {
>                  /* No address: ignore. */
>                  continue;




More information about the libvir-list mailing list