]> xenbits.xensource.com Git - people/tklengyel/xen.git/commitdiff
tools/oxenstored/syslog: Avoid potential NULL dereference
authorEdwin Török <edvin.torok@citrix.com>
Tue, 8 Nov 2022 14:24:19 +0000 (14:24 +0000)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Tue, 20 Dec 2022 13:13:40 +0000 (13:13 +0000)
strdup() may return NULL.  Check for this before passing to syslog().

Drop const from c_msg.  It is bogus, as demonstrated by the need to cast to
void * in order to free the memory.

Signed-off-by: Edwin Török <edvin.torok@citrix.com>
Acked-by: Christian Lindig <christian.lindig@citrix.com>
(cherry picked from commit acd3fb6d65905f8a185dcb9fe6a330a591b96203)

tools/ocaml/xenstored/syslog_stubs.c

index 875d48ad57ebdfb9b9c3115829289e6e9e623e0c..e16c3a9491d0df2b9b5c9a0ed6564d24c7f12828 100644 (file)
@@ -14,6 +14,7 @@
 
 #include <syslog.h>
 #include <string.h>
+#include <caml/fail.h>
 #include <caml/mlvalues.h>
 #include <caml/memory.h>
 #include <caml/alloc.h>
@@ -35,14 +36,16 @@ static int __syslog_facility_table[] = {
 value stub_syslog(value facility, value level, value msg)
 {
        CAMLparam3(facility, level, msg);
-       const char *c_msg = strdup(String_val(msg));
+       char *c_msg = strdup(String_val(msg));
        int c_facility = __syslog_facility_table[Int_val(facility)]
                       | __syslog_level_table[Int_val(level)];
 
+       if ( !c_msg )
+               caml_raise_out_of_memory();
        caml_enter_blocking_section();
        syslog(c_facility, "%s", c_msg);
        caml_leave_blocking_section();
 
-       free((void*)c_msg);
+       free(c_msg);
        CAMLreturn(Val_unit);
 }