Thread (182 messages) flat view 182 messages, 27 authors, 2008-08-01

Re: [regression] nf_iterate(), BUG: unable to handle kernel NULL pointer dereference

From: Pekka Enberg <hidden>
Date: 2008-07-24 13:34:51
Also in: lkml

On Thu, 2008-07-24 at 15:31 +0200, Patrick McHardy wrote:
Pekka Enberg wrote:
quoted
On Thu, 2008-07-24 at 14:49 +0200, Patrick McHardy wrote:
quoted
Pekka Enberg wrote:
quoted
Hmm, why do you think it's related? It looks like elem->hook() is a
NULL pointer but my patch shouldn't make any difference here...
No, its already in ipv4_confirm, so its most likely helper->help()
thats NULL, which is contained in an extension.

The reason why I think its this patch is (quoting from an old
email that I never got a response to):
Oh, I'm really sorry about that.
No problem :)
quoted
quoted
---
Your patch introduced a use-after-free and double-free.
krealloc() frees the old pointer, but it is still used
for the ->move operations, then freed again.

To fix this I think we need a __krealloc() that doesn't
free the old memory, especially since it must not be
freed immediately because it may still be used in a RCU
read side (see the last part in the patch attached to
this mail (based on a kernel without your patch)).
Agreed. Something like this, perhaps?

[PATCH] netfilter: fix double-free and use-after free

As suggested by Patrick McHardy, introduce a __krealloc() that doesn't
free the original buffer to fix a double-free and use-after-free bug
introduced by me in netfilter that uses RCU.

Reported-by: Patrick McHardy <redacted>
Signed-off-by: Pekka Enberg <redacted>
Looks good to me, thanks.
Ingo, can you please test this? Andrew, I'm at OLS so can you pick up
the patch in your tree?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help