[PATCH] netlink: fix append of whole original message on negativeack.

From: M Lammertink
Date: Thu Oct 23 2008 - 14:18:22 EST

From: Michel Lammertink <mlammertink <at> ti-wmc.nl>
Signed-off-by: Michel Lammertink <mlammertink <at> ti-wmc.nl>

Netlink can return an negative acknowledgement, which AFAICT should include an error code and the whole original message. This patch fixes the size argument given to the __nlmsg_put call. Without this patch only the original header was attached.

Can anyone explain to me why struct nlmsgerr contains an int error and the nlmsghdr struct. The comment in netlink_ack states that the whole message should be appended. Why not only include an int error in struct nlmsgerr and just append the original message?

Comments appreciated.

diff -uprN linux- linux-
--- linux- 2008-10-23 18:01:54.000000000 +0200
+++ linux- 2008-10-23 18:04:22.000000000 +0200
@@ -1656,7 +1656,7 @@ void netlink_ack(struct sk_buff *in_skb,

rep = __nlmsg_put(skb, NETLINK_CB(in_skb).pid, nlh->nlmsg_seq,
- NLMSG_ERROR, sizeof(struct nlmsgerr), 0);
+ NLMSG_ERROR, payload, 0);
errmsg = nlmsg_data(rep);
errmsg->error = err;
memcpy(&errmsg->msg, nlh, err ? nlh->nlmsg_len : sizeof(*nlh));
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/