]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
[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:23:05 +0000 (14:23 -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 2443322e4128ac3f054fabd442cc80713b71dbc5..ff483785ad4e87c1d5058046b0f082cb7a017872 100644 (file)
@@ -461,7 +461,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 76e263668222c9ea3a0e4591f53ad9333aeb7791..fcc9152742daec1fb5505f6c97e53ff5f05fb57f 100644 (file)
@@ -470,7 +470,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;
                }