svn commit: r299428 - head/sys/compat/linuxkpi/common/src

Hans Petter Selasky hselasky at FreeBSD.org
Wed May 11 10:51:00 UTC 2016


Author: hselasky
Date: Wed May 11 10:50:59 2016
New Revision: 299428
URL: https://svnweb.freebsd.org/changeset/base/299428

Log:
  Return a proper error code instead of panicing when an I/O vector
  having the wrong number of entries is detected.
  
  MFC after:	1 week
  Sponsored by:	Mellanox Technologies

Modified:
  head/sys/compat/linuxkpi/common/src/linux_compat.c

Modified: head/sys/compat/linuxkpi/common/src/linux_compat.c
==============================================================================
--- head/sys/compat/linuxkpi/common/src/linux_compat.c	Wed May 11 10:40:04 2016	(r299427)
+++ head/sys/compat/linuxkpi/common/src/linux_compat.c	Wed May 11 10:50:59 2016	(r299428)
@@ -487,9 +487,9 @@ linux_dev_read(struct cdev *dev, struct 
 	if ((error = devfs_get_cdevpriv((void **)&filp)) != 0)
 		return (error);
 	filp->f_flags = file->f_flag;
+	/* XXX no support for I/O vectors currently */
 	if (uio->uio_iovcnt != 1)
-		panic("linux_dev_read: uio %p iovcnt %d",
-		    uio, uio->uio_iovcnt);
+		return (EOPNOTSUPP);
 	if (filp->f_op->read) {
 		bytes = filp->f_op->read(filp, uio->uio_iov->iov_base,
 		    uio->uio_iov->iov_len, &uio->uio_offset);
@@ -522,9 +522,9 @@ linux_dev_write(struct cdev *dev, struct
 	if ((error = devfs_get_cdevpriv((void **)&filp)) != 0)
 		return (error);
 	filp->f_flags = file->f_flag;
+	/* XXX no support for I/O vectors currently */
 	if (uio->uio_iovcnt != 1)
-		panic("linux_dev_write: uio %p iovcnt %d",
-		    uio, uio->uio_iovcnt);
+		return (EOPNOTSUPP);
 	if (filp->f_op->write) {
 		bytes = filp->f_op->write(filp, uio->uio_iov->iov_base,
 		    uio->uio_iov->iov_len, &uio->uio_offset);
@@ -638,9 +638,9 @@ linux_file_read(struct file *file, struc
 	error = 0;
 	filp = (struct linux_file *)file->f_data;
 	filp->f_flags = file->f_flag;
+	/* XXX no support for I/O vectors currently */
 	if (uio->uio_iovcnt != 1)
-		panic("linux_file_read: uio %p iovcnt %d",
-		    uio, uio->uio_iovcnt);
+		return (EOPNOTSUPP);
 	if (filp->f_op->read) {
 		bytes = filp->f_op->read(filp, uio->uio_iov->iov_base,
 		    uio->uio_iov->iov_len, &uio->uio_offset);


More information about the svn-src-all mailing list