From: Jeff Layton <jlayton@redhat.com>
To: libc-alpha@sourceware.org
Cc: linux-fsdevel@vger.kernel.org,
Michael Kerrisk <mtk.manpages@gmail.com>,
"Carlos O'Donell" <carlos@redhat.com>,
Yuriy Kolerov <Yuriy.Kolerov@synopsys.com>
Subject: [glibc PATCH] fcntl: put F_OFD_* constants under #ifdef __USE_FILE_OFFSET64
Date: Wed, 17 Aug 2016 10:47:31 -0400 [thread overview]
Message-ID: <1471445251-2450-1-git-send-email-jlayton@redhat.com> (raw)
The Linux kernel expects a flock64 structure whenever you use OFD locks
with fcntl64. Unfortunately, you can currently build a 32-bit program
that passes in a struct flock when it calls fcntl64.
Only define the F_OFD_* constants when __USE_FILE_OFFSET64 is also
defined, so that the build fails in this situation rather than
producing a broken binary.
Reported-by: Cyril Hrubis <chrubis@suse.cz>
Cc: Michael Kerrisk (man-pages) <mtk.manpages@gmail.com>
Cc: Carlos O'Donell <carlos@redhat.com>
Cc: Yuriy Kolerov <Yuriy.Kolerov@synopsys.com>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
---
manual/examples/ofdlocks.c | 1 +
manual/llio.texi | 8 +++++---
sysdeps/unix/sysv/linux/bits/fcntl-linux.h | 15 +++++++++++----
3 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/manual/examples/ofdlocks.c b/manual/examples/ofdlocks.c
index ba4f0ef4d237..6df18ce5c368 100644
--- a/manual/examples/ofdlocks.c
+++ b/manual/examples/ofdlocks.c
@@ -15,6 +15,7 @@
along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
+/* Note that this must be built with -D_FILE_OFFSET_BITS=64 on 32-bit arch */
#define _GNU_SOURCE
#include <stdio.h>
#include <sys/types.h>
diff --git a/manual/llio.texi b/manual/llio.texi
index 019dea2c3189..99c700833641 100644
--- a/manual/llio.texi
+++ b/manual/llio.texi
@@ -3907,9 +3907,11 @@ descriptor.
Open file description locks use the same @code{struct flock} as
process-associated locks as an argument (@pxref{File Locks}) and the
-macros for the @code{command} values are also declared in the header file
-@file{fcntl.h}. To use them, the macro @code{_GNU_SOURCE} must be
-defined prior to including any header file.
+macros for the @code{command} values are also declared in the header
+file @file{fcntl.h}. To use them, the macro @code{_GNU_SOURCE} must be
+defined prior to including any header file. Additionally, if building on
+a 32-bit architecture, then large file offsets must also be enabled
+by defining @code{_FILE_OFFSET_BITS == 64}.
In contrast to process-associated locks, any @code{struct flock} used as
an argument to open file description lock commands must have the @code{l_pid}
diff --git a/sysdeps/unix/sysv/linux/bits/fcntl-linux.h b/sysdeps/unix/sysv/linux/bits/fcntl-linux.h
index 7e5b0aecdcb4..7f3c9fef627f 100644
--- a/sysdeps/unix/sysv/linux/bits/fcntl-linux.h
+++ b/sysdeps/unix/sysv/linux/bits/fcntl-linux.h
@@ -127,11 +127,18 @@
This means that they are inherited across fork or clone with CLONE_FILES
like BSD (flock) locks, and they are only released automatically when the
last reference to the the file description against which they were acquired
- is put. */
+ is put.
+
+ Note that the kernel does not support the legacy struct flock on 32-bit
+ arches with OFD locks. On those arches you need define both _GNU_SOURCE
+ and _FILE_OFFSET_BITS=64.
+ */
#ifdef __USE_GNU
-# define F_OFD_GETLK 36
-# define F_OFD_SETLK 37
-# define F_OFD_SETLKW 38
+# if __WORDSIZE != 32 || defined __USE_FILE_OFFSET64
+# define F_OFD_GETLK 36
+# define F_OFD_SETLK 37
+# define F_OFD_SETLKW 38
+# endif
#endif
#ifdef __USE_LARGEFILE64
--
2.7.4
next reply other threads:[~2016-08-17 14:56 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-17 14:47 Jeff Layton [this message]
2016-08-17 15:44 ` [glibc PATCH] fcntl: put F_OFD_* constants under #ifdef __USE_FILE_OFFSET64 Joseph Myers
2016-08-17 17:49 ` Jeff Layton
2016-08-17 17:56 ` Joseph Myers
2016-08-17 18:23 ` Jeff Layton
2016-08-17 16:13 ` Mike Frysinger
2016-08-17 17:34 ` Florian Weimer
2016-08-17 17:39 ` Jeff Layton
2016-08-17 18:02 ` Florian Weimer
2016-08-17 18:21 ` Jeff Layton
2016-08-17 18:51 ` Florian Weimer
2016-08-17 19:20 ` Jeff Layton
2016-08-18 8:44 ` Florian Weimer
2016-08-18 8:58 ` Andreas Schwab
2016-08-17 20:52 ` Andreas Schwab
2016-08-18 8:45 ` Florian Weimer
2016-08-17 18:43 ` Mike Frysinger
2016-08-17 19:15 ` Jeff Layton
2016-08-17 19:59 ` Michael Kerrisk (man-pages)
2016-08-17 20:05 ` Jeff Layton
2016-08-17 20:37 ` Mike Frysinger
2016-08-17 20:57 ` Jeff Layton
2016-08-17 21:35 ` Mike Frysinger
2016-08-17 21:48 ` Jeff Layton
2016-08-18 9:00 ` Florian Weimer
2016-08-23 11:03 ` Cyril Hrubis
2016-08-23 11:36 ` Jeff Layton
2016-08-23 11:38 ` Cyril Hrubis
2016-08-23 21:10 ` Michael Kerrisk (man-pages)
2016-11-14 13:45 ` Cyril Hrubis
2016-11-22 18:41 ` Florian Weimer
2016-08-18 8:57 ` Florian Weimer
2016-08-17 20:03 ` Mike Frysinger
2016-08-17 21:30 ` Cyril Hrubis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1471445251-2450-1-git-send-email-jlayton@redhat.com \
--to=jlayton@redhat.com \
--cc=Yuriy.Kolerov@synopsys.com \
--cc=carlos@redhat.com \
--cc=libc-alpha@sourceware.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=mtk.manpages@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.