|
|
|
|
|
|
|
|
|
|
xen-devel
[Xen-devel] [PATCH] Unaligned access in kexec_crash_save_cpu()
The alignment of info is 32bits in line with the elf specification.
This means that on 64 bit architectures accessing it directly may
result unaligned access and a panic. I have been experiencing
this on IA64.
It seems that a simple approach of having an crash_xen_info_t on
the stack and simply memcopying it into info at the end alleviates
the problem.
Signed-off-by: Simon Horman <horms@xxxxxxxxxxxx>
---
Tested on xen-ia64-unstable 14854:039daabebad5
Index: xen-ia64-unstable-14854/xen/common/kexec.c
===================================================================
--- xen-ia64-unstable-14854.orig/xen/common/kexec.c 2007-04-23
15:55:34.000000000 +0900
+++ xen-ia64-unstable-14854/xen/common/kexec.c 2007-04-23 15:56:14.000000000
+0900
@@ -81,20 +81,25 @@ void kexec_crash_save_cpu(void)
crash_xen_info_t *kexec_crash_save_info(void)
{
int cpu = smp_processor_id();
- crash_xen_info_t *info = (crash_xen_info_t *)ELFNOTE_DESC(xen_crash_note);
+ crash_xen_info_t info;
+ crash_xen_info_t *out = (crash_xen_info_t *)ELFNOTE_DESC(xen_crash_note);
BUG_ON(!cpu_test_and_set(cpu, crash_saved_cpus));
+ memset(&info, 0, sizeof(crash_xen_info_t));
- info->xen_major_version = xen_major_version();
- info->xen_minor_version = xen_minor_version();
- info->xen_extra_version = __pa(xen_extra_version());
- info->xen_changeset = __pa(xen_changeset());
- info->xen_compiler = __pa(xen_compiler());
- info->xen_compile_date = __pa(xen_compile_date());
- info->xen_compile_time = __pa(xen_compile_time());
- info->tainted = tainted;
+ info.xen_major_version = xen_major_version();
+ info.xen_minor_version = xen_minor_version();
+ info.xen_extra_version = __pa(xen_extra_version());
+ info.xen_changeset = __pa(xen_changeset());
+ info.xen_compiler = __pa(xen_compiler());
+ info.xen_compile_date = __pa(xen_compile_date());
+ info.xen_compile_time = __pa(xen_compile_time());
+ info.tainted = tainted;
- return info;
+ /* Info is not be word aligned on 64 bit architectures */
+ memcpy(out, &info, sizeof(crash_xen_info_t));
+
+ return out;
}
void kexec_crash(void)
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-devel] [PATCH] Unaligned access in kexec_crash_save_cpu(),
Simon Horman <=
|
|
|
|
|