Skip to content

Commit

Permalink
[NETLINK]: Fix ACK processing after netlink_dump_start
Browse files Browse the repository at this point in the history
Revert to original netlink behavior. Do not reply with ACK if the
netlink dump has bees successfully started.

libnl has been broken by the cd40b7d
The following command reproduce the problem:
   /nl-route-get 192.168.1.1

Signed-off-by: Denis V. Lunev <den@openvz.org>
Acked-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Denis V. Lunev authored and David S. Miller committed Oct 24, 2007
1 parent be7f827 commit 5c58298
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions net/netlink/af_netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -1565,7 +1565,11 @@ int netlink_dump_start(struct sock *ssk, struct sk_buff *skb,

netlink_dump(sk);
sock_put(sk);
return 0;

/* We successfully started a dump, by returning -EINTR we
* signal not to send ACK even if it was requested.
*/
return -EINTR;
}

void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err)
Expand Down Expand Up @@ -1619,17 +1623,21 @@ int netlink_rcv_skb(struct sk_buff *skb, int (*cb)(struct sk_buff *,

/* Only requests are handled by the kernel */
if (!(nlh->nlmsg_flags & NLM_F_REQUEST))
goto skip;
goto ack;

/* Skip control messages */
if (nlh->nlmsg_type < NLMSG_MIN_TYPE)
goto skip;
goto ack;

err = cb(skb, nlh);
skip:
if (err == -EINTR)
goto skip;

ack:
if (nlh->nlmsg_flags & NLM_F_ACK || err)
netlink_ack(skb, nlh, err);

skip:
msglen = NLMSG_ALIGN(nlh->nlmsg_len);
if (msglen > skb->len)
msglen = skb->len;
Expand Down

0 comments on commit 5c58298

Please sign in to comment.