]> git.baikalelectronics.ru Git - kernel.git/commit
genetlink: fix family dump race
authorJohannes Berg <johannes.berg@intel.com>
Tue, 13 Aug 2013 07:04:05 +0000 (09:04 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 13 Aug 2013 07:57:06 +0000 (00:57 -0700)
commitec6f0f42142799d8afbf8ecbf01f203c7b51fb16
tree0853904283d081562e2c07bed067c36e03936c0c
parent378f9b81a1f6593c944d98e918cc5ba69c9a5127
genetlink: fix family dump race

When dumping generic netlink families, only the first dump call
is locked with genl_lock(), which protects the list of families,
and thus subsequent calls can access the data without locking,
racing against family addition/removal. This can cause a crash.
Fix it - the locking needs to be conditional because the first
time around it's already locked.

A similar bug was reported to me on an old kernel (3.4.47) but
the exact scenario that happened there is no longer possible,
on those kernels the first round wasn't locked either. Looking
at the current code I found the race described above, which had
also existed on the old kernel.

Cc: stable@vger.kernel.org
Reported-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/netlink/genetlink.c