From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id oGhrBPtFdF8vSAAA0tVLHw (envelope-from ) for ; Wed, 30 Sep 2020 08:46:51 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id l+Q1APtFdF8hdAAAbx9fmQ (envelope-from ) for ; Wed, 30 Sep 2020 08:46:51 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id CCF0F9401D0 for ; Wed, 30 Sep 2020 08:46:50 +0000 (UTC) Received: from localhost ([::1]:34892 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kNXlB-0005DM-QV for larch@yhetil.org; Wed, 30 Sep 2020 04:46:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53180) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kNXkQ-0005AN-Ud for guix-patches@gnu.org; Wed, 30 Sep 2020 04:46:02 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:46542) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kNXkQ-0008EN-Kc for guix-patches@gnu.org; Wed, 30 Sep 2020 04:46:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1kNXkQ-0005GQ-Ic for guix-patches@gnu.org; Wed, 30 Sep 2020 04:46:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#43591] [PATCH core-updates v2 0/5] gnu: glibc-final: Catch all cases of a glibc user not requesting 64-bit offsets and then using readdir. Resent-From: Danny Milosavljevic Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Wed, 30 Sep 2020 08:46:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 43591 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 43591@debbugs.gnu.org Cc: Danny Milosavljevic Received: via spool by 43591-submit@debbugs.gnu.org id=B43591.160145556020190 (code B ref 43591); Wed, 30 Sep 2020 08:46:02 +0000 Received: (at 43591) by debbugs.gnu.org; 30 Sep 2020 08:46:00 +0000 Received: from localhost ([127.0.0.1]:58079 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kNXkN-0005FT-Rk for submit@debbugs.gnu.org; Wed, 30 Sep 2020 04:46:00 -0400 Received: from dd26836.kasserver.com ([85.13.145.193]:33114) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kNXkL-0005Ek-Ak for 43591@debbugs.gnu.org; Wed, 30 Sep 2020 04:45:58 -0400 Received: from dayas.lan (80-110-126-103.cgn.dynamic.surfer.at [80.110.126.103]) by dd26836.kasserver.com (Postfix) with ESMTPSA id ADC283362C2B; Wed, 30 Sep 2020 10:45:55 +0200 (CEST) From: Danny Milosavljevic Date: Wed, 30 Sep 2020 10:45:07 +0200 Message-Id: <20200930084512.31738-1-dannym@scratchpost.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200924141211.21649-1-dannym@scratchpost.org> References: <20200924141211.21649-1-dannym@scratchpost.org> MIME-Version: 1.0 Tags: patch Content-Transfer-Encoding: 8bit X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-Spam-Score: -1.7 (-) X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Spam-Score: 3.99 X-TUID: e/R0nChV1Uyj Linux kernel file offsets are always 64 bits. But userspace can be built to use 32 bit offsets. "struct dirent", returned by readdir, uses d_off to store such an "offset" that it got from the Linux kernel. In the case of ext4 that "offset" is actually a 64 bit hash value. Therefore, there are cases where such an offset that it got from the Linux kernel does not fit in the "struct dirent" field "d_off". If the guest system's glibc is 32 bit AND uses 32 bit file offsets 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, with errno == EOVERFLOW (which is undocumented and thus an API error). This manifests itself in simple directory reads not working anymore in parts of cmake, for example. This happened in Guix when building stuff for ARMHF on a x86_64 build host using QEMU transparent emulation. 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). Danny Milosavljevic (5): gnu: glibc-final: Catch all cases of a glibc user not requesting 64-bit offsets and then using readdir regardless. build-system/gnu: Explicity declare the _FILE_OFFSET_BITS we want. gnu: glibc: Do not explicitly set _FILE_OFFSET_BITS. gnu: glibc-mesboot0: Do not explicitly set _FILE_OFFSET_BITS. gnu: rhash: Explicity declare the _FILE_OFFSET_BITS we want. gnu/packages/base.scm | 2 + gnu/packages/commencement.scm | 70 ++++++++++++++++++++++++++++++++- gnu/packages/crypto.scm | 9 ++++- guix/build/gnu-build-system.scm | 13 +++++- 4 files changed, 90 insertions(+), 4 deletions(-)