WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] Remove uses of strcpy and strncpy from co

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Remove uses of strcpy and strncpy from common and x86 code.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 30 Jan 2007 06:00:07 -0800
Delivery-date: Tue, 30 Jan 2007 05:59:54 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Date 1170082782 0
# Node ID bef7fbe25a9f380d40623795befacd447b026837
# Parent  5bb0840984936749b4e99f53931d72a8579d302c
Remove uses of strcpy and strncpy from common and x86 code.

Retain safe_strcpy(). It can hide the third argument to strlcpy() in
most cases.

Based on patches from Christoph Egger <Christoph.Egger@xxxxxxx>
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 xen/acm/acm_core.c                 |   12 ++++++++----
 xen/arch/x86/cpu/common.c          |    6 +++---
 xen/arch/x86/cpu/cyrix.c           |    7 +++----
 xen/arch/x86/cpu/intel.c           |    2 +-
 xen/arch/x86/dmi_scan.c            |    2 +-
 xen/arch/x86/domain_build.c        |    2 +-
 xen/arch/x86/hvm/intercept.c       |    6 +++---
 xen/arch/x86/setup.c               |    4 ++--
 xen/common/kexec.c                 |    2 +-
 xen/common/keyhandler.c            |    5 ++---
 xen/common/libelf/libelf-dominfo.c |   16 ++++++++--------
 xen/common/libelf/libelf-private.h |   13 ++++---------
 xen/common/perfc.c                 |    3 +--
 xen/common/rangeset.c              |    2 +-
 xen/drivers/char/console.c         |    4 ++--
 xen/include/xen/string.h           |    5 +----
 16 files changed, 42 insertions(+), 49 deletions(-)

diff -r 5bb084098493 -r bef7fbe25a9f xen/acm/acm_core.c
--- a/xen/acm/acm_core.c        Mon Jan 29 13:22:21 2007 +0000
+++ b/xen/acm/acm_core.c        Mon Jan 29 14:59:42 2007 +0000
@@ -89,8 +89,11 @@ acm_set_policy_reference(u8 * buf, u32 b
     if (!acm_bin_pol.policy_reference_name)
         return -ENOMEM;
 
-    strcpy(acm_bin_pol.policy_reference_name, (char *)(buf + sizeof(struct 
acm_policy_reference_buffer)));
-    printk("%s: Activating policy %s\n", __func__, 
acm_bin_pol.policy_reference_name);
+    strlcpy(acm_bin_pol.policy_reference_name,
+            (char *)(buf + sizeof(struct acm_policy_reference_buffer)),
+            ntohl(pr->len));
+    printk("%s: Activating policy %s\n", __func__,
+           acm_bin_pol.policy_reference_name);
     return 0;
 }
 
@@ -106,8 +109,9 @@ acm_dump_policy_reference(u8 *buf, u32 b
 
     memset(buf, 0, ret);
     pr_buf->len = htonl(strlen(acm_bin_pol.policy_reference_name) + 1); /* 
including stringend '\0' */
-    strcpy((char *)(buf + sizeof(struct acm_policy_reference_buffer)),
-           acm_bin_pol.policy_reference_name);
+    strlcpy((char *)(buf + sizeof(struct acm_policy_reference_buffer)),
+            acm_bin_pol.policy_reference_name,
+            ntohl(pr_buf->len));
     return ret;
 }
 
diff -r 5bb084098493 -r bef7fbe25a9f xen/arch/x86/cpu/common.c
--- a/xen/arch/x86/cpu/common.c Mon Jan 29 13:22:21 2007 +0000
+++ b/xen/arch/x86/cpu/common.c Mon Jan 29 14:59:42 2007 +0000
@@ -30,9 +30,9 @@ static void default_init(struct cpuinfo_
        if (c->cpuid_level == -1) {
                /* No cpuid. It must be an ancient CPU */
                if (c->x86 == 4)
-                       strcpy(c->x86_model_id, "486");
+                       safe_strcpy(c->x86_model_id, "486");
                else if (c->x86 == 3)
-                       strcpy(c->x86_model_id, "386");
+                       safe_strcpy(c->x86_model_id, "386");
        }
 }
 
@@ -383,7 +383,7 @@ void __devinit identify_cpu(struct cpuin
                char *p;
                p = table_lookup_model(c);
                if ( p )
-                       strcpy(c->x86_model_id, p);
+                       safe_strcpy(c->x86_model_id, p);
                else
                        /* Last resort... */
                        snprintf(c->x86_model_id, sizeof(c->x86_model_id),
diff -r 5bb084098493 -r bef7fbe25a9f xen/arch/x86/cpu/cyrix.c
--- a/xen/arch/x86/cpu/cyrix.c  Mon Jan 29 13:22:21 2007 +0000
+++ b/xen/arch/x86/cpu/cyrix.c  Mon Jan 29 14:59:42 2007 +0000
@@ -181,7 +181,6 @@ static void __init init_cyrix(struct cpu
 static void __init init_cyrix(struct cpuinfo_x86 *c)
 {
        unsigned char dir0, dir0_msn, dir0_lsn, dir1 = 0;
-       char *buf = c->x86_model_id;
        const char *p = NULL;
 
        /* Bit 31 in normal CPUID used for nonstandard 3DNow ID;
@@ -302,8 +301,8 @@ static void __init init_cyrix(struct cpu
                dir0_msn = 7;
                break;
        }
-       strcpy(buf, Cx86_model[dir0_msn & 7]);
-       if (p) strcat(buf, p);
+       safe_strcpy(c->x86_model_id, Cx86_model[dir0_msn & 7]);
+       if (p) strcat(c->x86_model_id, p);
        return;
 }
 
@@ -339,7 +338,7 @@ static void cyrix_identify(struct cpuinf
        if ( c->x86 == 4 && test_cyrix_52div() ) {
                unsigned char dir0, dir1;
                
-               strcpy(c->x86_vendor_id, "CyrixInstead");
+               safe_strcpy(c->x86_vendor_id, "CyrixInstead");
                c->x86_vendor = X86_VENDOR_CYRIX;
                
                /* Actually enable cpuid on the older cyrix */
diff -r 5bb084098493 -r bef7fbe25a9f xen/arch/x86/cpu/intel.c
--- a/xen/arch/x86/cpu/intel.c  Mon Jan 29 13:22:21 2007 +0000
+++ b/xen/arch/x86/cpu/intel.c  Mon Jan 29 14:59:42 2007 +0000
@@ -152,7 +152,7 @@ static void __devinit init_intel(struct 
        }
 
        if ( p )
-               strcpy(c->x86_model_id, p);
+               safe_strcpy(c->x86_model_id, p);
        
        c->x86_max_cores = num_cpu_cores(c);
 
diff -r 5bb084098493 -r bef7fbe25a9f xen/arch/x86/dmi_scan.c
--- a/xen/arch/x86/dmi_scan.c   Mon Jan 29 13:22:21 2007 +0000
+++ b/xen/arch/x86/dmi_scan.c   Mon Jan 29 14:59:42 2007 +0000
@@ -159,7 +159,7 @@ static void __init dmi_save_ident(struct
                return;
        dmi_ident[slot] = alloc_bootmem(strlen(p)+1);
        if(dmi_ident[slot])
-               strcpy(dmi_ident[slot], p);
+               safe_strcpy(dmi_ident[slot], p);
        else
                printk(KERN_ERR "dmi_save_ident: out of memory.\n");
 }
diff -r 5bb084098493 -r bef7fbe25a9f xen/arch/x86/domain_build.c
--- a/xen/arch/x86/domain_build.c       Mon Jan 29 13:22:21 2007 +0000
+++ b/xen/arch/x86/domain_build.c       Mon Jan 29 14:59:42 2007 +0000
@@ -871,7 +871,7 @@ int construct_dom0(struct domain *d,
 
     memset(si->cmd_line, 0, sizeof(si->cmd_line));
     if ( cmdline != NULL )
-        strlcpy((char *)si->cmd_line, cmdline, sizeof(si->cmd_line));
+        safe_strcpy(si->cmd_line, cmdline);
 
     if ( fill_console_start_info((void *)(si + 1)) )
     {
diff -r 5bb084098493 -r bef7fbe25a9f xen/arch/x86/hvm/intercept.c
--- a/xen/arch/x86/hvm/intercept.c      Mon Jan 29 13:22:21 2007 +0000
+++ b/xen/arch/x86/hvm/intercept.c      Mon Jan 29 14:59:42 2007 +0000
@@ -173,7 +173,7 @@ int hvm_register_savevm(struct domain *d
         return -1;
     }
 
-    strlcpy(se->idstr, idstr, HVM_SE_IDSTR_LEN);
+    safe_strcpy(se->idstr, idstr);
 
     se->instance_id = instance_id;
     se->version_id = version_id;
@@ -224,7 +224,7 @@ int hvm_save(struct vcpu *v, hvm_domain_
 
     for(se = v->domain->arch.hvm_domain.first_se; se != NULL; se = se->next) {
         /* ID string */
-        len = strnlen(se->idstr, HVM_SE_IDSTR_LEN);
+        len = strnlen(se->idstr, sizeof(se->idstr));
         hvm_put_8u(h, len);
         hvm_put_buffer(h, se->idstr, len);
 
@@ -262,7 +262,7 @@ static HVMStateEntry *find_se(struct dom
     HVMStateEntry *se;
 
     for(se = d->arch.hvm_domain.first_se; se != NULL; se = se->next) {
-        if (!strncmp(se->idstr, idstr, HVM_SE_IDSTR_LEN) &&
+        if (!strncmp(se->idstr, idstr, sizeof(se->idstr)) &&
             instance_id == se->instance_id){
             return se;
         }
diff -r 5bb084098493 -r bef7fbe25a9f xen/arch/x86/setup.c
--- a/xen/arch/x86/setup.c      Mon Jan 29 13:22:21 2007 +0000
+++ b/xen/arch/x86/setup.c      Mon Jan 29 14:59:42 2007 +0000
@@ -111,7 +111,7 @@ static void parse_acpi_param(char *s)
 static void parse_acpi_param(char *s)
 {
     /* Save the parameter so it can be propagated to domain0. */
-    strlcpy(acpi_param, s, sizeof(acpi_param));
+    safe_strcpy(acpi_param, s);
 
     /* Interpret the parameter for use within Xen. */
     if ( !strcmp(s, "off") )
@@ -748,7 +748,7 @@ void __init __start_xen(multiboot_info_t
         if ( (cmdline = strchr(cmdline, ' ')) != NULL )
         {
             while ( *cmdline == ' ' ) cmdline++;
-            strcpy(dom0_cmdline, cmdline);
+            safe_strcpy(dom0_cmdline, cmdline);
         }
 
         cmdline = dom0_cmdline;
diff -r 5bb084098493 -r bef7fbe25a9f xen/common/kexec.c
--- a/xen/common/kexec.c        Mon Jan 29 13:22:21 2007 +0000
+++ b/xen/common/kexec.c        Mon Jan 29 14:59:42 2007 +0000
@@ -131,7 +131,7 @@ __initcall(register_crashdump_trigger);
 
 static void setup_note(Elf_Note *n, const char *name, int type, int descsz)
 {
-    strcpy(ELFNOTE_NAME(n), name);
+    safe_strcpy(ELFNOTE_NAME(n), name);
     n->namesz = strlen(name);
     n->descsz = descsz;
     n->type = type;
diff -r 5bb084098493 -r bef7fbe25a9f xen/common/keyhandler.c
--- a/xen/common/keyhandler.c   Mon Jan 29 13:22:21 2007 +0000
+++ b/xen/common/keyhandler.c   Mon Jan 29 14:59:42 2007 +0000
@@ -67,8 +67,7 @@ void register_keyhandler(
     ASSERT(key_table[key].u.handler == NULL);
     key_table[key].u.handler = handler;
     key_table[key].flags     = 0;
-    strlcpy(key_table[key].desc, desc, STR_MAX);
-    key_table[key].desc[STR_MAX-1] = '\0';
+    safe_strcpy(key_table[key].desc, desc);
 }
 
 void register_irq_keyhandler(
@@ -77,7 +76,7 @@ void register_irq_keyhandler(
     ASSERT(key_table[key].u.irq_handler == NULL);
     key_table[key].u.irq_handler = handler;
     key_table[key].flags         = KEYHANDLER_IRQ_CALLBACK;
-    strlcpy(key_table[key].desc, desc, STR_MAX);
+    safe_strcpy(key_table[key].desc, desc);
 }
 
 static void show_handlers(unsigned char key)
diff -r 5bb084098493 -r bef7fbe25a9f xen/common/libelf/libelf-dominfo.c
--- a/xen/common/libelf/libelf-dominfo.c        Mon Jan 29 13:22:21 2007 +0000
+++ b/xen/common/libelf/libelf-dominfo.c        Mon Jan 29 14:59:42 2007 +0000
@@ -128,16 +128,16 @@ int elf_xen_parse_note(struct elf_binary
     switch (type)
     {
     case XEN_ELFNOTE_LOADER:
-       elf_strlcpy(parms->loader, str, sizeof(parms->loader));
+       safe_strcpy(parms->loader, str);
        break;
     case XEN_ELFNOTE_GUEST_OS:
-       elf_strlcpy(parms->guest_os, str, sizeof(parms->guest_os));
+       safe_strcpy(parms->guest_os, str);
        break;
     case XEN_ELFNOTE_GUEST_VERSION:
-       elf_strlcpy(parms->guest_ver, str, sizeof(parms->guest_ver));
+       safe_strcpy(parms->guest_ver, str);
        break;
     case XEN_ELFNOTE_XEN_VERSION:
-       elf_strlcpy(parms->xen_ver, str, sizeof(parms->xen_ver));
+       safe_strcpy(parms->xen_ver, str);
        break;
     case XEN_ELFNOTE_PAE_MODE:
        if (0 == strcmp(str, "yes"))
@@ -224,13 +224,13 @@ int elf_xen_parse_guest_info(struct elf_
 
        /* strings */
        if (0 == strcmp(name, "LOADER"))
-           elf_strlcpy(parms->loader, value, sizeof(parms->loader));
+           safe_strcpy(parms->loader, value);
        if (0 == strcmp(name, "GUEST_OS"))
-           elf_strlcpy(parms->guest_os, value, sizeof(parms->guest_os));
+           safe_strcpy(parms->guest_os, value);
        if (0 == strcmp(name, "GUEST_VER"))
-           elf_strlcpy(parms->guest_ver, value, sizeof(parms->guest_ver));
+           safe_strcpy(parms->guest_ver, value);
        if (0 == strcmp(name, "XEN_VER"))
-           elf_strlcpy(parms->xen_ver, value, sizeof(parms->xen_ver));
+           safe_strcpy(parms->xen_ver, value);
        if (0 == strcmp(name, "PAE"))
        {
            if (0 == strcmp(value, "yes[extended-cr3]"))
diff -r 5bb084098493 -r bef7fbe25a9f xen/common/libelf/libelf-private.h
--- a/xen/common/libelf/libelf-private.h        Mon Jan 29 13:22:21 2007 +0000
+++ b/xen/common/libelf/libelf-private.h        Mon Jan 29 14:59:42 2007 +0000
@@ -20,8 +20,6 @@
 #define bswap_16(x) swab16(x)
 #define bswap_32(x) swab32(x)
 #define bswap_64(x) swab64(x)
-
-#define elf_strlcpy(d,s,c) strlcpy(d,s,c)
 
 #else /* !__XEN__ */
 
@@ -52,13 +50,10 @@
         xc_set_error(XC_INVALID_KERNEL, fmt , ## args );  \
        } while (0)
 
-/* SysV unices have no strlcpy/strlcat. */
-static inline size_t elf_strlcpy(char *dest, const char *src, size_t size)
-{
-    strncpy(dest, src, size-1);
-    dest[size-1] = '\0';
-    return strlen(src);
-}
+#define safe_strcpy(d,s)                        \
+do { strncpy((d),(s),sizeof((d))-1);            \
+     (d)[sizeof((d))-1] = '\0';                 \
+} while (0)
 
 #endif
 
diff -r 5bb084098493 -r bef7fbe25a9f xen/common/perfc.c
--- a/xen/common/perfc.c        Mon Jan 29 13:22:21 2007 +0000
+++ b/xen/common/perfc.c        Mon Jan 29 14:59:42 2007 +0000
@@ -148,8 +148,7 @@ static int perfc_copy_info(XEN_GUEST_HAN
     {
         for ( i = 0; i < NR_PERFCTRS; i++ )
         {
-            strlcpy(perfc_d[i].name, perfc_info[i].name,
-                    sizeof(perfc_d[i].name));
+            safe_strcpy(perfc_d[i].name, perfc_info[i].name);
 
             switch ( perfc_info[i].type )
             {
diff -r 5bb084098493 -r bef7fbe25a9f xen/common/rangeset.c
--- a/xen/common/rangeset.c     Mon Jan 29 13:22:21 2007 +0000
+++ b/xen/common/rangeset.c     Mon Jan 29 14:59:42 2007 +0000
@@ -283,7 +283,7 @@ struct rangeset *rangeset_new(
 
     if ( name != NULL )
     {
-        strlcpy(r->name, name, sizeof(r->name));
+        safe_strcpy(r->name, name);
     }
     else
     {
diff -r 5bb084098493 -r bef7fbe25a9f xen/drivers/char/console.c
--- a/xen/drivers/char/console.c        Mon Jan 29 13:22:21 2007 +0000
+++ b/xen/drivers/char/console.c        Mon Jan 29 14:59:42 2007 +0000
@@ -481,7 +481,7 @@ void printk(const char *fmt, ...)
 
 void set_printk_prefix(const char *prefix)
 {
-    strcpy(printk_prefix, prefix);
+    safe_strcpy(printk_prefix, prefix);
 }
 
 void init_console(void)
@@ -771,7 +771,7 @@ void debugtrace_printk(const char *fmt, 
 
     ASSERT(debugtrace_buf[debugtrace_bytes - 1] == 0);
 
-    sprintf(buf, "%u ", ++count);
+    snprintf(buf, sizeof(buf), "%u ", ++count);
 
     va_start(args, fmt);
     (void)vsnprintf(buf + strlen(buf), sizeof(buf), fmt, args);
diff -r 5bb084098493 -r bef7fbe25a9f xen/include/xen/string.h
--- a/xen/include/xen/string.h  Mon Jan 29 13:22:21 2007 +0000
+++ b/xen/include/xen/string.h  Mon Jan 29 14:59:42 2007 +0000
@@ -82,9 +82,6 @@ extern void * memchr(const void *,int,__
 }
 #endif
 
-#define safe_strcpy(d,s)                        \
-do { strncpy((d),(s),sizeof((d)));              \
-     (d)[sizeof((d))-1] = '\0';                 \
-} while (0)
+#define safe_strcpy(d, s) strlcpy(d, s, sizeof(d))
 
 #endif /* _LINUX_STRING_H_ */

_______________________________________________
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] Remove uses of strcpy and strncpy from common and x86 code., Xen patchbot-unstable <=