[PATCH] NETFILTER: {ip, nf}_conntrack_sctp: fix remotely triggerable NULL ptr derefer...
authorPatrick McHardy <kaber@trash.net>
Tue, 5 Jun 2007 12:14:22 +0000 (14:14 +0200)
committerChris Wright <chrisw@sous-sol.org>
Thu, 7 Jun 2007 21:25:32 +0000 (14:25 -0700)
When creating a new connection by sending an unknown chunk type, we
don't transition to a valid state, causing a NULL pointer dereference in
sctp_packet when accessing sctp_timeouts[SCTP_CONNTRACK_NONE].

Fix by don't creating new conntrack entry if initial state is invalid.

Noticed by Vilmos Nebehaj <vilmos.nebehaj@ramsys.hu>

CC: Kiran Kumar Immidi <immidi_kiran@yahoo.com>
Cc: David Miller <davem@davemloft.net>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
net/ipv4/netfilter/ip_conntrack_proto_sctp.c
net/netfilter/nf_conntrack_proto_sctp.c

index e6942992b2f699634878e43e3a80c49f3f9c9e26..b86479a3867df744dd5202cfe55d387b720be662 100644 (file)
@@ -460,7 +460,8 @@ static int sctp_new(struct ip_conntrack *conntrack,
                                                SCTP_CONNTRACK_NONE, sch->type);
 
                /* Invalid: delete conntrack */
-               if (newconntrack == SCTP_CONNTRACK_MAX) {
+               if (newconntrack == SCTP_CONNTRACK_NONE ||
+                   newconntrack == SCTP_CONNTRACK_MAX) {
                        DEBUGP("ip_conntrack_sctp: invalid new deleting.\n");
                        return 0;
                }
index 3c80558716a0b3c9f0773a9b485c38ac63935c8b..b53bc649f156a57fee0b9cf398b637001a04918e 100644 (file)
@@ -469,7 +469,8 @@ static int sctp_new(struct nf_conn *conntrack, const struct sk_buff *skb,
                                         SCTP_CONNTRACK_NONE, sch->type);
 
                /* Invalid: delete conntrack */
-               if (newconntrack == SCTP_CONNTRACK_MAX) {
+               if (newconntrack == SCTP_CONNTRACK_NONE ||
+                   newconntrack == SCTP_CONNTRACK_MAX) {
                        DEBUGP("nf_conntrack_sctp: invalid new deleting.\n");
                        return 0;
                }