From: Danny Milosavljevic <dannym@scratchpost.org>
To: 43591@debbugs.gnu.org
Cc: Danny Milosavljevic <dannym@scratchpost.org>
Subject: [bug#43591] [PATCH core-updates] gnu: glibc-final: Catch all cases of a glibc user not requesting 64-bit offsets and then using readdir.
Date: Thu, 24 Sep 2020 16:12:11 +0200 [thread overview]
Message-ID: <20200924141211.21649-1-dannym@scratchpost.org> (raw)
* gnu/packages/commencement.scm (glibc-final): Catch all cases of a glibc user not
requesting 64-bit offsets and then using readdir.
---
gnu/packages/commencement.scm | 52 ++++++++++++++++++++++++++++++++++-
1 file changed, 51 insertions(+), 1 deletion(-)
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index e5a4caa95c..5a62c9df3a 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -3462,7 +3462,57 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
,hurd-headers-boot0)
'())
,@(package-outputs glibc-final-with-bootstrap-bash))
- ,@(package-arguments glibc-final-with-bootstrap-bash)))))
+ ,@(substitute-keyword-arguments
+ (package-arguments glibc-final-with-bootstrap-bash)
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (add-after 'unpack 'patch-dirent
+ (lambda* (#:key outputs #:allow-other-keys)
+ ;; QEMU transparent emulation is in somewhat of a pickle sometimes.
+ ;; There is no support in the kernel syscalls of specifying what
+ ;; kind of userspace you are emulating. Some parts of the
+ ;; structures passed back-and-forth between kernel and guest
+ ;; userspace can change size (including size of individual fields).
+ ;;
+ ;; One of the affected structures is "struct dirent". The ext4
+ ;; file system puts a 64 bit hash into "d_off" on the kernel side.
+ ;; If the guest system's glibc is 32 bit it is going to be very
+ ;; confused (it does check whether d_off fits into the structure
+ ;; it gives back to the user--and it doesn't fit. Hence readdir
+ ;; fails).
+ ;; This manifests itself in simple directory reads not working
+ ;; anymore in parts of cmake, for example.
+ ;;
+ ;; There is a very simple and complete way to avoid this problem:
+ ;; Just always use 64 bit offsets in user space programs (also
+ ;; on 32 bit machines).
+ ;;
+ ;; Note: We might want to avoid using 64 bit when bootstrapping
+ ;; using mescc (since mescc doesn't directly support 64 bit
+ ;; values)--but then bootstrapping has to be done on a
+ ;; file system other than ext4, or on ext4 with the feature
+ ;; "dir_index" disabled.
+ ;;
+ ;; The change below does not affect 64 bit users.
+ ;;
+ ;; See <https://issues.guix.gnu.org/43513>.
+ (let ((port (open-file "include/dirent.h" "a")))
+ (display "
+#if __SIZEOF_LONG__ < 8
+#ifndef __USE_FILE_OFFSET64
+#undef readdir
+#define readdir @READDIR_WITHOUT_FILE_OFFSET64_IS_A_REALLY_BAD_IDEA@
+#endif
+#endif
+" port)
+ (close-port port))
+ ;; This file includes <dirent.h> and thus checks sanity already.
+ ;; TODO: Check dirent/scandir-tail.c, dirent/scandir64-tail.c.
+ (substitute* "posix/glob.c"
+ (("(#[ ]*define[ ][ ]*readdir)") "
+#undef readdir
+#define readdir"))
+ #t)))))))))
(define/system-dependent gcc-boot0-wrapped
;; Make the cross-tools GCC-BOOT0 and BINUTILS-BOOT0 available under the
next reply other threads:[~2020-09-24 14:13 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-24 14:12 Danny Milosavljevic [this message]
2020-09-24 14:16 ` [bug#43591] [PATCH core-updates] gnu: glibc-final: Catch all cases of a glibc user not requesting 64-bit offsets and then using readdir Danny Milosavljevic
2020-09-24 18:17 ` Marius Bakke
2020-09-24 20:27 ` Danny Milosavljevic
2020-09-24 23:11 ` Marius Bakke
2020-09-25 10:20 ` Danny Milosavljevic
2020-09-25 10:42 ` [bug#43591] [PATCH v2 core-updates] gnu: glibc-final: Catch all cases of a glibc user not requesting 64-bit offsets and then using readdir regardless Danny Milosavljevic
2020-09-25 13:36 ` [bug#43591] [PATCH core-updates] gnu: glibc-final: Catch all cases of a glibc user not requesting 64-bit offsets and then using readdir Danny Milosavljevic
2020-09-25 15:33 ` Danny Milosavljevic
2020-09-26 1:42 ` Danny Milosavljevic
2020-09-26 1:49 ` Danny Milosavljevic
2020-09-29 14:51 ` Danny Milosavljevic
2020-09-27 6:43 ` Efraim Flashner
2020-09-25 20:03 ` Andreas Enge
2020-09-26 10:50 ` Danny Milosavljevic
2020-09-29 20:52 ` Ludovic Courtès
2020-09-29 22:09 ` Danny Milosavljevic
2020-09-30 9:32 ` Ludovic Courtès
2020-09-30 10:28 ` Danny Milosavljevic
2020-10-01 7:14 ` Ludovic Courtès
2020-10-02 7:18 ` Danny Milosavljevic
2020-10-02 8:12 ` Danny Milosavljevic
2020-10-02 9:47 ` Danny Milosavljevic
2020-10-02 9:32 ` Danny Milosavljevic
2020-10-06 15:39 ` Danny Milosavljevic
2020-09-25 10:24 ` Danny Milosavljevic
2020-09-30 8:45 ` [bug#43591] [PATCH core-updates v2 0/5] " Danny Milosavljevic
2020-09-30 8:45 ` [bug#43591] [PATCH core-updates v2 1/5] gnu: glibc-final: Catch all cases of a glibc user not requesting 64-bit offsets and then using readdir regardless Danny Milosavljevic
2020-09-30 16:55 ` Danny Milosavljevic
2020-09-30 8:45 ` [bug#43591] [PATCH core-updates v2 2/5] build-system/gnu: Explicity declare the _FILE_OFFSET_BITS we want Danny Milosavljevic
2020-09-30 8:45 ` [bug#43591] [PATCH core-updates v2 3/5] gnu: glibc: Do not explicitly set _FILE_OFFSET_BITS Danny Milosavljevic
2020-09-30 8:45 ` [bug#43591] [PATCH core-updates v2 4/5] gnu: glibc-mesboot0: " Danny Milosavljevic
2020-09-30 8:45 ` [bug#43591] [PATCH core-updates v2 5/5] gnu: rhash: Explicity declare the _FILE_OFFSET_BITS we want Danny Milosavljevic
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
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200924141211.21649-1-dannym@scratchpost.org \
--to=dannym@scratchpost.org \
--cc=43591@debbugs.gnu.org \
/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.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).