From: Andreas Henriksson <andreas@fatal.se>
To: Stephen Hemminger <shemminger@vyatta.com>
Cc: Johannes Berg <johannes@sipsolutions.net>,
stephen.hemminger@vyatta.com, 489340@bugs.debian.org,
netdev@vger.kernel.org
Subject: Re: iproute2: no error message when link up command fails.
Date: Thu, 17 Jul 2008 02:31:00 +0200 [thread overview]
Message-ID: <1216254660.31646.54.camel@amd64.fatal.se> (raw)
In-Reply-To: <20080716155354.28281053@extreme>
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.
(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.
diff --git a/lib/libnetlink.c b/lib/libnetlink.c
index 5ae64f7..4413165 100644
--- a/lib/libnetlink.c
+++ b/lib/libnetlink.c
@@ -348,12 +348,7 @@ int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer,
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");
+ perror("RTNETLINK error");
}
return -1;
}
--
Regards,
Andreas Henriksson
next prev parent reply other threads:[~2008-07-17 0:27 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 [this message]
2008-07-17 9:26 ` Patrick McHardy
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=1216254660.31646.54.camel@amd64.fatal.se \
--to=andreas@fatal.se \
--cc=489340@bugs.debian.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).