diff options
-rw-r--r-- | iscsiuio/src/unix/libs/bnx2x.c | 6 | ||||
-rw-r--r-- | iscsiuio/src/unix/libs/qedi.c | 1 | ||||
-rw-r--r-- | iscsiuio/src/unix/nic_utils.c | 2 | ||||
-rw-r--r-- | libopeniscsiusr/Makefile | 2 | ||||
-rw-r--r-- | libopeniscsiusr/iface.c | 1 | ||||
-rw-r--r-- | libopeniscsiusr/sysfs.c | 14 | ||||
-rw-r--r-- | usr/idbm.c | 1 | ||||
-rw-r--r-- | usr/iscsi_sysfs.c | 19 | ||||
-rw-r--r-- | usr/iscsid.c | 2 | ||||
-rw-r--r-- | utils/fwparam_ibft/fwparam_ppc.c | 2 |
10 files changed, 36 insertions, 14 deletions
diff --git a/iscsiuio/src/unix/libs/bnx2x.c b/iscsiuio/src/unix/libs/bnx2x.c index 3df6d5f..c5e7b71 100644 --- a/iscsiuio/src/unix/libs/bnx2x.c +++ b/iscsiuio/src/unix/libs/bnx2x.c @@ -36,6 +36,11 @@ * bnx2x.c - bnx2x user space driver * */ + +/* include nic.h before linux/ethtool.h to avoid redefinitions of + * eth structs +*/ +#include "nic.h" #include <errno.h> #include <stdio.h> #include <string.h> @@ -58,7 +63,6 @@ #include "bnx2x.h" #include "cnic.h" #include "logger.h" -#include "nic.h" #include "nic_id.h" #include "nic_utils.h" #include "options.h" diff --git a/iscsiuio/src/unix/libs/qedi.c b/iscsiuio/src/unix/libs/qedi.c index b81fecd..24cb89a 100644 --- a/iscsiuio/src/unix/libs/qedi.c +++ b/iscsiuio/src/unix/libs/qedi.c @@ -49,7 +49,6 @@ #include <arpa/inet.h> #include <linux/types.h> #include <linux/sockios.h> -#include <linux/ethtool.h> #include <linux/netlink.h> #include <sys/mman.h> #include <sys/ioctl.h> diff --git a/iscsiuio/src/unix/nic_utils.c b/iscsiuio/src/unix/nic_utils.c index e2f2943..786f2a4 100644 --- a/iscsiuio/src/unix/nic_utils.c +++ b/iscsiuio/src/unix/nic_utils.c @@ -305,7 +305,7 @@ static int nic_util_enable_disable_multicast(nic_t *nic, uint32_t cmd) /* Prepare the request */ memset(&ifr, 0, sizeof(ifr)); strncpy(ifr.ifr_name, nic->eth_device_name, - sizeof(nic->eth_device_name)); + sizeof(ifr.ifr_name)); memcpy(ifr.ifr_hwaddr.sa_data, multicast_addr.addr, ETH_ALEN); fd = socket(AF_INET, SOCK_DGRAM, 0); diff --git a/libopeniscsiusr/Makefile b/libopeniscsiusr/Makefile index 05a77da..754ffb7 100644 --- a/libopeniscsiusr/Makefile +++ b/libopeniscsiusr/Makefile @@ -49,7 +49,7 @@ LIBADD = all: $(LIBS) $(LIBS_MAJOR) $(TESTS) doc $(LIBS): $(OBJS) - $(CC) $(LDFLAGS) -shared -Wl,-soname=$@ -o $@ $(OBJS) $(LIBADD) + $(CC) $(CFLAGS) $(LDFLAGS) -shared -Wl,-soname=$@ -o $@ $(OBJS) $(LIBADD) ln -sf $@ $(DEVLIB) $(LIBS_MAJOR): $(LIBS) diff --git a/libopeniscsiusr/iface.c b/libopeniscsiusr/iface.c index 5cccbf2..3233bb5 100644 --- a/libopeniscsiusr/iface.c +++ b/libopeniscsiusr/iface.c @@ -36,6 +36,7 @@ #ifdef USE_KMOD #include <libkmod.h> #endif +#include <limits.h> #include "libopeniscsiusr/libopeniscsiusr.h" #include "misc.h" diff --git a/libopeniscsiusr/sysfs.c b/libopeniscsiusr/sysfs.c index f568245..22eaf44 100644 --- a/libopeniscsiusr/sysfs.c +++ b/libopeniscsiusr/sysfs.c @@ -325,6 +325,8 @@ int _iscsi_host_id_of_session(struct iscsi_context *ctx, uint32_t sid, struct dirent **namelist = NULL; int n = 0; const char *host_id_str = NULL; + const char iscsi_host_dir_str[] = "/iscsi_host/"; + const unsigned int iscsi_host_dir_strlen = strlen(iscsi_host_dir_str); assert(ctx != NULL); assert(sid != 0); @@ -339,8 +341,16 @@ int _iscsi_host_id_of_session(struct iscsi_context *ctx, uint32_t sid, _SYSFS_DEV_CLASS_ISCSI_SESSION, sys_dev_path), rc, out); - snprintf(sys_scsi_host_dir_path, PATH_MAX, "%s/iscsi_host/", - sys_dev_path); + if ((strlen(sys_dev_path) + iscsi_host_dir_strlen) >= PATH_MAX) { + rc = LIBISCSI_ERR_SYSFS_LOOKUP; + _error(ctx, "Pathname too long: %s%s", + sys_dev_path, iscsi_host_dir_str); + goto out; + } + + strncpy(sys_scsi_host_dir_path, sys_dev_path, PATH_MAX); + strncat(sys_scsi_host_dir_path, iscsi_host_dir_str, + PATH_MAX - iscsi_host_dir_strlen); _good(_scandir(ctx, sys_scsi_host_dir_path, &namelist, &n), rc, out); @@ -27,6 +27,7 @@ #include <errno.h> #include <dirent.h> #include <limits.h> +#include <fcntl.h> #include <sys/stat.h> #include <sys/file.h> diff --git a/usr/iscsi_sysfs.c b/usr/iscsi_sysfs.c index f888107..fdc26c7 100644 --- a/usr/iscsi_sysfs.c +++ b/usr/iscsi_sysfs.c @@ -1154,7 +1154,7 @@ int iscsi_sysfs_for_each_iface_on_host(void *data, uint32_t host_no, int rc = 0, i, n; struct iface_rec iface; char devpath[PATH_SIZE]; - char sysfs_path[PATH_SIZE]; + char sysfs_dev_iscsi_iface_path[PATH_SIZE]; char id[NAME_SIZE]; snprintf(id, sizeof(id), "host%u", host_no); @@ -1164,11 +1164,11 @@ int iscsi_sysfs_for_each_iface_on_host(void *data, uint32_t host_no, return ISCSI_ERR_SYSFS_LOOKUP; } - sprintf(sysfs_path, "/sys"); - strlcat(sysfs_path, devpath, sizeof(sysfs_path)); - strlcat(sysfs_path, "/iscsi_iface", sizeof(sysfs_path)); + sprintf(sysfs_dev_iscsi_iface_path, "/sys"); + strlcat(sysfs_dev_iscsi_iface_path, devpath, sizeof(sysfs_dev_iscsi_iface_path)); + strlcat(sysfs_dev_iscsi_iface_path, "/iscsi_iface", sizeof(sysfs_dev_iscsi_iface_path)); - n = scandir(sysfs_path, &namelist, trans_filter, alphasort); + n = scandir(sysfs_dev_iscsi_iface_path, &namelist, trans_filter, alphasort); if (n <= 0) /* older kernels or some drivers will not have ifaces */ return 0; @@ -1807,7 +1807,7 @@ int iscsi_sysfs_for_each_device(void *data, int host_no, uint32_t sid, int h, b, t, l, i, n, err = 0, target; char devpath[PATH_SIZE]; char id[NAME_SIZE]; - char path_full[PATH_SIZE]; + char path_full[3*PATH_SIZE]; target = get_target_no_from_sid(sid, &err); if (err) @@ -1822,6 +1822,13 @@ int iscsi_sysfs_for_each_device(void *data, int host_no, uint32_t sid, snprintf(path_full, sizeof(path_full), "%s%s/device/target%d:0:%d", sysfs_path, devpath, host_no, target); + + if (strlen(path_full) > PATH_SIZE) { + log_debug(3, "Could not lookup devpath for %s %s (too long)", + ISCSI_SESSION_SUBSYS, id); + return ISCSI_ERR_SYSFS_LOOKUP; + } + n = scandir(path_full, &namelist, trans_filter, alphasort); if (n <= 0) diff --git a/usr/iscsid.c b/usr/iscsid.c index 813eb3d..b95917d 100644 --- a/usr/iscsid.c +++ b/usr/iscsid.c @@ -438,7 +438,7 @@ int main(int argc, char *argv[]) log_close(log_pid); exit(ISCSI_ERR); } else if (pid) { - log_error("iSCSI daemon with pid=%d started!", pid); + log_info("iSCSI daemon with pid=%d started!", pid); exit(0); } diff --git a/utils/fwparam_ibft/fwparam_ppc.c b/utils/fwparam_ibft/fwparam_ppc.c index c298b8c..391faa2 100644 --- a/utils/fwparam_ibft/fwparam_ppc.c +++ b/utils/fwparam_ibft/fwparam_ppc.c @@ -356,7 +356,7 @@ static int loop_devs(const char *devtree) * Sort the nics into "natural" order. The proc fs * device-tree has them in somewhat random, or reversed order. */ - qsort(niclist, nic_count, sizeof(char *), (__compar_fn_t)nic_cmp); + qsort(niclist, nic_count, sizeof(char *), nic_cmp); snprintf(prefix, sizeof(prefix), "%s/%s", devtree, "aliases"); dev_count = 0; |