lkml.org 
[lkml]   [2004]   [Nov]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [BK PATCH] Fix ip_conntrack_amanda data corruption bug that breaks amanda dumps
Patrick McHardy wrote:

> Matthias Andree wrote:
>
>> On Thu, 04 Nov 2004, Patrick McHardy wrote:
>>
>>> The data that is changed is only a copy, the actual packet is not
>>> touched.
>>>
>>
>>
>> Why then does the application not see the packets as long as
>> ip_conntrack_amanda is loaded and starts seeing them again as soon as
>> "rmmod ip_conntrack_amanda" has completed?
>>
>>
>
> Your observation and your patch were correct, thanks. It is supposed
> to be just a copy, I missed that it wasn't anymore. While your patch
> works too, and is even faster with non-linear skbs, I don't like the
> idea of using the skb as a scratch-area, so I sent this patch to Dave
> instead.


Patrick, what about this? this way we save a copy to a buffer for linear
skbs.

Signed-off-by: Pablo Neira Ayuso <pablo@eurodev.net>
===== net/ipv4/netfilter/ip_conntrack_amanda.c 1.10 vs edited =====
--- 1.10/net/ipv4/netfilter/ip_conntrack_amanda.c 2004-08-19 02:14:53 +02:00
+++ edited/net/ipv4/netfilter/ip_conntrack_amanda.c 2004-11-05 17:32:04 +01:00
@@ -49,9 +49,10 @@
{
struct ip_conntrack_expect *exp;
struct ip_ct_amanda_expect *exp_amanda_info;
- char *amp, *data, *data_limit, *tmp;
+ char *amp, *data, *tmp;
unsigned int dataoff, i;
u_int16_t port, len;
+ int found = 0;

/* Only look at packets from the Amanda server */
if (CTINFO2DIR(ctinfo) == IP_CT_DIR_ORIGINAL)
@@ -74,12 +75,17 @@
skb->len - dataoff, amanda_buffer);
BUG_ON(amp == NULL);
data = amp;
- data_limit = amp + skb->len - dataoff;
- *data_limit = '\0';

/* Search for the CONNECT string */
- data = strstr(data, "CONNECT ");
- if (!data)
+ while((data = memchr(data, 'C', skb->len - dataoff)) != NULL) {
+ if (strncmp(data, "CONNECT ", 8) == 0) {
+ found = 1;
+ break;
+ }
+ data++;
+ }
+
+ if (!found)
goto out;
data += strlen("CONNECT ");
\
 
 \ /
  Last update: 2005-03-22 14:07    [from the cache]
©2003-2011 Jasper Spaans