projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
fed66e2
)
perf: Fix double-free of the AUX buffer
author
Ben Hutchings
<
[email protected]
>
Sun, 26 Jul 2015 23:31:08 +0000
(
00:31
+0100)
committer
Ingo Molnar
<
[email protected]
>
Wed, 12 Aug 2015 09:37:21 +0000
(11:37 +0200)
If rb->aux_refcount is decremented to zero before rb->refcount,
__rb_free_aux() may be called twice resulting in a double free of
rb->aux_pages. Fix this by adding a check to __rb_free_aux().
Signed-off-by: Ben Hutchings <
[email protected]
>
Signed-off-by: Peter Zijlstra (Intel) <
[email protected]
>
Cc: Alexander Shishkin <
[email protected]
>
Cc: Arnaldo Carvalho de Melo <
[email protected]
>
Cc: Linus Torvalds <
[email protected]
>
Cc: Peter Zijlstra <
[email protected]
>
Cc: Thomas Gleixner <
[email protected]
>
Cc:
[email protected]
Fixes: 57ffc5ca679f ("perf: Fix AUX buffer refcounting")
Link:
http://lkml.kernel.org/r/
[email protected]
Signed-off-by: Ingo Molnar <
[email protected]
>
kernel/events/ring_buffer.c
patch
|
blob
|
history
diff --git
a/kernel/events/ring_buffer.c
b/kernel/events/ring_buffer.c
index b2be01b1aa9dcb7a70792fa381c264b229a106d0..c8aa3f75bc4db8ad7a2242aae6406bfd6f86f8c5 100644
(file)
--- a/
kernel/events/ring_buffer.c
+++ b/
kernel/events/ring_buffer.c
@@
-559,11
+559,13
@@
static void __rb_free_aux(struct ring_buffer *rb)
rb->aux_priv = NULL;
}
- for (pg = 0; pg < rb->aux_nr_pages; pg++)
- rb_free_aux_page(rb, pg);
+ if (rb->aux_nr_pages) {
+ for (pg = 0; pg < rb->aux_nr_pages; pg++)
+ rb_free_aux_page(rb, pg);
- kfree(rb->aux_pages);
- rb->aux_nr_pages = 0;
+ kfree(rb->aux_pages);
+ rb->aux_nr_pages = 0;
+ }
}
void rb_free_aux(struct ring_buffer *rb)