diff options
author | Patrick McHardy <kaber@trash.net> | 2006-06-30 00:40:23 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-06-30 17:12:01 -0400 |
commit | dd7271feba61d5dc0fab1cb5365db9926d35ea3a (patch) | |
tree | 36adf4a907e72b07eb4b37bbd679357fe4c0729f /net | |
parent | 2c6059bca8cf5e7f722d909f2e5edda0491ac604 (diff) |
[NETFILTER]: SCTP conntrack: fix crash triggered by packet without chunks
When a packet without any chunks is received, the newconntrack variable
in sctp_packet contains an out of bounds value that is used to look up an
pointer from the array of timeouts, which is then dereferenced, resulting
in a crash. Make sure at least a single chunk is present.
Problem noticed by George A. Theall <theall@tenablesecurity.com>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv4/netfilter/ip_conntrack_proto_sctp.c | 2 | ||||
-rw-r--r-- | net/netfilter/nf_conntrack_proto_sctp.c | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/net/ipv4/netfilter/ip_conntrack_proto_sctp.c b/net/ipv4/netfilter/ip_conntrack_proto_sctp.c index 0416073c5600..2d3612cd5f18 100644 --- a/net/ipv4/netfilter/ip_conntrack_proto_sctp.c +++ b/net/ipv4/netfilter/ip_conntrack_proto_sctp.c | |||
@@ -254,7 +254,7 @@ static int do_basic_checks(struct ip_conntrack *conntrack, | |||
254 | } | 254 | } |
255 | 255 | ||
256 | DEBUGP("Basic checks passed\n"); | 256 | DEBUGP("Basic checks passed\n"); |
257 | return 0; | 257 | return count == 0; |
258 | } | 258 | } |
259 | 259 | ||
260 | static int new_state(enum ip_conntrack_dir dir, | 260 | static int new_state(enum ip_conntrack_dir dir, |
diff --git a/net/netfilter/nf_conntrack_proto_sctp.c b/net/netfilter/nf_conntrack_proto_sctp.c index 0839b701b930..9bd8a7877fd5 100644 --- a/net/netfilter/nf_conntrack_proto_sctp.c +++ b/net/netfilter/nf_conntrack_proto_sctp.c | |||
@@ -261,7 +261,7 @@ static int do_basic_checks(struct nf_conn *conntrack, | |||
261 | } | 261 | } |
262 | 262 | ||
263 | DEBUGP("Basic checks passed\n"); | 263 | DEBUGP("Basic checks passed\n"); |
264 | return 0; | 264 | return count == 0; |
265 | } | 265 | } |
266 | 266 | ||
267 | static int new_state(enum ip_conntrack_dir dir, | 267 | static int new_state(enum ip_conntrack_dir dir, |