]> git.baikalelectronics.ru Git - kernel.git/commit
netlink: fix compat recvmsg
authorJohannes Berg <johannes.berg@intel.com>
Sun, 15 Aug 2010 21:20:44 +0000 (21:20 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 19 Aug 2010 06:35:58 +0000 (23:35 -0700)
commit7f720f6204ccefae132ba1a033ae5a6be68ccc57
treeacb2b153892b6be2d39220017f30239d7d9a66b6
parente458a28b9470a049415b3d57d58444c741b2210e
netlink: fix compat recvmsg

Since
commit 672a60fd9075b5a94458e7e1fd513870fdb69944
Author: Johannes Berg <johannes@sipsolutions.net>
Date:   Wed Jul 1 11:26:02 2009 +0000

    net/compat/wext: send different messages to compat tasks

we had a race condition when setting and then
restoring frag_list. Eric attempted to fix it,
but the fix created even worse problems.

However, the original motivation I had when I
added the code that turned out to be racy is
no longer clear to me, since we only copy up
to skb->len to userspace, which doesn't include
the frag_list length. As a result, not doing
any frag_list clearing and restoring avoids
the race condition, while not introducing any
other problems.

Additionally, while preparing this patch I found
that since none of the remaining netlink code is
really aware of the frag_list, we need to use the
original skb's information for packet information
and credentials. This fixes, for example, the
group information received by compat tasks.

Cc: Eric Dumazet <eric.dumazet@gmail.com>
Cc: stable@kernel.org [2.6.31+, for 2.6.35 revert a8ecc314e6]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/netlink/af_netlink.c