summaryrefslogtreecommitdiffstats
path: root/sys/ofed
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2013-07-08 21:25:12 +0000
committerjhb <jhb@FreeBSD.org>2013-07-08 21:25:12 +0000
commit3297db39d56073deb3fd4d2b69fce426ac837803 (patch)
tree060f342f7e42541239236a5072f1e3bd4fcda99e /sys/ofed
parent581b7760a59c50e55860392e73bf9c7cb3caef21 (diff)
downloadFreeBSD-src-3297db39d56073deb3fd4d2b69fce426ac837803.zip
FreeBSD-src-3297db39d56073deb3fd4d2b69fce426ac837803.tar.gz
Allow mlx4 devices to switch from Ethernet to Infiniband (and vice versa):
- Fix sysctl wrapper for sysfs attributes to properly handle new string values similar to sysctl_handle_string() (only copyin the user's supplied length and nul-terminate the string). - Don't check for a trailing newline when evaluating the desired operating mode of a mlx4 device. PR: kern/179999 Submitted by: Shahar Klein <shahark@mellanox.com> MFC after: 1 week
Diffstat (limited to 'sys/ofed')
-rw-r--r--sys/ofed/drivers/net/mlx4/main.c6
-rw-r--r--sys/ofed/include/linux/sysfs.h9
2 files changed, 10 insertions, 5 deletions
diff --git a/sys/ofed/drivers/net/mlx4/main.c b/sys/ofed/drivers/net/mlx4/main.c
index fe1f4bf..b48dfbd 100644
--- a/sys/ofed/drivers/net/mlx4/main.c
+++ b/sys/ofed/drivers/net/mlx4/main.c
@@ -479,11 +479,11 @@ static ssize_t set_port_type(struct device *dev,
int i;
int err = 0;
- if (!strcmp(buf, "ib\n"))
+ if (!strcmp(buf, "ib"))
info->tmp_type = MLX4_PORT_TYPE_IB;
- else if (!strcmp(buf, "eth\n"))
+ else if (!strcmp(buf, "eth"))
info->tmp_type = MLX4_PORT_TYPE_ETH;
- else if (!strcmp(buf, "auto\n"))
+ else if (!strcmp(buf, "auto"))
info->tmp_type = MLX4_PORT_TYPE_AUTO;
else {
mlx4_err(mdev, "%s is not supported port type\n", buf);
diff --git a/sys/ofed/include/linux/sysfs.h b/sys/ofed/include/linux/sysfs.h
index 698f75e..ca2d71e 100644
--- a/sys/ofed/include/linux/sysfs.h
+++ b/sys/ofed/include/linux/sysfs.h
@@ -104,10 +104,15 @@ sysctl_handle_attr(SYSCTL_HANDLER_ARGS)
error = SYSCTL_OUT(req, buf, len);
if (error || !req->newptr || ops->store == NULL)
goto out;
- error = SYSCTL_IN(req, buf, PAGE_SIZE);
+ len = req->newlen - req->newidx;
+ if (len >= PAGE_SIZE)
+ error = EINVAL;
+ else
+ error = SYSCTL_IN(req, buf, len);
if (error)
goto out;
- len = ops->store(kobj, attr, buf, req->newlen);
+ ((char *)buf)[len] = '\0';
+ len = ops->store(kobj, attr, buf, len);
if (len < 0)
error = -len;
out:
OpenPOWER on IntegriCloud