All of lore.kernel.org
 help / color / mirror / Atom feed
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


             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.