Skip to content
This repository has been archived by the owner on Aug 27, 2022. It is now read-only.

Commit

Permalink
Revert "netlink: netlink_recvmsg() fix"
Browse files Browse the repository at this point in the history
This reverts commit 1235f50.

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

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
davem330 committed Aug 16, 2010
1 parent f3d3f61 commit daa3766
Showing 1 changed file with 6 additions and 16 deletions.
22 changes: 6 additions & 16 deletions net/netlink/af_netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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;
}
}
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit daa3766

Please sign in to comment.