From: Ian Campbell Date: Wed, 31 Jan 2007 10:11:26 +0000 (+0000) Subject: [XEN] Fix XENVER_capabilities hypercall. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15368^2~6 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=ff0b3cef8ddd22fa2cce178c2bc894a966f8a0bb;p=xen.git [XEN] Fix XENVER_capabilities hypercall. Passing an array to a function turns it into a pointer which confuses safe_strcat. Also fix 54->64 typo in ia64 tree. Thanks to Alex Williamson for pointing out the problem. Signed-off-by: Ian Campbell --- diff --git a/xen/arch/ia64/xen/xensetup.c b/xen/arch/ia64/xen/xensetup.c index 2496683a5e..5e8ed8261b 100644 --- a/xen/arch/ia64/xen/xensetup.c +++ b/xen/arch/ia64/xen/xensetup.c @@ -545,21 +545,21 @@ printk("num_online_cpus=%d, max_cpus=%d\n",num_online_cpus(),max_cpus); startup_cpu_idle_loop(); } -void arch_get_xen_caps(xen_capabilities_info_t info) +void arch_get_xen_caps(xen_capabilities_info_t *info) { int major = xen_major_version(); int minor = xen_minor_version(); char s[32]; - info[0] = '\0'; + (*info)[0] = '\0'; - snprintf(s, sizeof(s), "xen-%d.%d-ia54 ", major, minor); - safe_strcat(info, s); + snprintf(s, sizeof(s), "xen-%d.%d-ia64 ", major, minor); + safe_strcat(*info, s); if (vmx_enabled) { snprintf(s, sizeof(s), "hvm-%d.%d-ia64 ", major, minor); - safe_strcat(info, s); + safe_strcat(*info, s); } } diff --git a/xen/arch/powerpc/setup.c b/xen/arch/powerpc/setup.c index 440acbbb1e..ad4ea33fe2 100644 --- a/xen/arch/powerpc/setup.c +++ b/xen/arch/powerpc/setup.c @@ -444,8 +444,8 @@ void __init __start_xen_ppc( } -extern void arch_get_xen_caps(xen_capabilities_info_t info); -void arch_get_xen_caps(xen_capabilities_info_t info) +extern void arch_get_xen_caps(xen_capabilities_info_t *info); +void arch_get_xen_caps(xen_capabilities_info_t *info) { } diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index 9e67c009ca..0e010e2724 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -800,52 +800,52 @@ void __init __start_xen(multiboot_info_t *mbi) startup_cpu_idle_loop(); } -void arch_get_xen_caps(xen_capabilities_info_t info) +void arch_get_xen_caps(xen_capabilities_info_t *info) { int major = xen_major_version(); int minor = xen_minor_version(); char s[32]; - info[0] = '\0'; + (*info)[0] = '\0'; #if defined(CONFIG_X86_32) && !defined(CONFIG_X86_PAE) snprintf(s, sizeof(s), "xen-%d.%d-x86_32 ", major, minor); - safe_strcat(info, s); + safe_strcat(*info, s); if ( hvm_enabled ) { snprintf(s, sizeof(s), "hvm-%d.%d-x86_32 ", major, minor); - safe_strcat(info, s); + safe_strcat(*info, s); } #elif defined(CONFIG_X86_32) && defined(CONFIG_X86_PAE) snprintf(s, sizeof(s), "xen-%d.%d-x86_32p ", major, minor); - safe_strcat(info, s); + safe_strcat(*info, s); if ( hvm_enabled ) { snprintf(s, sizeof(s), "hvm-%d.%d-x86_32 ", major, minor); - safe_strcat(info, s); + safe_strcat(*info, s); snprintf(s, sizeof(s), "hvm-%d.%d-x86_32p ", major, minor); - safe_strcat(info, s); + safe_strcat(*info, s); } #elif defined(CONFIG_X86_64) snprintf(s, sizeof(s), "xen-%d.%d-x86_64 ", major, minor); - safe_strcat(info, s); + safe_strcat(*info, s); #ifdef CONFIG_COMPAT snprintf(s, sizeof(s), "xen-%d.%d-x86_32p ", major, minor); - safe_strcat(info, s); + safe_strcat(*info, s); #endif if ( hvm_enabled ) { snprintf(s, sizeof(s), "hvm-%d.%d-x86_32 ", major, minor); - safe_strcat(info, s); + safe_strcat(*info, s); snprintf(s, sizeof(s), "hvm-%d.%d-x86_32p ", major, minor); - safe_strcat(info, s); + safe_strcat(*info, s); snprintf(s, sizeof(s), "hvm-%d.%d-x86_64 ", major, minor); - safe_strcat(info, s); + safe_strcat(*info, s); } #endif diff --git a/xen/common/kernel.c b/xen/common/kernel.c index 4c22cf8803..fa448b07a3 100644 --- a/xen/common/kernel.c +++ b/xen/common/kernel.c @@ -162,10 +162,10 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDLE(void) arg) case XENVER_capabilities: { xen_capabilities_info_t info; - extern void arch_get_xen_caps(xen_capabilities_info_t info); + extern void arch_get_xen_caps(xen_capabilities_info_t *info); memset(info, 0, sizeof(info)); - arch_get_xen_caps(info); + arch_get_xen_caps(&info); if ( copy_to_guest(arg, (char *)info, sizeof(info)) ) return -EFAULT;