aboutsummaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
authorDaniel Morsing <daniel.morsing@gmail.com>2025-11-24 13:08:10 +0000
committerGopher Robot <gobot@golang.org>2025-11-26 14:26:06 -0800
commit86bbea0cfa72041fb4315eb22099b0bc83caa314 (patch)
tree3c3a008214e4a9d929a2d8f76f98fe1cf2f323d2 /src/runtime
parente2cae9ecdf944a1cc5d8803ff8932180858b8ce6 (diff)
downloadgo-86bbea0cfa72041fb4315eb22099b0bc83caa314.tar.xz
crypto/fips140: add WithoutEnforcement
WithoutEnforcement lets programs running under GODEBUG=fips140=only selectively opt out of strict enforcement. This is especially helpful for non-critical uses of cryptography routines like SHA-1 for content addressable storage backends (E.g. git). Fixes #74630 Change-Id: Iabba1f5eb63498db98047aca45e09c5dccf2fbdf Reviewed-on: https://go-review.googlesource.com/c/go/+/723720 Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Filippo Valsorda <filippo@golang.org> Auto-Submit: Filippo Valsorda <filippo@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Roland Shoemaker <roland@golang.org>
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/fipsbypass.go22
-rw-r--r--src/runtime/proc.go4
-rw-r--r--src/runtime/runtime2.go1
3 files changed, 27 insertions, 0 deletions
diff --git a/src/runtime/fipsbypass.go b/src/runtime/fipsbypass.go
new file mode 100644
index 0000000000..12df9c6b6a
--- /dev/null
+++ b/src/runtime/fipsbypass.go
@@ -0,0 +1,22 @@
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package runtime
+
+import _ "unsafe"
+
+//go:linkname fips140_setBypass crypto/fips140.setBypass
+func fips140_setBypass() {
+ getg().fipsOnlyBypass = true
+}
+
+//go:linkname fips140_unsetBypass crypto/fips140.unsetBypass
+func fips140_unsetBypass() {
+ getg().fipsOnlyBypass = false
+}
+
+//go:linkname fips140_isBypassed crypto/fips140.isBypassed
+func fips140_isBypassed() bool {
+ return getg().fipsOnlyBypass
+}
diff --git a/src/runtime/proc.go b/src/runtime/proc.go
index 58fb4bd681..3b98be1074 100644
--- a/src/runtime/proc.go
+++ b/src/runtime/proc.go
@@ -4481,6 +4481,7 @@ func gdestroy(gp *g) {
gp.labels = nil
gp.timer = nil
gp.bubble = nil
+ gp.fipsOnlyBypass = false
if gcBlackenEnabled != 0 && gp.gcAssistBytes > 0 {
// Flush assist credit to the global pool. This gives
@@ -5325,6 +5326,9 @@ func newproc1(fn *funcval, callergp *g, callerpc uintptr, parked bool, waitreaso
traceRelease(trace)
}
+ // fips140 bubble
+ newg.fipsOnlyBypass = callergp.fipsOnlyBypass
+
// Set up race context.
if raceenabled {
newg.racectx = racegostart(callerpc)
diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go
index 3175ee55f5..58eaf80237 100644
--- a/src/runtime/runtime2.go
+++ b/src/runtime/runtime2.go
@@ -545,6 +545,7 @@ type g struct {
runnableTime int64 // the amount of time spent runnable, cleared when running, only used when tracking
lockedm muintptr
fipsIndicator uint8
+ fipsOnlyBypass bool
syncSafePoint bool // set if g is stopped at a synchronous safe point.
runningCleanups atomic.Bool
sig uint32