[DCCP]: Use AF-independent rebuild_header routine
authorGerrit Renker <gerrit@erg.abdn.ac.uk>
Wed, 28 Nov 2007 08:35:08 +0000 (08:35 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 28 Jan 2008 22:55:12 +0000 (14:55 -0800)
This fixes a nasty bug: dccp_send_reset() is called by both DCCPv4 and DCCPv6, but uses
inet_sk_rebuild_header() in each case. This leads to unpredictable and weird behaviour:
under some conditions, DCCPv6 Resets were sent, in other not.

The fix is to use the AF-independent rebuild_header routine.

Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/dccp/output.c

index 33ce737ef3a8e9405980c468f5b15ba2565d0c4c..7caa7f57bb7ea5f956079347be7ce9925f6f78bc 100644 (file)
@@ -391,7 +391,7 @@ int dccp_send_reset(struct sock *sk, enum dccp_reset_codes code)
         * FIXME: what if rebuild_header fails?
         * Should we be doing a rebuild_header here?
         */
-       int err = inet_sk_rebuild_header(sk);
+       int err = inet_csk(sk)->icsk_af_ops->rebuild_header(sk);
 
        if (err != 0)
                return err;