diff options
author | Hugh Dickins <hughd@google.com> | 2010-05-14 19:44:10 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-05-26 14:29:18 -0700 |
commit | 7ff4b9ccdac041b6745b9c43ac2cc5639ffc8c1b (patch) | |
tree | 8ec694010cc77e0c74ba9859073d00881a4b57f8 | |
parent | d8ca15afb835aff91c0a1dedb1b4e47171180312 (diff) | |
download | lwn-7ff4b9ccdac041b6745b9c43ac2cc5639ffc8c1b.tar.gz lwn-7ff4b9ccdac041b6745b9c43ac2cc5639ffc8c1b.zip |
profile: fix stats and data leakage
commit 16a2164bb03612efe79a76c73da6da44445b9287 upstream.
If the kernel is large or the profiling step small, /proc/profile
leaks data and readprofile shows silly stats, until readprofile -r
has reset the buffer: clear the prof_buffer when it is vmalloc()ed.
Signed-off-by: Hugh Dickins <hughd@google.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | kernel/profile.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/profile.c b/kernel/profile.c index a55d3a367ae8..dfadc5b729f1 100644 --- a/kernel/profile.c +++ b/kernel/profile.c @@ -127,8 +127,10 @@ int __ref profile_init(void) return 0; prof_buffer = vmalloc(buffer_bytes); - if (prof_buffer) + if (prof_buffer) { + memset(prof_buffer, 0, buffer_bytes); return 0; + } free_cpumask_var(prof_cpu_mask); return -ENOMEM; |