|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-unstable] [IA64] Fix incorrect NVRAM saving if doma
# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1183388724 21600
# Node ID 38d0618868738b03611bdbb9f3fe29c73f1c34dd
# Parent 89596982890b78ebceffc4c5803662adc3dddc73
[IA64] Fix incorrect NVRAM saving if domain is destroyed by config error
Nvram saving is always executed even if a domain is destroyed by a
configuration parameter error. In this case, Nvram saving function
will get a bad address for the NVRAM data and save garbage into the
NVRAM file. Configuring a wrong vif parameter can expose this issue.
This patch fixes the issue by adding an address check function in
NVRAM saving path.
Signed-off-by: Zhang Xin <xing.z.zhang@xxxxxxxxx>
---
tools/libxc/ia64/xc_ia64_hvm_build.c | 21 ++++++++++++++++++++-
xen/include/public/arch-ia64.h | 6 ++++++
2 files changed, 26 insertions(+), 1 deletion(-)
diff -r 89596982890b -r 38d061886873 tools/libxc/ia64/xc_ia64_hvm_build.c
--- a/tools/libxc/ia64/xc_ia64_hvm_build.c Mon Jul 02 08:51:59 2007 -0600
+++ b/tools/libxc/ia64/xc_ia64_hvm_build.c Mon Jul 02 09:05:24 2007 -0600
@@ -623,6 +623,21 @@ copy_from_nvram_to_GFW(int xc_handle, ui
/*
+ *Check is the address where NVRAM data located valid
+ */
+static int is_valid_address(void *addr)
+{
+ struct nvram_save_addr *p = (struct nvram_save_addr *)addr;
+
+ if ( p->signature == NVRAM_VALID_SIG )
+ return 1;
+ else {
+ PERROR("Invalid nvram signature. Nvram save failed!\n");
+ return 0;
+ }
+}
+
+/*
* GFW use 4k page. when doing foreign map, we should 16k align
* the address and map one more page to guarantee all 64k nvram data
* can be got.
@@ -667,7 +682,11 @@ copy_from_GFW_to_nvram(int xc_handle, ui
return -1;
}
- addr_from_GFW_4k_align = *((uint64_t *)tmp_ptr);
+ /* Check is NVRAM data vaild */
+ if ( !is_valid_address(tmp_ptr) )
+ return -1;
+
+ addr_from_GFW_4k_align = ((struct nvram_save_addr *)tmp_ptr)->addr;
munmap(tmp_ptr, PAGE_SIZE);
// align address to 16k
diff -r 89596982890b -r 38d061886873 xen/include/public/arch-ia64.h
--- a/xen/include/public/arch-ia64.h Mon Jul 02 08:51:59 2007 -0600
+++ b/xen/include/public/arch-ia64.h Mon Jul 02 09:05:24 2007 -0600
@@ -116,6 +116,12 @@ typedef unsigned long xen_ulong_t;
/* Nvram belongs to GFW memory space */
#define NVRAM_SIZE (MEM_K * 64)
#define NVRAM_START (GFW_START + 10 * MEM_M)
+
+#define NVRAM_VALID_SIG 0x4650494e45584948 // "HIXENIPF"
+struct nvram_save_addr {
+ unsigned long addr;
+ unsigned long signature;
+};
struct pt_fpreg {
union {
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] [xen-unstable] [IA64] Fix incorrect NVRAM saving if domain is destroyed by config error,
Xen patchbot-unstable <=
|
|
|
|
|