Re: [SCTP][patch] socket does not wake up

From: Randall Stewart <rrs_at_cisco.com>
Date: Wed, 03 Oct 2007 18:51:14 -0400
Martin:

Thanks for the patch.. note that I will submit it to
re for approval after a minor fix.

socantrcvmore(so);

assumes you do NOT hold a lock.  This code holds
the socket lock.. which is the recv sockbuf lock..

So if you turn witness on your kernel and run with this
you will have a double lock.. panic.

Note to fix this right you should have it be:
  				SOCK_UNLOCK(so);
+				socantrcvmore(so);

Which is what I will submit to release ops.. you may want
to change this in what you are working with so you don;t
have some other side-effect issue from the double lock.. like
leaking sockets.

R

Martin Kulas wrote:
> Hello!
> 
> I patched netcat to support 1to1-SCTP sockets.
> Netcat uses the poll() system call to wait for new data
> in the socket buffer.  The problem is that poll() does not
> return when the kernel has closed the SCTP association.
> Select() has the same problem.
> 
> I digged around in the SCTP sources and created a patched to remove 
> that bug.   The patch is a one-liner:
> 
> <patch>
> --- sctp_pcb.c.orig	2007-10-03 13:27:12.000000000 +0200
> +++ sctp_pcb.c	2007-10-03 15:51:55.286987000 +0200
> _at__at_ -4234,6 +4234,7 _at__at_
>  					    SS_ISCONFIRMING |
>  					    SS_ISCONNECTED);
>  				}
> +				socantrcvmore(so);
>  				SOCK_UNLOCK(so);
>  				sctp_sowwakeup(inp, so);
>  				sctp_sorwakeup(inp, so);
> </patch>
> 
> Now I have no problems with the system calls select()/poll() anymore.
> Is this patch OK or have I missed anything?
> 
> 
> Regards,
> Martin
> 


-- 
Randall Stewart
NSSTG - Cisco Systems Inc.
803-345-0369 <or> 803-317-4952 (cell)
Received on Wed Oct 03 2007 - 21:20:00 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:18 UTC