]> Pileus Git - ~andy/linux/commitdiff
sctp: fix to reset packet information after packet transmit
authorWei Yongjun <yjwei@cn.fujitsu.com>
Wed, 2 Sep 2009 05:05:33 +0000 (13:05 +0800)
committerVlad Yasevich <vladislav.yasevich@hp.com>
Fri, 4 Sep 2009 22:21:00 +0000 (18:21 -0400)
The packet information does not reset after packet transmit, this
may cause some problems such as following DATA chunk be sent without
AUTH chunk, even if the authentication of DATA chunk has been
requested by the peer.

Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com>
Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
net/sctp/output.c

index b801bc9fb63969c8beccad3f827966ce5149fc14..1f9336177ee28fd08c5993a20f0cc4d8dddd6c75 100644 (file)
@@ -136,6 +136,17 @@ struct sctp_packet *sctp_packet_init(struct sctp_packet *packet,
        return packet;
 }
 
+static void sctp_packet_reset(struct sctp_packet *packet)
+{
+       packet->size = packet->overhead;
+       packet->has_cookie_echo = 0;
+       packet->has_sack = 0;
+       packet->has_data = 0;
+       packet->has_auth = 0;
+       packet->ipfragok = 0;
+       packet->auth = NULL;
+}
+
 /* Free a packet.  */
 void sctp_packet_free(struct sctp_packet *packet)
 {
@@ -576,7 +587,7 @@ int sctp_packet_transmit(struct sctp_packet *packet)
        (*tp->af_specific->sctp_xmit)(nskb, tp);
 
 out:
-       packet->size = packet->overhead;
+       sctp_packet_reset(packet);
        return err;
 no_route:
        kfree_skb(nskb);