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 <shah...@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:
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to