mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
[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 <ian.campbell@xensource.com>
This commit is contained in:
1 parent
8a3405e402
commit
ff0b3cef8d
4 files changed
+21
-21
No files matched your search
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
+12
-12
@@ -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
|
||||
|
||||
+2
-2
@@ -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;
|
||||
|
||||