summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLee Duncan <leeman.duncan@gmail.com>2020-06-03 08:47:55 -0700
committerGitHub <noreply@github.com>2020-06-03 08:47:55 -0700
commit6d2113a769d755557c5969f9998ab0b71a162dc1 (patch)
tree51cdb6e32f5c60d75ffa35850a345152995cc576
parent1c4922521fa265ff299ae10e2190e04df551b839 (diff)
parent3f24547f246ee44000d67c7a9b97ff5704327a60 (diff)
downloadopen-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.h4
-rw-r--r--iscsiuio/src/uip/ipv6.c2
-rw-r--r--iscsiuio/src/unix/nic_utils.c20
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;