lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Mon, 7 Apr 2008 23:54:06 +0200 (CEST) From: Jiri Kosina <jkosina@...e.cz> To: Zdenek Kabelac <zdenek.kabelac@...il.com> cc: Kernel development list <linux-kernel@...r.kernel.org>, Ingo Molnar <mingo@...e.hu>, Thomas Gleixner <tglx@...utronix.de> Subject: Re: BUG: using smp_processor_id() during suspend with 2.6.25-rc8 [ CCs added ] On Mon, 7 Apr 2008, Zdenek Kabelac wrote: > This has appeared in my kernel log: The two patches below should fix these, shouldn't they? > hwsleep-0322 [00] enter_sleep_state : Entering sleep state [S3] > BUG: using smp_processor_id() in preemptible [00000000] code: pm-suspend/18791 > caller is do_machine_check+0xa9/0x500 From: Jiri Kosina <jkosina@...e.cz> x86: fix possible race in do_machine_check() It is not safe to call smp_processor_id() in cases we are not sure someone will not reschedule us. Signed-off-by: Jiri Kosina <jkosina@...e.cz> diff --git a/arch/x86/kernel/cpu/mcheck/mce_64.c b/arch/x86/kernel/cpu/mcheck/mce_64.c index 9a699ed..bf92375 100644 --- a/arch/x86/kernel/cpu/mcheck/mce_64.c +++ b/arch/x86/kernel/cpu/mcheck/mce_64.c @@ -189,6 +189,7 @@ void do_machine_check(struct pt_regs * regs, long error_code) * error. */ int kill_it = 0; + unsigned long flags; atomic_inc(&mce_entry); @@ -199,6 +200,8 @@ void do_machine_check(struct pt_regs * regs, long error_code) goto out2; memset(&m, 0, sizeof(struct mce)); + + local_irq_save(flags); m.cpu = smp_processor_id(); rdmsrl(MSR_IA32_MCG_STATUS, m.mcgstatus); /* if the restart IP is not valid, we're done for */ @@ -315,6 +318,7 @@ void do_machine_check(struct pt_regs * regs, long error_code) wrmsrl(MSR_IA32_MCG_STATUS, 0); out2: atomic_dec(&mce_entry); + local_irq_restore(flags); } #ifdef CONFIG_X86_MCE_INTEL > Extended CMOS year: 2000 > BUG: using smp_processor_id() in preemptible [00000000] code: pm-suspend/18791 > caller is retrigger_next_event+0x1c/0xf0 > Pid: 18791, comm: pm-suspend Not tainted 2.6.25-rc8 #32 From: Jiri Kosina <jkosina@...e.cz> hrtimer: fix possible race in retrigger_next_event() It is not safe to perform per-cpu variable read and use it later in cases we are not sure someone will not reschedule us. Signed-off-by: Jiri Kosina <jkosina@...e.cz> diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index 98bee01..c008096 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c @@ -486,6 +486,7 @@ static void retrigger_next_event(void *arg) struct hrtimer_cpu_base *base; struct timespec realtime_offset; unsigned long seq; + unsigned long flags; if (!hrtimer_hres_active()) return; @@ -497,6 +498,7 @@ static void retrigger_next_event(void *arg) -wall_to_monotonic.tv_nsec); } while (read_seqretry(&xtime_lock, seq)); + local_irq_save(flags); base = &__get_cpu_var(hrtimer_bases); /* Adjust CLOCK_REALTIME offset */ @@ -506,6 +508,7 @@ static void retrigger_next_event(void *arg) hrtimer_force_reprogram(base); spin_unlock(&base->lock); + local_irq_restore(flags); } /* -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists