kern/179999: [ofed] [patch] Bug assigning HCA from IB to ETH
John Baldwin
jhb at freebsd.org
Thu Jun 27 21:30:02 UTC 2013
The following reply was made to PR kern/179999; it has been noted by GNATS.
From: John Baldwin <jhb at freebsd.org>
To: bug-followup at freebsd.org,
shahark at mellanox.com
Cc:
Subject: Re: kern/179999: [ofed] [patch] Bug assigning HCA from IB to ETH
Date: Thu, 27 Jun 2013 14:10:42 -0400
Thanks, I think the sysfs fix has a few issues though (it writes to buf[] even
if the copyin() fails, and it doesn't enforce a bounds check). It does seem
that this should probably be using sysctl_handle_string() instead of doing it
by hand, but for now I've just adjusted your patch. Can you please test this
version?
Index: ofed/drivers/net/mlx4/main.c
===================================================================
--- ofed/drivers/net/mlx4/main.c (revision 252306)
+++ ofed/drivers/net/mlx4/main.c (working copy)
@@ -479,11 +479,11 @@
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);
Index: ofed/include/linux/sysfs.h
===================================================================
--- ofed/include/linux/sysfs.h (revision 252306)
+++ ofed/include/linux/sysfs.h (working copy)
@@ -104,10 +104,15 @@
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:
--
John Baldwin
More information about the freebsd-net
mailing list