Merge "Make memtag_stack a variant" into main
This commit is contained in:
@@ -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,10 +684,14 @@ func (sanitize *sanitize) begin(ctx BaseModuleContext) {
|
|||||||
s.Diag.Cfi = nil
|
s.Diag.Cfi = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// HWASan ramdisk (which is built from recovery) goes over some bootloader limit.
|
if ctx.inRamdisk() || ctx.inVendorRamdisk() || ctx.inRecovery() {
|
||||||
// Keep libc instrumented so that ramdisk / vendor_ramdisk / recovery can run hwasan-instrumented code if necessary.
|
// HWASan ramdisk (which is built from recovery) goes over some bootloader limit.
|
||||||
if (ctx.inRamdisk() || ctx.inVendorRamdisk() || ctx.inRecovery()) && !strings.HasPrefix(ctx.ModuleDir(), "bionic/libc") {
|
// Keep libc instrumented so that ramdisk / vendor_ramdisk / recovery can run hwasan-instrumented code if necessary.
|
||||||
s.Hwaddress = nil
|
if !strings.HasPrefix(ctx.ModuleDir(), "bionic/libc") {
|
||||||
|
s.Hwaddress = nil
|
||||||
|
}
|
||||||
|
// Memtag stack in ramdisk makes pKVM unhappy.
|
||||||
|
s.Memtag_stack = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if ctx.staticBinary() {
|
if ctx.staticBinary() {
|
||||||
@@ -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)
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user