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

Commit daa3766e authored by David S. Miller's avatar David S. Miller
Browse files

Revert "netlink: netlink_recvmsg() fix"



This reverts commit 1235f504.

It causes regressions worse than the problem it was trying
to fix.  Eric will try to solve the problem another way.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f3d3f616
Loading
Loading
Loading
Loading
+6 −16
Original line number Diff line number Diff line
@@ -1406,7 +1406,7 @@ static int netlink_recvmsg(struct kiocb *kiocb, struct socket *sock,
	struct netlink_sock *nlk = nlk_sk(sk);
	int noblock = flags&MSG_DONTWAIT;
	size_t copied;
	struct sk_buff *skb;
	struct sk_buff *skb, *frag __maybe_unused = NULL;
	int err;

	if (flags&MSG_OOB)
@@ -1441,21 +1441,7 @@ static int netlink_recvmsg(struct kiocb *kiocb, struct socket *sock,
			kfree_skb(skb);
			skb = compskb;
		} else {
			/*
			 * Before setting frag_list to NULL, we must get a
			 * private copy of skb if shared (because of MSG_PEEK)
			 */
			if (skb_shared(skb)) {
				struct sk_buff *nskb;

				nskb = pskb_copy(skb, GFP_KERNEL);
				kfree_skb(skb);
				skb = nskb;
				err = -ENOMEM;
				if (!skb)
					goto out;
			}
			kfree_skb(skb_shinfo(skb)->frag_list);
			frag = skb_shinfo(skb)->frag_list;
			skb_shinfo(skb)->frag_list = NULL;
		}
	}
@@ -1492,6 +1478,10 @@ static int netlink_recvmsg(struct kiocb *kiocb, struct socket *sock,
	if (flags & MSG_TRUNC)
		copied = skb->len;

#ifdef CONFIG_COMPAT_NETLINK_MESSAGES
	skb_shinfo(skb)->frag_list = frag;
#endif

	skb_free_datagram(sk, skb);

	if (nlk->cb && atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf / 2)