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@citrix.com>
CC: Dave Scott <Dave.Scott@eu.citrix.com>
CC: Ian Campbell <Ian.Campbell@citrix.com>
CC: Ian Jackson <Ian.Jackson@eu.citrix.com>
CC: Wei Liu <wei.liu2@citrix.com>
Acked-by: David Scott <dave.scott@citrix.com>
(cherry picked from commit c8945d5161)
(cherry picked from commit 032673c883)
This commit is contained in:
Andrew Cooper authored and Ian Jackson committed 2015-06-23 11:52:44 +01:00
1 parent 10a95535b0
commit 9702e084d0
1 file changed
+8 -7
+8 -7
View File
@@ -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);
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.