Patchwork [3.5.y.z,extended,stable] Patch "net: inet_diag -- Return error code if protocol handler is" has been added to staging queue

mail settings
Submitter Herton Ronaldo Krzesinski
Date Dec. 12, 2012, 5:11 a.m.
Message ID <>
Download mbox | patch
Permalink /patch/205415/
State New
Headers show


Herton Ronaldo Krzesinski - Dec. 12, 2012, 5:11 a.m.
This is a note to let you know that I have just added a patch titled

    net: inet_diag -- Return error code if protocol handler is

to the linux-3.5.y-queue branch of the 3.5.y.z extended stable tree 
which can be found at:;a=shortlog;h=refs/heads/linux-3.5.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.y.z tree, see



From 84aa45796d11945bc12b8269b9fdb577ed337e1a Mon Sep 17 00:00:00 2001
From: Cyrill Gorcunov <>
Date: Sat, 3 Nov 2012 09:30:34 +0000
Subject: [PATCH] net: inet_diag -- Return error code if protocol handler is

commit cacb6ba0f36ab14a507f4ee7697e8332899015d2 upstream.

We've observed that in case if UDP diag module is not
supported in kernel the netlink returns NLMSG_DONE without
notifying a caller that handler is missed.

This patch makes __inet_diag_dump to return error code instead.

So as example it become possible to detect such situation
and handle it gracefully on userspace level.

Signed-off-by: Cyrill Gorcunov <>
CC: David Miller <>
CC: Eric Dumazet <>
CC: Pavel Emelyanov <>
Acked-by: Pavel Emelyanov <>
Signed-off-by: David S. Miller <>
Signed-off-by: Herton Ronaldo Krzesinski <>
 net/ipv4/inet_diag.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)



diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c
index 46d1e71..1bfc104 100644
--- a/net/ipv4/inet_diag.c
+++ b/net/ipv4/inet_diag.c
@@ -875,13 +875,16 @@  static int __inet_diag_dump(struct sk_buff *skb, struct netlink_callback *cb,
 		struct inet_diag_req_v2 *r, struct nlattr *bc)
 	const struct inet_diag_handler *handler;
+	int err = 0;

 	handler = inet_diag_lock_handler(r->sdiag_protocol);
 	if (!IS_ERR(handler))
 		handler->dump(skb, cb, r, bc);
+	else
+		err = PTR_ERR(handler);

-	return skb->len;
+	return err ? : skb->len;

 static int inet_diag_dump(struct sk_buff *skb, struct netlink_callback *cb)