diff options
author | Lee Duncan <leeman.duncan@gmail.com> | 2020-06-03 08:47:55 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-03 08:47:55 -0700 |
commit | 6d2113a769d755557c5969f9998ab0b71a162dc1 (patch) | |
tree | 51cdb6e32f5c60d75ffa35850a345152995cc576 | |
parent | 1c4922521fa265ff299ae10e2190e04df551b839 (diff) | |
parent | 3f24547f246ee44000d67c7a9b97ff5704327a60 (diff) | |
download | open-iscsi-6d2113a769d755557c5969f9998ab0b71a162dc1.tar.gz |
Merge pull request #210 from gonzoleeman/fix-zero-len-and-more
Fix zero length array usage, and some iscsiuio compiler issues
-rw-r--r-- | include/iscsi_if.h | 4 | ||||
-rw-r--r-- | iscsiuio/src/uip/ipv6.c | 2 | ||||
-rw-r--r-- | iscsiuio/src/unix/nic_utils.c | 20 |
3 files changed, 18 insertions, 8 deletions
diff --git a/include/iscsi_if.h b/include/iscsi_if.h index 2d46214..5a1c614 100644 --- a/include/iscsi_if.h +++ b/include/iscsi_if.h @@ -841,7 +841,7 @@ struct iscsi_stats { * up to ISCSI_STATS_CUSTOM_MAX */ uint32_t custom_length; - struct iscsi_stats_custom custom[0] + struct iscsi_stats_custom custom[] __attribute__ ((aligned (sizeof(uint64_t)))); }; @@ -972,7 +972,7 @@ struct iscsi_offload_host_stats { * up to ISCSI_HOST_STATS_CUSTOM_MAX */ uint32_t custom_length; - struct iscsi_host_stats_custom custom[0] + struct iscsi_host_stats_custom custom[] __attribute__ ((aligned (sizeof(uint64_t)))); }; diff --git a/iscsiuio/src/uip/ipv6.c b/iscsiuio/src/uip/ipv6.c index 05efa73..11cb4e9 100644 --- a/iscsiuio/src/uip/ipv6.c +++ b/iscsiuio/src/uip/ipv6.c @@ -519,7 +519,7 @@ static void ipv6_insert_protocol_chksum(struct ipv6_hdr *ipv6) * SRC IP, DST IP, Protocol Data Length, and Next Header. */ sum = 0; - ptr = (u16_t *)&ipv6->ipv6_src; + ptr = (u16_t *)&ipv6->ipv6_src.addr16[0]; for (i = 0; i < sizeof(struct ipv6_addr); i++) { sum += HOST_TO_NET16(*ptr); diff --git a/iscsiuio/src/unix/nic_utils.c b/iscsiuio/src/unix/nic_utils.c index ec3b915..ec4535d 100644 --- a/iscsiuio/src/unix/nic_utils.c +++ b/iscsiuio/src/unix/nic_utils.c @@ -603,7 +603,10 @@ static int from_uio_find_associated_host(nic_t *nic, int uio_minor, search_filters[path_iterator], alphasort); switch (count) { - case 1: + case 1: { + char *parsed_src; + size_t parsed_size; + parsed_name = (*extract_name[path_iterator]) (files); if (!parsed_name) { LOG_WARN(PFX "Couldn't find delimiter in: %s", @@ -612,15 +615,22 @@ static int from_uio_find_associated_host(nic_t *nic, int uio_minor, break; } - strncpy(name, - parsed_name + - extract_name_offset[path_iterator], name_size); + parsed_src = parsed_name + extract_name_offset[path_iterator]; + parsed_size = strlen(parsed_src); + if (parsed_size >= name_size) { + LOG_WARN(PFX "uio device name too long: %s (max %d)", + parsed_src, (int)name_size - 1); + rc = -EINVAL; + } else { + strncpy(name, parsed_src, name_size); + rc = 0; + } free(files[0]); free(files); - rc = 0; break; + } case 0: rc = -EINVAL; |