Skip to contentSkip to conversation

Patch "inet: fix potential deadlock in reqsk_queue_unlink()" has been added to the 4.1-stable tree

PATCH [email protected] 1 participant 1 message Oct 17, 2015

Subsystems (3)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

inet: fix potential deadlock in reqsk_queue_unlink()

to the 4.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
inet-fix-potential-deadlock-in-reqsk_queue_unlink.patch
and it can be found in the queue-4.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From 83fccfc3940c4a2db90fd7e7079f5b465cd8c6af Mon Sep 17 00:00:00 2001

From: Eric Dumazet <[email protected]>
Date: Thu, 13 Aug 2015 15:44:51 -0700
Subject: inet: fix potential deadlock in reqsk_queue_unlink()

From: Eric Dumazet <[email protected]>

commit 83fccfc3940c4a2db90fd7e7079f5b465cd8c6af upstream.

When replacing del_timer() with del_timer_sync(), I introduced a deadlock condition :

reqsk_queue_unlink() is called from inet_csk_reqsk_queue_drop()

inet_csk_reqsk_queue_drop() can be called from many contexts, one being the timer handler itself (reqsk_timer_handler()).

In this case, del_timer_sync() loops forever.

Simple fix is to test if timer is pending.

Fixes 2235f2ac75fd ("inet: fix races with reqsk timers")
Cc Holger Hoffstätte <[email protected]>
Cc Andre Tomt <[email protected]>
Cc Chris Caputo <[email protected]>
---
 net/ipv4/inet_connection_sock.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
net/ipv4/inet_connection_sock.c +1 -1
@@ -584,7 +584,7 @@ static bool reqsk_queue_unlink(struct re
 	}
 
 	spin_unlock(&queue->syn_wait_lock);
-	if (del_timer_sync(&req->rsk_timer))
+	if (timer_pending(&req->rsk_timer) && del_timer_sync(&req->rsk_timer))
 		reqsk_put(req);
 	return found;
 }

Patches currently in stable-queue which might be from [email protected] are

queue-4.1/inet-fix-potential-deadlock-in-reqsk_queue_unlink.patch