svn commit: r351372 - head/sys/kern

Rick Macklem rmacklem at FreeBSD.org
Thu Aug 22 01:15:07 UTC 2019


Author: rmacklem
Date: Thu Aug 22 01:15:06 2019
New Revision: 351372
URL: https://svnweb.freebsd.org/changeset/base/351372

Log:
  Map ENOTTY to EINVAL for lseek(SEEK_DATA/SEEK_HOLE).
  
  Without this patch, when an application performed lseek(SEEK_DATA/SEEK_HOLE)
  on a file in a file system that does not have its own VOP_IOCTL(), the
  lseek(2) fails with errno ENOTTY. This didn't seem appropriate, since
  ENOTTY is not listed as an error return by either the lseek(2) man page
  nor the POSIX draft for lseek(2).
  This was discussed on freebsd-current@ here:
  http://docs.FreeBSD.org/cgi/mid.cgi?CAOtMX2iiQdv1+15e1N_r7V6aCx_VqAJCTP1AW+qs3Yg7sPg9wA
  
  This trivial patch maps ENOTTY to EINVAL for lseek(SEEK_DATA/SEEK_HOLE).
  
  Reviewed by:	markj
  Relnotes:	yes
  Differential Revision:	https://reviews.freebsd.org/D21300

Modified:
  head/sys/kern/vfs_vnops.c

Modified: head/sys/kern/vfs_vnops.c
==============================================================================
--- head/sys/kern/vfs_vnops.c	Thu Aug 22 00:37:38 2019	(r351371)
+++ head/sys/kern/vfs_vnops.c	Thu Aug 22 01:15:06 2019	(r351372)
@@ -2275,9 +2275,13 @@ vn_seek(struct file *fp, off_t offset, int whence, str
 		break;
 	case SEEK_DATA:
 		error = fo_ioctl(fp, FIOSEEKDATA, &offset, cred, td);
+		if (error == ENOTTY)
+			error = EINVAL;
 		break;
 	case SEEK_HOLE:
 		error = fo_ioctl(fp, FIOSEEKHOLE, &offset, cred, td);
+		if (error == ENOTTY)
+			error = EINVAL;
 		break;
 	default:
 		error = EINVAL;


More information about the svn-src-all mailing list