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

Reply via email to