Thread (4 messages) 4 messages, 2 authors, 2007-12-03

Re: [PATCH (resubmit)] Fix inet_diag.ko register vs rcv race

From: Pavel Emelyanov <hidden>
Date: 2007-12-03 09:01:38

Herbert Xu wrote:
On Thu, Nov 29, 2007 at 04:01:25PM +0300, Pavel Emelyanov wrote:
quoted
@@ -863,13 +861,13 @@ int inet_diag_register(const struct inet_diag_handler *h)
 	if (type >= INET_DIAG_GETSOCK_MAX)
 		goto out;
 
-	spin_lock(&inet_diag_register_lock);
+	mutex_lock(&inet_diag_mutex);
 	err = -EEXIST;
 	if (inet_diag_table[type] == NULL) {
 		inet_diag_table[type] = h;
 		err = 0;
 	}
-	spin_unlock(&inet_diag_register_lock);
+	mutex_unlock(&inet_diag_mutex);
Actually this causes a dead-lock when the handlers are built as modules
because we try to load them with that mutex held.
Ouch! Sorry, I didn't notice this :(
I've fixed it with this patch on top.
Thanks!
Cheers,
Pavel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help