mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-31 04:01:48 -04:00
x86, ptrace, mm: fix double-free on race
Ptrace_detach() races with __ptrace_unlink() if the traced task is reaped while detaching. This might cause a double-free of the BTS buffer. Change the ptrace_detach() path to only do the memory accounting in ptrace_bts_detach() and leave the buffer free to ptrace_bts_untrace() which will be called from __ptrace_unlink(). The fix follows a proposal from Oleg Nesterov. Reported-by: Oleg Nesterov <[email protected]> Signed-off-by: Markus Metzger <[email protected]> Signed-off-by: Ingo Molnar <[email protected]>
This commit is contained in:
parent
06eb23b1ba
commit
9f339e7028
3 changed files with 17 additions and 7 deletions
|
|
@ -657,7 +657,7 @@ void *alloc_locked_buffer(size_t size)
|
|||
return buffer;
|
||||
}
|
||||
|
||||
void free_locked_buffer(void *buffer, size_t size)
|
||||
void release_locked_buffer(void *buffer, size_t size)
|
||||
{
|
||||
unsigned long pgsz = PAGE_ALIGN(size) >> PAGE_SHIFT;
|
||||
|
||||
|
|
@ -667,6 +667,11 @@ void free_locked_buffer(void *buffer, size_t size)
|
|||
current->mm->locked_vm -= pgsz;
|
||||
|
||||
up_write(¤t->mm->mmap_sem);
|
||||
}
|
||||
|
||||
void free_locked_buffer(void *buffer, size_t size)
|
||||
{
|
||||
release_locked_buffer(buffer, size);
|
||||
|
||||
kfree(buffer);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue