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

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. 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. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Cc: Maxim Perevedentsev <mperevedentsev@virtuozzo.com> Cc: Laine Stump <laine@laine.org> Cc: Dario Faggioli <dario.faggioli@citrix.com> Cc: Jim Fehlig <jfehlig@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; -- 2.1.4

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@citrix.com> Cc: Maxim Perevedentsev <mperevedentsev@virtuozzo.com> Cc: Laine Stump <laine@laine.org> Cc: Dario Faggioli <dario.faggioli@citrix.com> Cc: Jim Fehlig <jfehlig@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;

On 11/30/2015 09:18 PM, Jim Fehlig wrote:
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.
Looks like I forgot to actually add Daniel to the cc list. Doing so now...
Regards, Jim
Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Cc: Maxim Perevedentsev <mperevedentsev@virtuozzo.com> Cc: Laine Stump <laine@laine.org> Cc: Dario Faggioli <dario.faggioli@citrix.com> Cc: Jim Fehlig <jfehlig@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; -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list

On Tue, Dec 01, 2015 at 05:49:10PM -0700, Jim Fehlig wrote:
On 11/30/2015 09:18 PM, Jim Fehlig wrote:
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.
Looks like I forgot to actually add Daniel to the cc list. Doing so now...
Regards, Jim
Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Cc: Maxim Perevedentsev <mperevedentsev@virtuozzo.com> Cc: Laine Stump <laine@laine.org> Cc: Dario Faggioli <dario.faggioli@citrix.com> Cc: Jim Fehlig <jfehlig@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;
Yeah, that looks like about as good as we'll get to deal with this so ACK to that change in absence of any better suggestion. Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

On 12/02/2015 03:27 AM, Daniel P. Berrange wrote:
On Tue, Dec 01, 2015 at 05:49:10PM -0700, Jim Fehlig wrote:
On 11/30/2015 09:18 PM, Jim Fehlig wrote:
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. Looks like I forgot to actually add Daniel to the cc list. Doing so now...
Regards, Jim
Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Cc: Maxim Perevedentsev <mperevedentsev@virtuozzo.com> Cc: Laine Stump <laine@laine.org> Cc: Dario Faggioli <dario.faggioli@citrix.com> Cc: Jim Fehlig <jfehlig@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;
Yeah, that looks like about as good as we'll get to deal with this so ACK to that change in absence of any better suggestion.
Thanks. I noticed DV tagged 1.3.0-rc1, but I've pushed this since it fixes build failures on some arch. Regards, Jim
participants (3)
-
Daniel P. Berrange
-
Ian Campbell
-
Jim Fehlig