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: Fri, 09 Oct 2009 14:45:45 +0900 From: Hidetoshi Seto <seto.hidetoshi@...fujitsu.com> To: Huang Ying <ying.huang@...el.com> CC: Ingo Molnar <mingo@...e.hu>, "H. Peter Anvin" <hpa@...or.com>, Andi Kleen <ak@...ux.intel.com>, "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org> Subject: [PATCH 3/4] mce-inject: change msr_to_offset() to mce_get_fake_reg() Introduce mce_get_fake_reg() which returns address of variable for faked register. Signed-off-by: Hidetoshi Seto <seto.hidetoshi@...fujitsu.com> --- arch/x86/kernel/cpu/mcheck/mce.c | 30 +++++++++++++++--------------- 1 files changed, 15 insertions(+), 15 deletions(-) diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index 5a6f17d..edd2a82 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c @@ -301,20 +301,22 @@ static void mce_panic(char *msg, struct mce *final, char *exp) /* Support code for software error injection */ -static int msr_to_offset(u32 msr) +static u64 *mce_get_fake_reg(u32 msr) { unsigned bank = __get_cpu_var(mce_fake_banks).bank; + if (msr == rip_msr) - return offsetof(struct mce_fake_banks, ip); + return &__get_cpu_var(mce_fake_banks).ip; if (msr == MSR_IA32_MCx_STATUS(bank)) - return offsetof(struct mce_fake_banks, status); + return &__get_cpu_var(mce_fake_banks).status; if (msr == MSR_IA32_MCx_ADDR(bank)) - return offsetof(struct mce_fake_banks, addr); + return &__get_cpu_var(mce_fake_banks).addr; if (msr == MSR_IA32_MCx_MISC(bank)) - return offsetof(struct mce_fake_banks, misc); + return &__get_cpu_var(mce_fake_banks).misc; if (msr == MSR_IA32_MCG_STATUS) - return offsetof(struct mce_fake_banks, mcgstatus); - return -1; + return &__get_cpu_var(mce_fake_banks).mcgstatus; + + return NULL; } /* MSR access wrappers used for error injection */ @@ -323,12 +325,11 @@ static u64 mce_rdmsrl(u32 msr) u64 v; if (__get_cpu_var(mce_fake_banks).valid) { - int offset = msr_to_offset(msr); - char *m = (char *)&__get_cpu_var(mce_fake_banks); + u64 *reg = mce_get_fake_reg(msr); - if (offset < 0) + if (!reg) return 0; - return *(u64 *)(m + offset); + return *reg; } if (rdmsrl_safe(msr, &v)) { @@ -347,11 +348,10 @@ static u64 mce_rdmsrl(u32 msr) static void mce_wrmsrl(u32 msr, u64 v) { if (__get_cpu_var(mce_fake_banks).valid) { - int offset = msr_to_offset(msr); - char *m = (char *)&__get_cpu_var(mce_fake_banks); + u64 *reg = mce_get_fake_reg(msr); - if (offset >= 0) - *(u64 *)(m + offset) = v; + if (reg) + *reg = v; return; } wrmsrl(msr, v); -- 1.6.2.2 -- 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