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

[Xen-changelog] [xen master] ocaml/xenctrl: Make failwith_xc() thread safe



commit c8945d51613450c19e0898b1b3056c90f4929179
Author:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Wed Jan 28 17:55:32 2015 +0000
Commit:     Ian Campbell <ian.campbell@xxxxxxxxxx>
CommitDate: Mon Feb 2 14:42:09 2015 +0000

    ocaml/xenctrl: Make failwith_xc() thread safe
    
    The static error_str[] buffer is not thread-safe, and 1024 bytes is
    unreasonably large.  Reduce to 256 bytes (which is still much larger than 
any
    current use), and move it to being a stack variable.
    
    Also, propagate the Noreturn attribute from caml_raise_with_string().
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
    CC: Dave Scott <Dave.Scott@xxxxxxxxxxxxx>
    CC: Ian Campbell <Ian.Campbell@xxxxxxxxxx>
    CC: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
    CC: Wei Liu <wei.liu2@xxxxxxxxxx>
    Acked-by: David Scott <dave.scott@xxxxxxxxxx>
---
 tools/ocaml/libs/xc/xenctrl_stubs.c |   15 ++++++++-------
 1 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/tools/ocaml/libs/xc/xenctrl_stubs.c 
b/tools/ocaml/libs/xc/xenctrl_stubs.c
index 92d064f..6a95528 100644
--- a/tools/ocaml/libs/xc/xenctrl_stubs.c
+++ b/tools/ocaml/libs/xc/xenctrl_stubs.c
@@ -51,21 +51,22 @@
        i1 = (uint32_t) Int64_val(Field(input, 0)); \
        i2 = ((Field(input, 1) == Val_none) ? 0xffffffff : (uint32_t) 
Int64_val(Field(Field(input, 1), 0)));
 
-#define ERROR_STRLEN 1024
-void failwith_xc(xc_interface *xch)
+static void Noreturn failwith_xc(xc_interface *xch)
 {
-       static char error_str[ERROR_STRLEN];
+       char error_str[256];
        if (xch) {
                const xc_error *error = xc_get_last_error(xch);
                if (error->code == XC_ERROR_NONE)
-                       snprintf(error_str, ERROR_STRLEN, "%d: %s", errno, 
strerror(errno));
+                       snprintf(error_str, sizeof(error_str),
+                                "%d: %s", errno, strerror(errno));
                else
-                       snprintf(error_str, ERROR_STRLEN, "%d: %s: %s",
-                                error->code,
+                       snprintf(error_str, sizeof(error_str),
+                                "%d: %s: %s", error->code,
                                 xc_error_code_to_desc(error->code),
                                 error->message);
        } else {
-               snprintf(error_str, ERROR_STRLEN, "Unable to open XC 
interface");
+               snprintf(error_str, sizeof(error_str),
+                        "Unable to open XC interface");
        }
        caml_raise_with_string(*caml_named_value("xc.error"), error_str);
 }
--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

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