Re: [PATCH] netfilter: replace horrible hack with ksize()

From: Patrick McHardy
Date: Thu Mar 06 2008 - 09:04:54 EST


Pekka J Enberg wrote:
From: Pekka Enberg <penberg@xxxxxxxxxxxxxx>

There's a horrible slab abuse in net/netfilter/nf_conntrack_extend.c that can be replaced with a call to ksize().

This doesn't look right.

@@ -95,7 +85,7 @@ void *__nf_ct_ext_add(struct nf_conn *ct
newlen = newoff + t->len;
rcu_read_unlock();
- if (newlen >= ct->ext->real_len) {
+ if (newlen >= ksize(ct->ext)) {


This needs to look at the currently allocated size, otherwise
it will always realloc when adding new extensions after having
used up ksize(ct->ext) space.

new = kmalloc(newlen, gfp);

And this should use ksize(newlen) and store the real length
in real_len below.

if (!new)
return NULL;
@@ -114,7 +104,6 @@ void *__nf_ct_ext_add(struct nf_conn *ct
rcu_read_unlock();
}
kfree(ct->ext);
- new->real_len = newlen;
ct->ext = new;
}

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/