forked from rubenslte/android_kernel_samsung_msm8226
time: Remove CONFIG_TIMER_STATS
Currently CONFIG_TIMER_STATS exposes process information across namespaces:
kernel/time/timer_list.c print_timer():
SEQ_printf(m, ", %s/%d", tmp, timer->start_pid);
/proc/timer_list:
#11: <0000000000000000>, hrtimer_wakeup, S:01, do_nanosleep, cron/2570
Given that the tracer can give the same information, this patch entirely
removes CONFIG_TIMER_STATS.
Change-Id: I5147c4c1b4319cdabbc6d635b0d63f701b24ac30
Suggested-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Kees Cook <keescook@chromium.org>
Acked-by: John Stultz <john.stultz@linaro.org>
Cc: Nicolas Pitre <nicolas.pitre@linaro.org>
Cc: linux-doc@vger.kernel.org
Cc: Lai Jiangshan <jiangshanlai@gmail.com>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Xing Gao <xgao01@email.wm.edu>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Jessica Frazelle <me@jessfraz.com>
Cc: kernel-hardening@lists.openwall.com
Cc: Nicolas Iooss <nicolas.iooss_linux@m4x.org>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Petr Mladek <pmladek@suse.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Michal Marek <mmarek@suse.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Olof Johansson <olof@lixom.net>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-api@vger.kernel.org
Cc: Arjan van de Ven <arjan@linux.intel.com>
Link: http://lkml.kernel.org/r/20170208192659.GA32582@beast
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
[haggertk]: Backported to 3.4
CVE-2017-5967
Signed-off-by: Kevin F. Haggerty <haggertk@lineageos.org>
This commit is contained in:
committed by
Francescodario Cuzzocrea
parent
b9f99303b1
commit
61123ec9cb
@@ -379,34 +379,6 @@ static void internal_add_timer(struct tvec_base *base, struct timer_list *timer)
|
||||
list_add_tail(&timer->entry, vec);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_TIMER_STATS
|
||||
void __timer_stats_timer_set_start_info(struct timer_list *timer, void *addr)
|
||||
{
|
||||
if (timer->start_site)
|
||||
return;
|
||||
|
||||
timer->start_site = addr;
|
||||
memcpy(timer->start_comm, current->comm, TASK_COMM_LEN);
|
||||
timer->start_pid = current->pid;
|
||||
}
|
||||
|
||||
static void timer_stats_account_timer(struct timer_list *timer)
|
||||
{
|
||||
unsigned int flag = 0;
|
||||
|
||||
if (likely(!timer->start_site))
|
||||
return;
|
||||
if (unlikely(tbase_get_deferrable(timer->base)))
|
||||
flag |= TIMER_STATS_FLAG_DEFERRABLE;
|
||||
|
||||
timer_stats_update_stats(timer, timer->start_pid, timer->start_site,
|
||||
timer->function, timer->start_comm, flag);
|
||||
}
|
||||
|
||||
#else
|
||||
static void timer_stats_account_timer(struct timer_list *timer) {}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DEBUG_OBJECTS_TIMERS
|
||||
|
||||
static struct debug_obj_descr timer_debug_descr;
|
||||
@@ -613,11 +585,6 @@ static void __init_timer(struct timer_list *timer,
|
||||
timer->entry.next = NULL;
|
||||
timer->base = __raw_get_cpu_var(tvec_bases);
|
||||
timer->slack = -1;
|
||||
#ifdef CONFIG_TIMER_STATS
|
||||
timer->start_site = NULL;
|
||||
timer->start_pid = -1;
|
||||
memset(timer->start_comm, 0, TASK_COMM_LEN);
|
||||
#endif
|
||||
lockdep_init_map(&timer->lockdep_map, name, key, 0);
|
||||
}
|
||||
|
||||
@@ -715,7 +682,6 @@ __mod_timer(struct timer_list *timer, unsigned long expires,
|
||||
unsigned long flags;
|
||||
int ret = 0 , cpu;
|
||||
|
||||
timer_stats_timer_set_start_info(timer);
|
||||
BUG_ON(!timer->function);
|
||||
|
||||
base = lock_timer_base(timer, &flags);
|
||||
@@ -923,7 +889,6 @@ void add_timer_on(struct timer_list *timer, int cpu)
|
||||
struct tvec_base *base = per_cpu(tvec_bases, cpu);
|
||||
unsigned long flags;
|
||||
|
||||
timer_stats_timer_set_start_info(timer);
|
||||
BUG_ON(timer_pending(timer) || !timer->function);
|
||||
spin_lock_irqsave(&base->lock, flags);
|
||||
timer_set_base(timer, base);
|
||||
@@ -964,7 +929,6 @@ int del_timer(struct timer_list *timer)
|
||||
|
||||
debug_assert_init(timer);
|
||||
|
||||
timer_stats_timer_clear_start_info(timer);
|
||||
if (timer_pending(timer)) {
|
||||
base = lock_timer_base(timer, &flags);
|
||||
if (timer_pending(timer)) {
|
||||
@@ -1001,7 +965,6 @@ int try_to_del_timer_sync(struct timer_list *timer)
|
||||
if (base->running_timer == timer)
|
||||
goto out;
|
||||
|
||||
timer_stats_timer_clear_start_info(timer);
|
||||
ret = 0;
|
||||
if (timer_pending(timer)) {
|
||||
detach_timer(timer, 1);
|
||||
@@ -1187,8 +1150,6 @@ static inline void __run_timers(struct tvec_base *base)
|
||||
fn = timer->function;
|
||||
data = timer->data;
|
||||
|
||||
timer_stats_account_timer(timer);
|
||||
|
||||
base->running_timer = timer;
|
||||
detach_timer(timer, 1);
|
||||
|
||||
@@ -1803,8 +1764,6 @@ void __init init_timers(void)
|
||||
int err = timer_cpu_notify(&timers_nb, (unsigned long)CPU_UP_PREPARE,
|
||||
(void *)(long)smp_processor_id());
|
||||
|
||||
init_timer_stats();
|
||||
|
||||
BUG_ON(err != NOTIFY_OK);
|
||||
register_cpu_notifier(&timers_nb);
|
||||
open_softirq(TIMER_SOFTIRQ, run_timer_softirq);
|
||||
|
||||
Reference in New Issue
Block a user