Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 22 Nov 2011 20:34:28 GMT
From:      Alexander Best <arundel@FreeBSD.org>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   kern/162765: [patch] lseek(2) may return successful although no seek operation was actually performed
Message-ID:  <201111222034.pAMKYSiR091222@red.freebsd.org>
Resent-Message-ID: <201111222040.pAMKe1gD051716@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         162765
>Category:       kern
>Synopsis:       [patch] lseek(2) may return successful although no seek operation was actually performed
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          doc-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Nov 22 20:40:01 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator:     Alexander Best
>Release:        10.0-CURRENT
>Organization:
>Environment:
FreeBSD otaku 10.0-CURRENT FreeBSD 10.0-CURRENT #4 r227803M: Mon Nov 21 23:05:28 CET 2011     arundel@otaku:/usr/obj/usr/subversion-src/sys/ARUNDEL  amd64
>Description:
in certain situations lseek() will return successful although no seek was performed. this can happen when operating on devices that don't support seeking (older tape drives) or when operating on changeable media devices (such as DVD or Blu-ray devices) without a medium inserted.

the attached patch fixes the lseek(2) man page by adding several entries to the BUGS section, along with updating the POSIX compliance to the latest specifications.

please note that the real issue doesn't seem fixable atm. lseek() was never designed to confirm a seek operation, but to merely request it.

the issue was extensively discussion in this thread:

http://lists.freebsd.org/pipermail/freebsd-hackers/2011-November/036842.html (alternative link: http://docs.freebsd.org/cgi/mid.cgi?20111115202450.GA73512)

cheers.
alex
>How-To-Repeat:

>Fix:


Patch attached with submission follows:

diff --git a/lib/libc/sys/lseek.2 b/lib/libc/sys/lseek.2
index 874c523..209af51 100644
--- a/lib/libc/sys/lseek.2
+++ b/lib/libc/sys/lseek.2
@@ -28,7 +28,7 @@
 .\"     @(#)lseek.2	8.3 (Berkeley) 4/19/94
 .\" $FreeBSD$
 .\"
-.Dd April 5, 2007
+.Dd November 21, 2011
 .Dt LSEEK 2
 .Os
 .Sh NAME
@@ -113,10 +113,9 @@ of the existing end-of-file of the file.
 If data is later written
 at this point, subsequent reads of the data in the gap return
 bytes of zeros (until data is actually written into the gap).
-.Pp
-Some devices are incapable of seeking.
-The value of the pointer
-associated with such a device is undefined.
+However, the
+.Fn lseek
+system call does not, by itself, extend the size of a file.
 .Pp
 A
 .Qq hole
@@ -197,13 +196,43 @@ is associated with a pipe, socket, or FIFO.
 The
 .Fn lseek
 system call is expected to conform to
-.St -p1003.1-90 .
+.St -p1003.1-2008 .
+.Pp
+The
+.Dv SEEK_HOLE
+and
+.Dv SEEK_DATA
+directives, along with the
+.Er ENXIO
+error, are extensions to that specification.
 .Sh HISTORY
 The
 .Fn lseek
 function appeared in
 .At v7 .
 .Sh BUGS
+If the
+.Fn lseek
+system call is operating on a device which is incapable of seeking,
+it will request the seek operation and return successfully,
+even though no seek was performed.
+Because the
+.Ar offset
+argument will be stored unconditionally in the file descriptor of that device,
+there is no way to confirm, if the seek operation succeeded or not
+(e.g. using the
+.Fn ftell
+function).
+Device types which are known to be incapable of seeking include
+tape drives.
+.Pp
+The
+.Fn lseek
+system call will not detect whether media are present in changeable
+media devices such as DVD or Blu-ray devices.
+A requested seek operation will therefore return sucessfully when no
+medium is present.
+.Pp
 This document's use of
 .Fa whence
 is incorrect English, but is maintained for historical reasons.


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201111222034.pAMKYSiR091222>