mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
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 commitc8945d5161) (cherry picked from commit032673c883)
This commit is contained in:
1 parent
10a95535b0
commit
9702e084d0
1 file changed
+8
-7
@@ -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);
|
||||
}
|
||||
|
||||