From patchwork Tue Mar 12 00:18:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chris Packham X-Patchwork-Id: 1910772 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=g5R2un/g; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TtvQT0GHpz1yWt for ; Tue, 12 Mar 2024 11:19:12 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D232D3858281 for ; Tue, 12 Mar 2024 00:19:10 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-yb1-xb30.google.com (mail-yb1-xb30.google.com [IPv6:2607:f8b0:4864:20::b30]) by sourceware.org (Postfix) with ESMTPS id AFE89385841E for ; Tue, 12 Mar 2024 00:18:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AFE89385841E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org AFE89385841E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::b30 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710202698; cv=none; b=Wxm3JhwyOLz3tmBJzcVPnHMZsXMmO7lcl+p1It6hzDepusm19Bqi/9TcTM/wsGYwEFdsNxVOGIatGEZ6afSyYv/L/h0BkMNb63eMtsMexmCyuloyV3QS+XvUgthnWC3dZywMZqTdhvpUl+UCNVhj5jwyl25rJgpQojWopP+s+xk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710202698; c=relaxed/simple; bh=aGR7X6MWw3SLgqjeoFEGYfGUxL6IqZt02N1HOkxFWKM=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=LPsg3t6NQBRzXlIdpw/JhgzIvuCq4UgOuk6rDDG74BB0lHxftFAR3lOPD9KO4rc9xXqKPpeA0jHcs2XJYJmoNcbiRqopUSnCWIojNR6b/6guuBdKtfhIqMURsIJvXibtDXqv8G7Mq59S2tvDCWx9Z9OuUKMTPjSs9shnOxi9TRE= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-yb1-xb30.google.com with SMTP id 3f1490d57ef6-dcbc6a6808fso4870250276.2 for ; Mon, 11 Mar 2024 17:18:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710202692; x=1710807492; darn=gcc.gnu.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=9EW62x/8MCmwWTmfGeQGaAd1VIkoVnqWZkaAftfSeQo=; b=g5R2un/gXa9TxMXCfhgg+S+zJo44Gd3/wTF0hj2LTFdJw7tkPessWnlQQet6nGud0u dm6a8Zt9fQY8sWhrmoCRayCHEP8Hvn7kDMm9NocZpc0d/hI5cB/lTcMIiMKJ5xaz6Hlu NpxjqaFcqj3UhHP7uz4f/DNvNDB9XY1GPi9DeeULSbfvoVDQ6aURTz9XS+1e3l9vTWkZ 4hEbKjflnAuOc9AdHTH6Nx93c6HJoXtNkUUScamzfl/pcQSxvoOd6tkCYV/nj0pKiKQw SOrWPpgJ6Or5AGWPkC2qDLpwj/d2sy9NyG5YNVeLvgaGIo6VlJ/RcUsh+DZLPHu/KxZD D2RQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710202692; x=1710807492; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=9EW62x/8MCmwWTmfGeQGaAd1VIkoVnqWZkaAftfSeQo=; b=oFJCxUnmqfIhtQRw+saYqgSHFiBNaJOzsXOignXEysE9fDE/WTWsfyMDWn8CNUkK9q 4P7PlDK6jUSLhO9KGwW/oHpiizvmekAFnDdUFosvDRSXnJewOzjwEX1AlEp7/sCbIyJe mt72h8i7MRkQjB5F1F59Auj7Yym/cMuyG77NlnHaHSYtKJGqE3S7HqO+jt5lc7iIW1Ec YMEZxz+p7G7k3AxkVBlPgSaxZEvNWmJtXUfG8CSdDk1XtyKocVjS0wDbfCKJvxBoKUCf uBqYo3431Whehfss5SAsrBbSoXfybYmXpEHyAdA3VjH+gR89lMe05AmzyGeYoLTknX4K na8A== X-Gm-Message-State: AOJu0YzTmXmqiCEslVaXjpljjefO+OSTacG1B0XULu3eI7VpX5cQCjj0 18FbgoEZkEe4A5FYvH4HluNay6QPn76gDAqc91T0jjwugoAt4pkUQJTRekLMS5gpzh+Q2cT0+J4 Ro75B7sF3nnH1tXOSmXCIYBqQf8efjxidDDePJw== X-Google-Smtp-Source: AGHT+IGaGVKPseBgQHm3Vst4l7alywM68KGOSqODhAleQVsI16iEBeLi45VCv8DHrYxWnrq8f2OvFsIeSbdHFb24Fgw= X-Received: by 2002:a5b:ac1:0:b0:dca:a3e8:a25a with SMTP id a1-20020a5b0ac1000000b00dcaa3e8a25amr5506256ybr.62.1710202691906; Mon, 11 Mar 2024 17:18:11 -0700 (PDT) MIME-Version: 1.0 From: Chris Packham Date: Tue, 12 Mar 2024 13:18:01 +1300 Message-ID: Subject: [11/12/13 only] build error: libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp:180:10: fatal error: crypt.h: No such file or directory To: gcc-patches@gcc.gnu.org X-Spam-Status: No, score=-6.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Hi from crosstool-ng, I've had a user report a build error for GCC 13.2.0 with and aarch64 config with libsanitizer enabled (https://github.com/crosstool-ng/crosstool-ng/issues/2010). [ERROR] /home/ctng/crosstool-ng/.build/aarch64-unknown-linux-gnu/src/gcc/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp:180:10: fatal error: crypt.h: No such file or directory [ALL ] 180 | #include [ALL ] | ^~~~~~~~~ [ALL ] compilation terminated. [ERROR] make[5]: *** [Makefile:614: sanitizer_platform_limits_posix.lo] Error 1 [ERROR] make[5]: *** Waiting for unfinished jobs.... It looks like this may have already been fixed in master by commit d96e14ceb947 ("libsanitizer: merge from upstream (87e6e490e79384a5)"). Attached is a mimal backport from upstream libsanitizer. I posted it to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111057 but it was pointed out that I should send it to gcc-patches if I want it actually applied. Thanks, Chris From 9b116160a1482c5c0c199f9c21d78a527d11d9ea Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Fri, 28 Apr 2023 09:59:17 -0700 Subject: [PATCH] Remove crypt and crypt_r interceptors From Florian Weimer's D144073 > On GNU/Linux (glibc), the crypt and crypt_r functions are not part of the main shared object (libc.so.6), but libcrypt (with multiple possible sonames). The sanitizer libraries do not depend on libcrypt, so it can happen that during sanitizer library initialization, no real implementation will be found because the crypt, crypt_r functions are not present in the process image (yet). If its interceptors are called nevertheless, this results in a call through a null pointer when the sanitizer library attempts to forward the call to the real implementation. > > Many distributions have already switched to libxcrypt, a library that is separate from glibc and that can be build with sanitizers directly (avoiding the need for interceptors). This patch disables building the interceptor for glibc targets. Let's remove crypt and crypt_r interceptors (D68431) to fix issues with newer glibc. For older glibc, msan will not know that an uninstrumented crypt_r call initializes `data`, so there is a risk for false positives. However, with some codebase survey, I think crypt_r uses are very few and the call sites typically have a `memset(&data, 0, sizeof(data));` anyway. Fix https://github.com/google/sanitizers/issues/1365 Related: https://bugzilla.redhat.com/show_bug.cgi?id=2169432 Reviewed By: #sanitizers, fweimer, thesamesam, vitalybuka Differential Revision: https://reviews.llvm.org/D149403 --- .../sanitizer_common_interceptors.inc | 37 ------------------- .../sanitizer_platform_interceptors.h | 2 - .../sanitizer_platform_limits_posix.cpp | 8 ---- .../sanitizer_platform_limits_posix.h | 1 - 4 files changed, 48 deletions(-) diff --git a/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc b/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc index ba4b80081f0f..662c41997422 100644 --- a/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc +++ b/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc @@ -10187,41 +10187,6 @@ INTERCEPTOR(SSIZE_T, getrandom, void *buf, SIZE_T buflen, unsigned int flags) { #define INIT_GETRANDOM #endif -#if SANITIZER_INTERCEPT_CRYPT -INTERCEPTOR(char *, crypt, char *key, char *salt) { - void *ctx; - COMMON_INTERCEPTOR_ENTER(ctx, crypt, key, salt); - COMMON_INTERCEPTOR_READ_RANGE(ctx, key, internal_strlen(key) + 1); - COMMON_INTERCEPTOR_READ_RANGE(ctx, salt, internal_strlen(salt) + 1); - char *res = REAL(crypt)(key, salt); - if (res != nullptr) - COMMON_INTERCEPTOR_INITIALIZE_RANGE(res, internal_strlen(res) + 1); - return res; -} -#define INIT_CRYPT COMMON_INTERCEPT_FUNCTION(crypt); -#else -#define INIT_CRYPT -#endif - -#if SANITIZER_INTERCEPT_CRYPT_R -INTERCEPTOR(char *, crypt_r, char *key, char *salt, void *data) { - void *ctx; - COMMON_INTERCEPTOR_ENTER(ctx, crypt_r, key, salt, data); - COMMON_INTERCEPTOR_READ_RANGE(ctx, key, internal_strlen(key) + 1); - COMMON_INTERCEPTOR_READ_RANGE(ctx, salt, internal_strlen(salt) + 1); - char *res = REAL(crypt_r)(key, salt, data); - if (res != nullptr) { - COMMON_INTERCEPTOR_WRITE_RANGE(ctx, data, - __sanitizer::struct_crypt_data_sz); - COMMON_INTERCEPTOR_INITIALIZE_RANGE(res, internal_strlen(res) + 1); - } - return res; -} -#define INIT_CRYPT_R COMMON_INTERCEPT_FUNCTION(crypt_r); -#else -#define INIT_CRYPT_R -#endif - #if SANITIZER_INTERCEPT_GETENTROPY INTERCEPTOR(int, getentropy, void *buf, SIZE_T buflen) { void *ctx; @@ -10772,8 +10737,6 @@ static void InitializeCommonInterceptors() { INIT_GETUSERSHELL; INIT_SL_INIT; INIT_GETRANDOM; - INIT_CRYPT; - INIT_CRYPT_R; INIT_GETENTROPY; INIT_QSORT; INIT_QSORT_R; diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_interceptors.h b/libsanitizer/sanitizer_common/sanitizer_platform_interceptors.h index 8307b1ec28bf..d50166ee6ce0 100644 --- a/libsanitizer/sanitizer_common/sanitizer_platform_interceptors.h +++ b/libsanitizer/sanitizer_common/sanitizer_platform_interceptors.h @@ -571,8 +571,6 @@ #define SANITIZER_INTERCEPT_FDEVNAME SI_FREEBSD #define SANITIZER_INTERCEPT_GETUSERSHELL (SI_POSIX && !SI_ANDROID) #define SANITIZER_INTERCEPT_SL_INIT (SI_FREEBSD || SI_NETBSD) -#define SANITIZER_INTERCEPT_CRYPT (SI_POSIX && !SI_ANDROID) -#define SANITIZER_INTERCEPT_CRYPT_R (SI_LINUX && !SI_ANDROID) #define SANITIZER_INTERCEPT_GETRANDOM \ ((SI_LINUX && __GLIBC_PREREQ(2, 25)) || SI_FREEBSD) diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp index c85cf1626a75..bcbd143d19de 100644 --- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp @@ -176,10 +176,6 @@ typedef struct user_fpregs elf_fpregset_t; # include "sanitizer_platform_interceptors.h" # include "sanitizer_platform_limits_posix.h" -#if SANITIZER_INTERCEPT_CRYPT_R -#include -#endif - namespace __sanitizer { unsigned struct_utsname_sz = sizeof(struct utsname); unsigned struct_stat_sz = sizeof(struct stat); @@ -283,10 +279,6 @@ namespace __sanitizer { unsigned struct_statvfs64_sz = sizeof(struct statvfs64); #endif // SANITIZER_LINUX && !SANITIZER_ANDROID -#if SANITIZER_INTERCEPT_CRYPT_R - unsigned struct_crypt_data_sz = sizeof(struct crypt_data); -#endif - #if SANITIZER_LINUX && !SANITIZER_ANDROID unsigned struct_timex_sz = sizeof(struct timex); unsigned struct_msqid_ds_sz = sizeof(struct msqid_ds); diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h index 44dd3d9e22d1..29ebb304a9ba 100644 --- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h +++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h @@ -319,7 +319,6 @@ extern unsigned struct_msqid_ds_sz; extern unsigned struct_mq_attr_sz; extern unsigned struct_timex_sz; extern unsigned struct_statvfs_sz; -extern unsigned struct_crypt_data_sz; #endif // SANITIZER_LINUX && !SANITIZER_ANDROID struct __sanitizer_iovec { -- 2.41.0