Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=027f6e1ad32de32f9fe1c61d0f744e329e8acfd9
Commit:     027f6e1ad32de32f9fe1c61d0f744e329e8acfd9
Parent:     73d9c4fd1a6ec4950b2eac8135d35506bf400d6c
Author:     Vlad Yasevich <[EMAIL PROTECTED]>
AuthorDate: Wed Nov 7 11:39:27 2007 -0500
Committer:  Vlad Yasevich <[EMAIL PROTECTED]>
CommitDate: Wed Nov 7 11:39:27 2007 -0500

    SCTP: Fix a potential race between timers and receive path.
    
    There is a possible race condition where the timer code will
    free the association and the next packet in the queue will also
    attempt to free the same association.
    
    The example is, when we receive an ABORT at about the same time
    as the retransmission timer fires.  If the timer wins the race,
    it will free the association.  Once it releases the lock, the
    queue processing will recieve the ABORT and will try to free
    the association again.
    
    Signed-off-by: Vlad Yasevich <[EMAIL PROTECTED]>
---
 net/sctp/inqueue.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/net/sctp/inqueue.c b/net/sctp/inqueue.c
index f10fe7f..cf4b7eb 100644
--- a/net/sctp/inqueue.c
+++ b/net/sctp/inqueue.c
@@ -90,6 +90,10 @@ void sctp_inq_free(struct sctp_inq *queue)
 void sctp_inq_push(struct sctp_inq *q, struct sctp_chunk *chunk)
 {
        /* Directly call the packet handling routine. */
+       if (chunk->rcvr->dead) {
+               sctp_chunk_free(chunk);
+               return;
+       }
 
        /* We are now calling this either from the soft interrupt
         * or from the backlog processing.
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to