From a5708231ac8ae2a6f8806d2da502608d48bb3d84 Mon Sep 17 00:00:00 2001 From: Roland Shoemaker Date: Fri, 30 Aug 2024 21:11:09 -0700 Subject: [PATCH] crypto/internal/boring: disable LFS64 interfaces Comment out the definition in the libcrypto I/O code which enables the LFS64 interfaces. We don't use any of the I/O bits and pieces, and it's outside of the FIPS module, and it fixes some breakage in certain scenarios. Change-Id: Ie6597813726f94e23780b77d907cc1b9ccef36f0 Reviewed-on: https://go-review.googlesource.com/c/go/+/609976 LUCI-TryBot-Result: Go LUCI Reviewed-by: Russ Cox --- src/crypto/internal/boring/build-boring.sh | 9 +++++++++ .../syso/goboringcrypto_linux_amd64.syso | Bin 2429120 -> 2429120 bytes .../syso/goboringcrypto_linux_arm64.syso | Bin 2107832 -> 2107832 bytes 3 files changed, 9 insertions(+) diff --git a/src/crypto/internal/boring/build-boring.sh b/src/crypto/internal/boring/build-boring.sh index 5e109653a4..c7dc4f37ad 100755 --- a/src/crypto/internal/boring/build-boring.sh +++ b/src/crypto/internal/boring/build-boring.sh @@ -30,6 +30,15 @@ export CGO_ENABLED=0 # Go toolchain / clang toolchain combinations. perl -p -i -e 's/defined.*ELF.*defined.*GNUC.*/$0 \&\& !defined(GOBORING)/' boringssl/crypto/mem.c +# We build all of libcrypto, which includes a bunch of I/O operations that we +# don't actually care about, since we only really want the BoringCrypto module. +# In libcrypto, they use the LFS64 interfaces where available in order to +# traverse files larger than 2GB. In some scenarios this can cause breakage, so +# we comment out the _FILE_OFFSET_BITS definition which enables the LFS64 +# interfaces. Since this code is outside of the FIPS module, it doesn't affect +# the certification status of the module. See b/364606941 for additional context. +perl -p -i -e 's/(#define _FILE_OFFSET_BITS 64)/\/\/ $1/' boringssl/crypto/bio/file.c + # Verbatim instructions from BoringCrypto build docs. printf "set(CMAKE_C_COMPILER \"clang\")\nset(CMAKE_CXX_COMPILER \"clang++\")\n" >${HOME}/toolchain cd boringssl diff --git a/src/crypto/internal/boring/syso/goboringcrypto_linux_amd64.syso b/src/crypto/internal/boring/syso/goboringcrypto_linux_amd64.syso index 5ba8919dc14a6b0f78b64c4dc2b850997aeae77a..6d0aeb8335590923ed90cf37c83d039d591f5a42 100644 GIT binary patch delta 5661 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 delta 5742 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 X&)#6Zfd}*Re*b{--}Lp{Zr=3&HgO;C delta 5643 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 c;n|WZtJ1zNkSyVW