lkml.org 
[lkml]   [2013]   [Mar]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[ 034/104] sctp: Use correct sideffect command in duplicate cookie handling
    3.2-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Vlad Yasevich <vyasevich@gmail.com>

    [ Upstream commit f2815633504b442ca0b0605c16bf3d88a3a0fcea ]

    When SCTP is done processing a duplicate cookie chunk, it tries
    to delete a newly created association. For that, it has to set
    the right association for the side-effect processing to work.
    However, when it uses the SCTP_CMD_NEW_ASOC command, that performs
    more work then really needed (like hashing the associationa and
    assigning it an id) and there is no point to do that only to
    delete the association as a next step. In fact, it also creates
    an impossible condition where an association may be found by
    the getsockopt() call, and that association is empty. This
    causes a crash in some sctp getsockopts.

    The solution is rather simple. We simply use SCTP_CMD_SET_ASOC
    command that doesn't have all the overhead and does exactly
    what we need.

    Reported-by: Karl Heiss <kheiss@gmail.com>
    Tested-by: Karl Heiss <kheiss@gmail.com>
    CC: Neil Horman <nhorman@tuxdriver.com>
    Signed-off-by: Vlad Yasevich <vyasevich@gmail.com>
    Acked-by: Neil Horman <nhorman@tuxdriver.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    net/sctp/sm_statefuns.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c
    index 891f5db..cb1c430 100644
    --- a/net/sctp/sm_statefuns.c
    +++ b/net/sctp/sm_statefuns.c
    @@ -2044,7 +2044,7 @@ sctp_disposition_t sctp_sf_do_5_2_4_dupcook(const struct sctp_endpoint *ep,
    }

    /* Delete the tempory new association. */
    - sctp_add_cmd_sf(commands, SCTP_CMD_NEW_ASOC, SCTP_ASOC(new_asoc));
    + sctp_add_cmd_sf(commands, SCTP_CMD_SET_ASOC, SCTP_ASOC(new_asoc));
    sctp_add_cmd_sf(commands, SCTP_CMD_DELETE_TCB, SCTP_NULL());

    /* Restore association pointer to provide SCTP command interpeter



    \
     
     \ /
      Last update: 2013-03-25 02:41    [W:4.034 / U:1.280 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site