Merge "Make memtag_stack a variant" into main

This commit is contained in:
Florian Mayer
2024-05-03 00:20:37 +00:00
committed by Gerrit Code Review

View File

@@ -176,11 +176,11 @@ func (t SanitizerType) name() string {
func (t SanitizerType) registerMutators(ctx android.RegisterMutatorsContext) { func (t SanitizerType) registerMutators(ctx android.RegisterMutatorsContext) {
switch t { switch t {
case cfi, Hwasan, Asan, tsan, Fuzzer, scs: case cfi, Hwasan, Asan, tsan, Fuzzer, scs, Memtag_stack:
sanitizer := &sanitizerSplitMutator{t} sanitizer := &sanitizerSplitMutator{t}
ctx.TopDown(t.variationName()+"_markapexes", sanitizer.markSanitizableApexesMutator) ctx.TopDown(t.variationName()+"_markapexes", sanitizer.markSanitizableApexesMutator)
ctx.Transition(t.variationName(), sanitizer) ctx.Transition(t.variationName(), sanitizer)
case Memtag_heap, Memtag_stack, Memtag_globals, intOverflow: case Memtag_heap, Memtag_globals, intOverflow:
// do nothing // do nothing
default: default:
panic(fmt.Errorf("unknown SanitizerType %d", t)) panic(fmt.Errorf("unknown SanitizerType %d", t))
@@ -407,6 +407,7 @@ func init() {
android.RegisterMakeVarsProvider(pctx, cfiMakeVarsProvider) android.RegisterMakeVarsProvider(pctx, cfiMakeVarsProvider)
android.RegisterMakeVarsProvider(pctx, hwasanMakeVarsProvider) android.RegisterMakeVarsProvider(pctx, hwasanMakeVarsProvider)
android.RegisterMakeVarsProvider(pctx, memtagStackMakeVarsProvider)
} }
func (sanitize *sanitize) props() []interface{} { func (sanitize *sanitize) props() []interface{} {
@@ -683,11 +684,15 @@ func (sanitize *sanitize) begin(ctx BaseModuleContext) {
s.Diag.Cfi = nil s.Diag.Cfi = nil
} }
if ctx.inRamdisk() || ctx.inVendorRamdisk() || ctx.inRecovery() {
// HWASan ramdisk (which is built from recovery) goes over some bootloader limit. // HWASan ramdisk (which is built from recovery) goes over some bootloader limit.
// Keep libc instrumented so that ramdisk / vendor_ramdisk / recovery can run hwasan-instrumented code if necessary. // Keep libc instrumented so that ramdisk / vendor_ramdisk / recovery can run hwasan-instrumented code if necessary.
if (ctx.inRamdisk() || ctx.inVendorRamdisk() || ctx.inRecovery()) && !strings.HasPrefix(ctx.ModuleDir(), "bionic/libc") { if !strings.HasPrefix(ctx.ModuleDir(), "bionic/libc") {
s.Hwaddress = nil s.Hwaddress = nil
} }
// Memtag stack in ramdisk makes pKVM unhappy.
s.Memtag_stack = nil
}
if ctx.staticBinary() { if ctx.staticBinary() {
s.Address = nil s.Address = nil
@@ -1310,6 +1315,8 @@ func (s *sanitizerSplitMutator) Mutate(mctx android.BottomUpMutatorContext, vari
hwasanStaticLibs(mctx.Config()).add(c, c.Module().Name()) hwasanStaticLibs(mctx.Config()).add(c, c.Module().Name())
} else if s.sanitizer == cfi { } else if s.sanitizer == cfi {
cfiStaticLibs(mctx.Config()).add(c, c.Module().Name()) cfiStaticLibs(mctx.Config()).add(c, c.Module().Name())
} else if s.sanitizer == Memtag_stack {
memtagStackStaticLibs(mctx.Config()).add(c, c.Module().Name());
} }
} }
} else if c.IsSanitizerEnabled(s.sanitizer) { } else if c.IsSanitizerEnabled(s.sanitizer) {
@@ -1722,6 +1729,14 @@ func hwasanStaticLibs(config android.Config) *sanitizerStaticLibsMap {
}).(*sanitizerStaticLibsMap) }).(*sanitizerStaticLibsMap)
} }
var memtagStackStaticLibsKey = android.NewOnceKey("memtagStackStaticLibs")
func memtagStackStaticLibs(config android.Config) *sanitizerStaticLibsMap {
return config.Once(memtagStackStaticLibsKey, func() interface{} {
return newSanitizerStaticLibsMap(Memtag_stack)
}).(*sanitizerStaticLibsMap)
}
func enableMinimalRuntime(sanitize *sanitize) bool { func enableMinimalRuntime(sanitize *sanitize) bool {
if sanitize.isSanitizerEnabled(Asan) { if sanitize.isSanitizerEnabled(Asan) {
return false return false
@@ -1768,3 +1783,7 @@ func cfiMakeVarsProvider(ctx android.MakeVarsContext) {
func hwasanMakeVarsProvider(ctx android.MakeVarsContext) { func hwasanMakeVarsProvider(ctx android.MakeVarsContext) {
hwasanStaticLibs(ctx.Config()).exportToMake(ctx) hwasanStaticLibs(ctx.Config()).exportToMake(ctx)
} }
func memtagStackMakeVarsProvider(ctx android.MakeVarsContext) {
memtagStackStaticLibs(ctx.Config()).exportToMake(ctx)
}