From: Eli Cohen Date: Wed, 4 Jan 2012 04:36:48 +0000 (-0800) Subject: IB/uverbs: Protect QP multicast list X-Git-Tag: v3.2.1~35 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=585ea9bc6752c41d669ea0f4cee8f3954df326e0;p=pandora-kernel.git IB/uverbs: Protect QP multicast list commit e214a0fe2b382fa302c036ecd6e6ffe99e3b9875 upstream. Userspace verbs multicast attach/detach operations on a QP are done while holding the rwsem of the QP for reading. That's not sufficient since a reader lock allows more than one reader to acquire the lock. However, multicast attach/detach does list manipulation that can corrupt the list if multiple threads run in parallel. Fix this by acquiring the rwsem as a writer to serialize attach/detach operations. Add idr_write_qp() and put_qp_write() to encapsulate this. This fixes oops seen when running applications that perform multicast joins/leaves. Reported by: Mike Dubman Signed-off-by: Eli Cohen Signed-off-by: Roland Dreier Signed-off-by: Greg Kroah-Hartman --- Reading git-diff-tree failed