summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--iscsiuio/src/unix/libs/bnx2x.c6
-rw-r--r--iscsiuio/src/unix/libs/qedi.c1
-rw-r--r--iscsiuio/src/unix/nic_utils.c2
-rw-r--r--libopeniscsiusr/Makefile2
-rw-r--r--libopeniscsiusr/iface.c1
-rw-r--r--libopeniscsiusr/sysfs.c14
-rw-r--r--usr/idbm.c1
-rw-r--r--usr/iscsi_sysfs.c19
-rw-r--r--usr/iscsid.c2
-rw-r--r--utils/fwparam_ibft/fwparam_ppc.c2
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);
diff --git a/usr/idbm.c b/usr/idbm.c
index 9b82e20..830189f 100644
--- a/usr/idbm.c
+++ b/usr/idbm.c
@@ -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;