--- linux-2.6.3-old/net/ipv4/netfilter/ip_conntrack_amanda.c 2004-02-18 04:58:39.000000000 +0100 +++ linux-2.6.3/net/ipv4/netfilter/ip_conntrack_amanda.c 2004-02-25 15:32:06.000000000 +0100 @@ -104,18 +104,20 @@ char *match = strstr(data, conns[i]); if (match) { char *portchr; - struct ip_conntrack_expect expect; - struct ip_ct_amanda_expect *exp_amanda_info = - &expect.help.exp_amanda_info; + struct ip_conntrack_expect *expect; + struct ip_ct_amanda_expect *exp_amanda_info; - memset(&expect, 0, sizeof(expect)); + if (ip_conntrack_expect_alloc(&expect) < 0) + return -ENOMEM; + exp_amanda_info = &expect->help.exp_amanda_info; + data += strlen(conns[i]); /* this is not really tcp, but let's steal an * idea from a tcp stream helper :-) */ // XXX expect.seq = data - amanda_buffer; exp_amanda_info->offset = data - amanda_buffer; -// XXX DEBUGP("expect.seq = %p - %p = %d\n", data, amanda_buffer, expect.seq); +// XXX DEBUGP("expect->seq = %p - %p = %d\n", data, amanda_buffer, expect->seq); DEBUGP("exp_amanda_info->offset = %p - %p = %d\n", data, amanda_buffer, exp_amanda_info->offset); portchr = data; exp_amanda_info->port = simple_strtoul(data, &data,10); @@ -129,26 +131,26 @@ "%u found\n", conns[i], exp_amanda_info->port); - expect.tuple = ((struct ip_conntrack_tuple) + expect->tuple = ((struct ip_conntrack_tuple) { { ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.ip, { 0 } }, { ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.ip, { htons(exp_amanda_info->port) }, IPPROTO_TCP }}); - expect.mask = ((struct ip_conntrack_tuple) + expect->mask = ((struct ip_conntrack_tuple) { { 0, { 0 } }, { 0xFFFFFFFF, { 0xFFFF }, 0xFFFF }}); - expect.expectfn = NULL; + expect->expectfn = NULL; DEBUGP ("ip_conntrack_amanda_help: " "expect_related: %u.%u.%u.%u:%u - " "%u.%u.%u.%u:%u\n", - NIPQUAD(expect.tuple.src.ip), - ntohs(expect.tuple.src.u.tcp.port), - NIPQUAD(expect.tuple.dst.ip), - ntohs(expect.tuple.dst.u.tcp.port)); - if (ip_conntrack_expect_related(ct, &expect) + NIPQUAD(expect->tuple.src.ip), + ntohs(expect->tuple.src.u.tcp.port), + NIPQUAD(expect->tuple.dst.ip), + ntohs(expect->tuple.dst.u.tcp.port)); + if (ip_conntrack_expect_related(expect, ct) == -EEXIST) { ; /* this must be a packet being resent */