[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH] Convert hvmloader sprintf() into snprintf()



# HG changeset patch
# User Paul Durrant <paul.durrant@xxxxxxxxxx>
# Date 1322574114 0
# Node ID e1e952982cf1d7a0c38a7822a8b5e78ba04b5ba5
# Parent  225da1242ba979ddc8c48767d3822e0c8d274ae1
Convert hvmloader sprintf() into snprintf().

Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>

diff -r 225da1242ba9 -r e1e952982cf1 tools/firmware/hvmloader/acpi/build.c
--- a/tools/firmware/hvmloader/acpi/build.c     Tue Nov 29 10:48:54 2011 +0000
+++ b/tools/firmware/hvmloader/acpi/build.c     Tue Nov 29 13:41:54 2011 +0000
@@ -306,7 +306,8 @@ unsigned long new_vm_gid(void)
     buf = mem_alloc(8, 8);
     if (!buf) return 0;
 
-    sprintf(addr, "0x%lx", virt_to_phys(buf));
+    if (snprintf(addr, 11, "0x%lx", virt_to_phys(buf)) >= 11) return 0;
+
     xenstore_write("data/generation-id", addr);
 
     gid = strtoll(xenstore_read("platform/generation-id", "0"), NULL, 0);
diff -r 225da1242ba9 -r e1e952982cf1 tools/firmware/hvmloader/util.c
--- a/tools/firmware/hvmloader/util.c   Tue Nov 29 10:48:54 2011 +0000
+++ b/tools/firmware/hvmloader/util.c   Tue Nov 29 13:41:54 2011 +0000
@@ -528,7 +528,7 @@ static char *printnum(char *p, unsigned 
     return p;
 }
 
-static void _doprint(void (*emit)(char**, char), char **arg, const char *fmt, 
va_list ap)
+static void _doprint(void (*emit)(void *, char), void *arg, const char *fmt, 
va_list ap)
 {
     char *str, c;
     int lflag, zflag, nflag;
@@ -626,7 +626,7 @@ static void putchar(char c)
     outb(0xe9, c);
 }
 
-static void __put(char **ignore, char c)
+static void __put(void *arg, char c)
 {
     putchar(c);
 }
@@ -648,22 +648,42 @@ int vprintf(const char *fmt, va_list ap)
     return 0;
 }
 
-static void __copy(char **buf, char c)
+struct __copy_context {
+    char *ptr;
+    size_t emitted;
+    size_t remaining;
+};
+
+static void __copy(void *arg, char c)
 {
-    **buf = c;
-    (*buf)++;
+    struct __copy_context *ctxt = arg;
+
+    ctxt->emitted++;
+
+    if (ctxt->remaining == 0)
+        return;
+    
+    *(ctxt->ptr++) = c;
+    --ctxt->remaining;
 }
 
-int sprintf(char *buf, const char *fmt, ...)
+int snprintf(char *buf, size_t size, const char *fmt, ...)
 {
     va_list ap;
+    struct __copy_context ctxt;
+
+    ctxt.ptr = buf;
+    ctxt.emitted = 0;
+    ctxt.remaining = size;
 
     va_start(ap, fmt);
-    _doprint(__copy, &buf, fmt, ap);
+    _doprint(__copy, &ctxt, fmt, ap);
     va_end(ap);
 
-    *buf = '\0';
-    return 0;
+    if (ctxt.remaining != 0)
+        *ctxt.ptr = '\0';
+
+    return ctxt.emitted;
 }
 
 static void __attribute__((noreturn)) crash(void)
diff -r 225da1242ba9 -r e1e952982cf1 tools/firmware/hvmloader/util.h
--- a/tools/firmware/hvmloader/util.h   Tue Nov 29 10:48:54 2011 +0000
+++ b/tools/firmware/hvmloader/util.h   Tue Nov 29 13:41:54 2011 +0000
@@ -172,7 +172,8 @@ int printf(const char *fmt, ...) __attri
 int vprintf(const char *fmt, va_list ap);
 
 /* Buffer output */
-int sprintf(char *buf, const char *fmt, ...) __attribute__ ((format (printf, 
2, 3)));
+typedef unsigned long size_t;
+int snprintf(char *buf, size_t size, const char *fmt, ...) __attribute__ 
((format (printf, 3, 4)));
 
 /* Populate specified memory hole with RAM. */
 void mem_hole_populate_ram(xen_pfn_t mfn, uint32_t nr_mfns);

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.