aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/setup.c
diff options
context:
space:
mode:
Diffstat (limited to 'xen/arch/x86/setup.c')
-rw-r--r--xen/arch/x86/setup.c69
1 files changed, 37 insertions, 32 deletions
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
index 96d49203ca..0e010e2724 100644
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -111,8 +111,7 @@ char acpi_param[10] = "";
static void parse_acpi_param(char *s)
{
/* Save the parameter so it can be propagated to domain0. */
- strncpy(acpi_param, s, sizeof(acpi_param));
- acpi_param[sizeof(acpi_param)-1] = '\0';
+ safe_strcpy(acpi_param, s);
/* Interpret the parameter for use within Xen. */
if ( !strcmp(s, "off") )
@@ -749,22 +748,22 @@ void __init __start_xen(multiboot_info_t *mbi)
if ( (cmdline = strchr(cmdline, ' ')) != NULL )
{
while ( *cmdline == ' ' ) cmdline++;
- strcpy(dom0_cmdline, cmdline);
+ safe_strcpy(dom0_cmdline, cmdline);
}
- cmdline = dom0_cmdline;
-
/* Append any extra parameters. */
- if ( skip_ioapic_setup && !strstr(cmdline, "noapic") )
- strcat(cmdline, " noapic");
+ if ( skip_ioapic_setup && !strstr(dom0_cmdline, "noapic") )
+ safe_strcat(dom0_cmdline, " noapic");
if ( acpi_skip_timer_override &&
- !strstr(cmdline, "acpi_skip_timer_override") )
- strcat(cmdline, " acpi_skip_timer_override");
- if ( (strlen(acpi_param) != 0) && !strstr(cmdline, "acpi=") )
+ !strstr(dom0_cmdline, "acpi_skip_timer_override") )
+ safe_strcat(dom0_cmdline, " acpi_skip_timer_override");
+ if ( (strlen(acpi_param) != 0) && !strstr(dom0_cmdline, "acpi=") )
{
- strcat(cmdline, " acpi=");
- strcat(cmdline, acpi_param);
+ safe_strcat(dom0_cmdline, " acpi=");
+ safe_strcat(dom0_cmdline, acpi_param);
}
+
+ cmdline = dom0_cmdline;
}
if ( (initrdidx > 0) && (initrdidx < mbi->mods_count) )
@@ -801,49 +800,55 @@ 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)
{
- char *p = info;
int major = xen_major_version();
int minor = xen_minor_version();
+ char s[32];
+
+ (*info)[0] = '\0';
#if defined(CONFIG_X86_32) && !defined(CONFIG_X86_PAE)
- p += sprintf(p, "xen-%d.%d-x86_32 ", major, minor);
+ snprintf(s, sizeof(s), "xen-%d.%d-x86_32 ", major, minor);
+ safe_strcat(*info, s);
if ( hvm_enabled )
- p += sprintf(p, "hvm-%d.%d-x86_32 ", major, minor);
+ {
+ snprintf(s, sizeof(s), "hvm-%d.%d-x86_32 ", major, minor);
+ safe_strcat(*info, s);
+ }
#elif defined(CONFIG_X86_32) && defined(CONFIG_X86_PAE)
- p += sprintf(p, "xen-%d.%d-x86_32p ", major, minor);
+ snprintf(s, sizeof(s), "xen-%d.%d-x86_32p ", major, minor);
+ safe_strcat(*info, s);
if ( hvm_enabled )
{
- p += sprintf(p, "hvm-%d.%d-x86_32 ", major, minor);
- p += sprintf(p, "hvm-%d.%d-x86_32p ", major, minor);
+ snprintf(s, sizeof(s), "hvm-%d.%d-x86_32 ", major, minor);
+ safe_strcat(*info, s);
+ snprintf(s, sizeof(s), "hvm-%d.%d-x86_32p ", major, minor);
+ safe_strcat(*info, s);
}
#elif defined(CONFIG_X86_64)
- p += sprintf(p, "xen-%d.%d-x86_64 ", major, minor);
+ snprintf(s, sizeof(s), "xen-%d.%d-x86_64 ", major, minor);
+ safe_strcat(*info, s);
#ifdef CONFIG_COMPAT
- p += sprintf(p, "xen-%d.%d-x86_32p ", major, minor);
+ snprintf(s, sizeof(s), "xen-%d.%d-x86_32p ", major, minor);
+ safe_strcat(*info, s);
#endif
if ( hvm_enabled )
{
- p += sprintf(p, "hvm-%d.%d-x86_32 ", major, minor);
- p += sprintf(p, "hvm-%d.%d-x86_32p ", major, minor);
- p += sprintf(p, "hvm-%d.%d-x86_64 ", major, minor);
+ snprintf(s, sizeof(s), "hvm-%d.%d-x86_32 ", major, minor);
+ safe_strcat(*info, s);
+ snprintf(s, sizeof(s), "hvm-%d.%d-x86_32p ", major, minor);
+ safe_strcat(*info, s);
+ snprintf(s, sizeof(s), "hvm-%d.%d-x86_64 ", major, minor);
+ safe_strcat(*info, s);
}
-#else
-
- p++;
-
#endif
-
- *(p-1) = 0;
-
- BUG_ON((p - info) > sizeof(xen_capabilities_info_t));
}
/*