OSDN Git Service

dp-*: fix some wrong size_t vs ssize_t usage.
authorPeter Jones <pjones@redhat.com>
Tue, 9 Aug 2016 13:55:06 +0000 (09:55 -0400)
committerPeter Jones <pjones@redhat.com>
Tue, 9 Aug 2016 16:01:08 +0000 (12:01 -0400)
Signed-off-by: Peter Jones <pjones@redhat.com>
src/dp-hw.c
src/dp-message.c

index 5da9dc8..221d5fa 100644 (file)
@@ -27,7 +27,7 @@
 ssize_t
 format_edd10_guid(char *buf, size_t size, const_efidp dp)
 {
-       size_t off = 0;
+       ssize_t off = 0;
        efidp_edd10 const *edd_dp = (efidp_edd10 *)dp;
        off = format(buf, size, off, "EDD10(0x%"PRIx32")",
                     edd_dp->hardware_device);
@@ -38,7 +38,7 @@ ssize_t
 _format_hw_dn(char *buf, size_t size, const_efidp dp)
 {
        efi_guid_t edd10_guid = EDD10_HARDWARE_VENDOR_PATH_GUID;
-       off_t off = 0;
+       ssize_t off = 0;
        switch (dp->subtype) {
        case EFIDP_HW_PCI:
                off += format(buf, size, off, "Pci(0x%"PRIx32",0x%"PRIx32")",
index 9695186..385e3f7 100644 (file)
@@ -139,7 +139,7 @@ format_uart(char *buf, size_t size, const_efidp dp)
 static ssize_t
 format_sas(char *buf, size_t size, const_efidp dp)
 {
-       size_t off = 0;
+       ssize_t off = 0;
        const efidp_sas * const s = &dp->sas;
 
        int more_info = 0;
@@ -494,10 +494,14 @@ _format_message_dn(char *buf, size_t size, const_efidp dp)
                             dp->sata.lun);
                break;
        case EFIDP_MSG_ISCSI: {
-               size_t sz = efidp_node_size(dp)
-                           - offsetof(efidp_iscsi, target_name);
+               ssize_t sz = efidp_node_size(dp)
+                       - offsetof(efidp_iscsi, target_name);
+               if (sz < 0)
+                       return -1;
+
                if (sz > EFIDP_ISCSI_MAX_TARGET_NAME_LEN)
                        sz = EFIDP_ISCSI_MAX_TARGET_NAME_LEN;
+
                char target_name[sz + 1];
                memcpy(target_name, dp->iscsi.target_name, sz);
                target_name[sz] = '\0';
@@ -532,7 +536,10 @@ _format_message_dn(char *buf, size_t size, const_efidp dp)
                              dp->nvme.ieee_eui_64[7]);
                break;
        case EFIDP_MSG_URI: {
-               size_t sz = efidp_node_size(dp) - offsetof(efidp_uri, uri);
+               ssize_t sz = efidp_node_size(dp) - offsetof(efidp_uri, uri);
+               if (sz < 0)
+                       return -1;
+
                char uri[sz + 1];
                memcpy(uri, dp->uri.uri, sz);
                uri[sz] = '\0';