svn commit: r253048 - in head/sys/ofed: drivers/net/mlx4 include/linux
John Baldwin
jhb at FreeBSD.org
Mon Jul 8 21:25:13 UTC 2013
Author: jhb
Date: Mon Jul 8 21:25:12 2013
New Revision: 253048
URL: http://svnweb.freebsd.org/changeset/base/253048
Log:
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 at mellanox.com>
MFC after: 1 week
Modified:
head/sys/ofed/drivers/net/mlx4/main.c
head/sys/ofed/include/linux/sysfs.h
Modified: head/sys/ofed/drivers/net/mlx4/main.c
==============================================================================
--- head/sys/ofed/drivers/net/mlx4/main.c Mon Jul 8 21:17:20 2013 (r253047)
+++ head/sys/ofed/drivers/net/mlx4/main.c Mon Jul 8 21:25:12 2013 (r253048)
@@ -479,11 +479,11 @@ static ssize_t set_port_type(struct devi
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);
Modified: head/sys/ofed/include/linux/sysfs.h
==============================================================================
--- head/sys/ofed/include/linux/sysfs.h Mon Jul 8 21:17:20 2013 (r253047)
+++ head/sys/ofed/include/linux/sysfs.h Mon Jul 8 21:25:12 2013 (r253048)
@@ -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:
More information about the svn-src-all
mailing list