Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 707abb79 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6

* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6:
  [NETLINK]: Infinite recursion in netlink.
parents cbc31a47 1194ed0a
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -776,6 +776,8 @@ static void nl_fib_lookup(struct fib_result_nl *frn, struct fib_table *tb )
				       .nl_u = { .ip4_u = { .daddr = frn->fl_addr,
							    .tos = frn->fl_tos,
							    .scope = frn->fl_scope } } };

	frn->err = -ENOENT;
	if (tb) {
		local_bh_disable();

@@ -787,6 +789,7 @@ static void nl_fib_lookup(struct fib_result_nl *frn, struct fib_table *tb )
			frn->nh_sel = res.nh_sel;
			frn->type = res.type;
			frn->scope = res.scope;
			fib_res_put(&res);
		}
		local_bh_enable();
	}
@@ -801,6 +804,9 @@ static void nl_fib_input(struct sock *sk, int len)
	struct fib_table *tb;

	skb = skb_dequeue(&sk->sk_receive_queue);
	if (skb == NULL)
		return;

	nlh = (struct nlmsghdr *)skb->data;
	if (skb->len < NLMSG_SPACE(0) || skb->len < nlh->nlmsg_len ||
	    nlh->nlmsg_len < NLMSG_LENGTH(sizeof(*frn))) {
@@ -813,7 +819,7 @@ static void nl_fib_input(struct sock *sk, int len)

	nl_fib_lookup(frn, tb);

	pid = nlh->nlmsg_pid;           /*pid of sending process */
	pid = NETLINK_CB(skb).pid;       /* pid of sending process */
	NETLINK_CB(skb).pid = 0;         /* from kernel */
	NETLINK_CB(skb).dst_group = 0;  /* unicast */
	netlink_unicast(sk, skb, pid, MSG_DONTWAIT);