You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
garble/internal/linker/patches/go1.21/0003-add-entryOff-encryptio...

44 lines
1.5 KiB
Diff

From b5524a7c84a994b43027723b4bb05441db365a1e Mon Sep 17 00:00:00 2001
From: pagran <pagran@protonmail.com>
Date: Sat, 14 Jan 2023 21:36:16 +0100
Subject: [PATCH 3/3] add entryOff encryption
---
cmd/link/internal/ld/pcln.go | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/cmd/link/internal/ld/pcln.go b/cmd/link/internal/ld/pcln.go
index 8b670135de..e4ccfc9330 100644
--- a/cmd/link/internal/ld/pcln.go
+++ b/cmd/link/internal/ld/pcln.go
@@ -779,6 +779,26 @@ func writeFuncs(ctxt *Link, sb *loader.SymbolBuilder, funcs []loader.Sym, inlSym
sb.SetUint32(ctxt.Arch, dataoff, uint32(ldr.SymValue(fdsym)-gofuncBase))
}
}
+
+ // Moving next code higher is not recommended.
+ // Only at the end of the current function no edits between go versions
+ garbleEntryOffKeyStr := os.Getenv("GARBLE_LINK_ENTRYOFF_KEY")
+ if garbleEntryOffKeyStr == "" {
+ panic("[garble] entryOff key must be set")
+ }
+ var garbleEntryOffKey uint32
+ // Use fmt package instead of strconv to avoid importing a new package
+ if _, err := fmt.Sscan(garbleEntryOffKeyStr, &garbleEntryOffKey); err != nil {
+ panic(fmt.Errorf("[garble] invalid entryOff key %s: %v", garbleEntryOffKeyStr, err))
+ }
+
+ garbleData := sb.Data()
+ for _, off := range startLocations {
+ entryOff := ctxt.Arch.ByteOrder.Uint32(garbleData[off:])
+ nameOff := ctxt.Arch.ByteOrder.Uint32(garbleData[off+4:])
+
+ sb.SetUint32(ctxt.Arch, int64(off), entryOff^(nameOff*garbleEntryOffKey))
+ }
}
// pclntab initializes the pclntab symbol with
--
2.40.1