From 4f8a571c5e56d0cedd59f17531c63981e76a1905 Mon Sep 17 00:00:00 2001 From: Thomas Graf Date: Thu, 1 Dec 2005 14:30:00 -0800 Subject: [PATCH] --- yaml --- r: 14935 b: refs/heads/master c: ea86575eaf99a9262a969309d934318028dbfacb h: refs/heads/master i: 14933: bffc92020298f0d2fdb02ae24c166eed90ddb116 14931: 6c441358a1d7dfe0f49d954e22fa5205064fbebd 14927: 3e964a2da74761252b1136d9bb4ff43b1bda9745 v: v3 --- [refs] | 2 +- trunk/net/ipv4/fib_frontend.c | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 9f9c949bf708..b8d3dc4ef488 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2a43c4af3fa2e701008d51c28365e26fccf9cbb0 +refs/heads/master: ea86575eaf99a9262a969309d934318028dbfacb diff --git a/trunk/net/ipv4/fib_frontend.c b/trunk/net/ipv4/fib_frontend.c index 882f88f6d13b..19b1b984d687 100644 --- a/trunk/net/ipv4/fib_frontend.c +++ b/trunk/net/ipv4/fib_frontend.c @@ -544,12 +544,16 @@ static void nl_fib_input(struct sock *sk, int len) struct sk_buff *skb = NULL; struct nlmsghdr *nlh = NULL; struct fib_result_nl *frn; - int err; u32 pid; struct fib_table *tb; - skb = skb_recv_datagram(sk, 0, 0, &err); + skb = skb_dequeue(&sk->sk_receive_queue); nlh = (struct nlmsghdr *)skb->data; + if (skb->len < NLMSG_SPACE(0) || skb->len < nlh->nlmsg_len || + nlh->nlmsg_len < NLMSG_LENGTH(sizeof(*frn))) { + kfree_skb(skb); + return; + } frn = (struct fib_result_nl *) NLMSG_DATA(nlh); tb = fib_get_table(frn->tb_id_in);