From: Patrick McHardy <kaber@trash.net>
To: Andreas Henriksson <andreas@fatal.se>
Cc: Stephen Hemminger <shemminger@vyatta.com>,
Johannes Berg <johannes@sipsolutions.net>,
stephen.hemminger@vyatta.com, 489340@bugs.debian.org,
netdev@vger.kernel.org, "David S. Miller" <davem@davemloft.net>
Subject: Re: iproute2: no error message when link up command fails.
Date: Thu, 17 Jul 2008 11:26:38 +0200 [thread overview]
Message-ID: <487F104E.6070003@trash.net> (raw)
In-Reply-To: <1216254660.31646.54.camel@amd64.fatal.se>
[-- Attachment #1: Type: text/plain, Size: 1645 bytes --]
Andreas Henriksson wrote:
> On ons, 2008-07-16 at 15:53 -0700, Stephen Hemminger wrote:
>> The netlink message in question is marked as type ERROR but the errno
>> encoded in the message is zero.
>>
>> if (h->nlmsg_type == NLMSG_ERROR) {
>> struct nlmsgerr *err = (struct nlmsgerr*)NLMSG_DATA(h);
>> if (l < sizeof(struct nlmsgerr)) {
>> fprintf(stderr, "ERROR truncated\n");
>> } else {
>> errno = -err->error;
>> if (errno == 0) {
>> if (answer)
>> memcpy(answer, h, h->nlmsg_len);
>> return 0;
>> }
>> perror("RTNETLINK answers");
>> }
>>
>> So the netlink library just treats as a successful return.
> Why? This seems like a really bad idea to me, and none of the callers in
> iproute benefits from this as far as I can see.
>
> Just ripping out the errno == 0 special casing looks like and option to
> me, unless anyone can find a reason for it.
NLMSG_ERROR with errno == 0 is a netlink ACK message.
> (It'll give an error message and an error exit code! The message will be
> strange, but lets blame the kernel for that cosmetic issue. Atleast the
> user got some kind of notification.)
>
> Moving the "return 0;" inside the "if (answer)" would be another
> (atleast for iproutes callers of the library functions)...
>
>> To me it looks like the problem is in the kernel sending back
>> a NLMSG_ERROR with errno of zero. Some code path isn't setting
>> it up properly.
>
> None the less, it would be be good if the application wouldn't poop it's
> pants when it can be avoided - broken kernel or not.
The fix in this case is to propagate the return value from
dev_change_flags().
[-- Attachment #2: x --]
[-- Type: text/plain, Size: 784 bytes --]
rtnetlink: propagate error from dev_change_flags in do_setlink()
Andreas Henriksson <andreas@fatal.se> reported that unlike ifconfig,
iproute doesn't report an error when setting an interface up fails.
Propagate the return value from dev_change_flags() to fix this.
Signed-off-by: Patrick McHardy <kaber@trash.net>
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index a9a7721..ffde766 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -867,7 +867,9 @@ static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
if (ifm->ifi_change)
flags = (flags & ifm->ifi_change) |
(dev->flags & ~ifm->ifi_change);
- dev_change_flags(dev, flags);
+ err = dev_change_flags(dev, flags);
+ if (err < 0)
+ goto errout;
}
if (tb[IFLA_TXQLEN])
next prev parent reply other threads:[~2008-07-17 9:26 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-16 22:00 Bug#489340: iproute2: no error message when link up command fails Andreas Henriksson
2008-07-16 22:03 ` Stephen Hemminger
2008-07-16 22:27 ` Andreas Henriksson
2008-07-16 22:26 ` Stephen Hemminger
2008-07-16 22:35 ` Johannes Berg
2008-07-16 22:53 ` Stephen Hemminger
2008-07-17 0:31 ` Andreas Henriksson
2008-07-17 9:26 ` Patrick McHardy [this message]
2008-07-17 9:59 ` Jarek Poplawski
2008-07-17 10:31 ` jamal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=487F104E.6070003@trash.net \
--to=kaber@trash.net \
--cc=489340@bugs.debian.org \
--cc=andreas@fatal.se \
--cc=davem@davemloft.net \
--cc=johannes@sipsolutions.net \
--cc=netdev@vger.kernel.org \
--cc=shemminger@vyatta.com \
--cc=stephen.hemminger@vyatta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.