Skip to contentSkip to conversation

libxl/libxl_dm.c: u.hvm.usbdevice_list is checked for emptiness

PATCH In review Robin Lee 3 participants 4 messages May 5, 2017 – May 8, 2017

lore
Share & tools
lore

Robin Lee

author
#0 lore raw

PATCH v2 1/1 libxl/libxl_dm.c: u.hvm.usbdevice_list is checked for emptiness

Currently usbdevice_list is only checked for nullity. But the OCaml binding will convert empty list to a pointer to NULL, instead of a NULL pointer. That means the OCaml binding will fail to disable USB.

This patch will check emptiness of usbdevice_list. And NULL is still a valid empty list.

---
 tools/libxl/libxl_dm.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
tools/libxl/libxl_dm.c +6 -6
index f8ba859..44ebd70 100644
@@ -559,9 +559,9 @@ static int libxl__build_device_model_args_old(libxl__gc *gc,
         }
         if (libxl_defbool_val(b_info->u.hvm.usb)
             || b_info->u.hvm.usbdevice
-            || b_info->u.hvm.usbdevice_list) {
-            if ( b_info->u.hvm.usbdevice && b_info->u.hvm.usbdevice_list )
-            {
+            || libxl_string_list_length(&b_info->u.hvm.usbdevice_list)) {
+            if (b_info->u.hvm.usbdevice
+                && libxl_string_list_length(&b_info->u.hvm.usbdevice_list)) {
                 LOGD(ERROR, domid, "Both usbdevice and usbdevice_list set");
                 return ERROR_INVAL;
             }
@@ -1149,9 +1149,9 @@ static int libxl__build_device_model_args_new(libxl__gc *gc,
         }
         if (libxl_defbool_val(b_info->u.hvm.usb)
             || b_info->u.hvm.usbdevice
-            || b_info->u.hvm.usbdevice_list) {
-            if ( b_info->u.hvm.usbdevice && b_info->u.hvm.usbdevice_list )
-            {
+            || libxl_string_list_length(&b_info->u.hvm.usbdevice_list)) {
+            if (b_info->u.hvm.usbdevice
+                && libxl_string_list_length(&b_info->u.hvm.usbdevice_list)) {
                 LOGD(ERROR, guest_domid, "Both usbdevice and usbdevice_list set");
                 return ERROR_INVAL;
             }
Signature · 7 lines
2.9.3


_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xen.org/xen-devel
Acked-by on v2 1/1
#1 lore raw

Robin Lee writes ("[PATCH v2] libxl/libxl_dm.c: u.hvm.usbdevice_list is checked for emptiness"):

Quoted 5 lines

Currently usbdevice_list is only checked for nullity. But the OCaml binding will convert empty list to a pointer to NULL, instead of a NULL pointer. That means the OCaml binding will fail to disable USB.

This patch will check emptiness of usbdevice_list. And NULL is still a valid empty list.

Julien, this is a candidate for 4.9. It's a minor bugfix.

Ian.

Quoted 36 lines
 tools/libxl/libxl_dm.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
tools/libxl/libxl_dm.c +6 -6
index f8ba859..44ebd70 100644
@@ -559,9 +559,9 @@ static int libxl__build_device_model_args_old(libxl__gc *gc,
         }
         if (libxl_defbool_val(b_info->u.hvm.usb)
             || b_info->u.hvm.usbdevice
-            || b_info->u.hvm.usbdevice_list) {
-            if ( b_info->u.hvm.usbdevice && b_info->u.hvm.usbdevice_list )
-            {
+            || libxl_string_list_length(&b_info->u.hvm.usbdevice_list)) {
+            if (b_info->u.hvm.usbdevice
+                && libxl_string_list_length(&b_info->u.hvm.usbdevice_list)) {
                 LOGD(ERROR, domid, "Both usbdevice and usbdevice_list set");
                 return ERROR_INVAL;
             }
@@ -1149,9 +1149,9 @@ static int libxl__build_device_model_args_new(libxl__gc *gc,
         }
         if (libxl_defbool_val(b_info->u.hvm.usb)
             || b_info->u.hvm.usbdevice
-            || b_info->u.hvm.usbdevice_list) {
-            if ( b_info->u.hvm.usbdevice && b_info->u.hvm.usbdevice_list )
-            {
+            || libxl_string_list_length(&b_info->u.hvm.usbdevice_list)) {
+            if (b_info->u.hvm.usbdevice
+                && libxl_string_list_length(&b_info->u.hvm.usbdevice_list)) {
                 LOGD(ERROR, guest_domid, "Both usbdevice and usbdevice_list set");
                 return ERROR_INVAL;
             }
Signature · 1 line
2.9.3

_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xen.org/xen-devel

#2 lore raw

Hi Ian,

Quoted 10 lines · Ian Jackson

Robin Lee writes ("[PATCH v2] libxl/libxl_dm.c: u.hvm.usbdevice_list is checked for emptiness"):

Quoted 5 lines

Currently usbdevice_list is only checked for nullity. But the OCaml binding will convert empty list to a pointer to NULL, instead of a NULL pointer. That means the OCaml binding will fail to disable USB.

This patch will check emptiness of usbdevice_list. And NULL is still a valid empty list.

Julien, this is a candidate for 4.9. It's a minor bugfix.

Quoted 39 lines

Ian.

Quoted 36 lines
 tools/libxl/libxl_dm.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
tools/libxl/libxl_dm.c +6 -7
index f8ba859..44ebd70 100644
@@ -559,9 +559,9 @@ static int libxl__build_device_model_args_old(libxl__gc *gc,
         }
         if (libxl_defbool_val(b_info->u.hvm.usb)
             || b_info->u.hvm.usbdevice
-            || b_info->u.hvm.usbdevice_list) {
-            if ( b_info->u.hvm.usbdevice && b_info->u.hvm.usbdevice_list )
-            {
+            || libxl_string_list_length(&b_info->u.hvm.usbdevice_list)) {
+            if (b_info->u.hvm.usbdevice
+                && libxl_string_list_length(&b_info->u.hvm.usbdevice_list)) {
                 LOGD(ERROR, domid, "Both usbdevice and usbdevice_list set");
                 return ERROR_INVAL;
             }
@@ -1149,9 +1149,9 @@ static int libxl__build_device_model_args_new(libxl__gc *gc,
         }
         if (libxl_defbool_val(b_info->u.hvm.usb)
             || b_info->u.hvm.usbdevice
-            || b_info->u.hvm.usbdevice_list) {
-            if ( b_info->u.hvm.usbdevice && b_info->u.hvm.usbdevice_list )
-            {
+            || libxl_string_list_length(&b_info->u.hvm.usbdevice_list)) {
+            if (b_info->u.hvm.usbdevice
+                && libxl_string_list_length(&b_info->u.hvm.usbdevice_list)) {
                 LOGD(ERROR, guest_domid, "Both usbdevice and usbdevice_list set");
                 return ERROR_INVAL;
             }
--

2.9.3

Signature · 6 lines
Julien Grall

_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xen.org/xen-devel