[Patch iproute2] ipaddress: do not add ifa_flags when not necessary

Subsystems: the rest

STALE4501d

3 messages, 2 authors, 2014-04-04 · open the first message on its own page

[Patch iproute2] ipaddress: do not add ifa_flags when not necessary

From: Cong Wang <hidden>
Date: 2014-04-04 06:05:11

commit 37c9b94ed21d5779acc23d89a4 (add support for extended ifa_flags)
introduced a regression:

	# ./ip/ip addr add 192.168.0.1/24 dev eth0
	RTNETLINK answers: Invalid argument

This is due to old kernels don't support IFA_FLAGS flag, it should be skipped
if we don't use this feature at all.

Cc: Jiri Pirko <jiri@resnulli.us>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Cong Wang <redacted>

---
diff --git a/ip/ipaddress.c b/ip/ipaddress.c
index 14d1720..71ae8f3 100644
--- a/ip/ipaddress.c
+++ b/ip/ipaddress.c
@@ -1398,8 +1398,10 @@ static int ipaddr_modify(int cmd, int flags, int argc, char **argv)
 		}
 		argc--; argv++;
 	}
-	req.ifa.ifa_flags = ifa_flags;
-	addattr32(&req.n, sizeof(req), IFA_FLAGS, ifa_flags);
+	if (ifa_flags) {
+		req.ifa.ifa_flags = ifa_flags;
+		addattr32(&req.n, sizeof(req), IFA_FLAGS, ifa_flags);
+	}
 
 	if (d == NULL) {
 		fprintf(stderr, "Not enough information: \"dev\" argument is required.\n");

Re: [Patch iproute2] ipaddress: do not add ifa_flags when not necessary

From: David Miller <davem@davemloft.net>
Date: 2014-04-04 13:57:30

From: Cong Wang <redacted>
Date: Thu,  3 Apr 2014 23:05:03 -0700
commit 37c9b94ed21d5779acc23d89a4 (add support for extended ifa_flags)
introduced a regression:

	# ./ip/ip addr add 192.168.0.1/24 dev eth0
	RTNETLINK answers: Invalid argument

This is due to old kernels don't support IFA_FLAGS flag, it should be skipped
if we don't use this feature at all.

Cc: Jiri Pirko <jiri@resnulli.us>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Cong Wang <redacted>
Your patch doesn't really fully fix the problem.

If the kernel rejects because of presence of the IFA_FLAGS attribute,
it will do so for all such cases.

Therefore the guard you need is not whether ifa_flags is NULL, but
whether a large enough flag bit is set such that IFA_FLAGS is required.

IFA_FLAGS was added because ifa.ifa_flags is too small for the new
values we needed to add.

Re: [Patch iproute2] ipaddress: do not add ifa_flags when not necessary

From: Cong Wang <hidden>
Date: 2014-04-04 16:52:05

On Fri, Apr 4, 2014 at 6:59 AM, David Miller [off-list ref] wrote:
From: Cong Wang <redacted>
Date: Thu,  3 Apr 2014 23:05:03 -0700
quoted
commit 37c9b94ed21d5779acc23d89a4 (add support for extended ifa_flags)
introduced a regression:

      # ./ip/ip addr add 192.168.0.1/24 dev eth0
      RTNETLINK answers: Invalid argument

This is due to old kernels don't support IFA_FLAGS flag, it should be skipped
if we don't use this feature at all.

Cc: Jiri Pirko <jiri@resnulli.us>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Cong Wang <redacted>
Your patch doesn't really fully fix the problem.

If the kernel rejects because of presence of the IFA_FLAGS attribute,
it will do so for all such cases.

Therefore the guard you need is not whether ifa_flags is NULL, but
whether a large enough flag bit is set such that IFA_FLAGS is required.

IFA_FLAGS was added because ifa.ifa_flags is too small for the new
values we needed to add.
Right, we should use IFA_FLAGS only when ifa_flags > 0xFF.

Thanks!
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help