Revert "rust: Add SCS sanitizer option for AArch64"

This reverts commit 8827113577.

Reason for revert: hwasan builds breaking

Change-Id: I28094e27d5935c6f371fddddf4b6b0334de9b12c
This commit is contained in:
Ivan Lozano 2023-07-31 18:01:26 +00:00 committed by Gerrit Code Review
parent 8827113577
commit 22823eed4b
3 changed files with 13 additions and 42 deletions

View file

@ -96,7 +96,7 @@ const (
Hwasan Hwasan
tsan tsan
intOverflow intOverflow
Scs scs
Fuzzer Fuzzer
Memtag_heap Memtag_heap
Memtag_stack Memtag_stack
@ -109,7 +109,7 @@ var Sanitizers = []SanitizerType{
Hwasan, Hwasan,
tsan, tsan,
intOverflow, intOverflow,
Scs, scs,
Fuzzer, Fuzzer,
Memtag_heap, Memtag_heap,
Memtag_stack, Memtag_stack,
@ -130,7 +130,7 @@ func (t SanitizerType) variationName() string {
return "intOverflow" return "intOverflow"
case cfi: case cfi:
return "cfi" return "cfi"
case Scs: case scs:
return "scs" return "scs"
case Memtag_heap: case Memtag_heap:
return "memtag_heap" return "memtag_heap"
@ -164,7 +164,7 @@ func (t SanitizerType) name() string {
return "integer_overflow" return "integer_overflow"
case cfi: case cfi:
return "cfi" return "cfi"
case Scs: case scs:
return "shadow-call-stack" return "shadow-call-stack"
case Fuzzer: case Fuzzer:
return "fuzzer" return "fuzzer"
@ -175,7 +175,7 @@ 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:
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)
@ -212,7 +212,7 @@ func (*Module) SanitizerSupported(t SanitizerType) bool {
return true return true
case cfi: case cfi:
return true return true
case Scs: case scs:
return true return true
case Fuzzer: case Fuzzer:
return true return true
@ -1012,7 +1012,7 @@ func (s *sanitize) getSanitizerBoolPtr(t SanitizerType) *bool {
return s.Properties.SanitizeMutated.Integer_overflow return s.Properties.SanitizeMutated.Integer_overflow
case cfi: case cfi:
return s.Properties.SanitizeMutated.Cfi return s.Properties.SanitizeMutated.Cfi
case Scs: case scs:
return s.Properties.SanitizeMutated.Scs return s.Properties.SanitizeMutated.Scs
case Memtag_heap: case Memtag_heap:
return s.Properties.SanitizeMutated.Memtag_heap return s.Properties.SanitizeMutated.Memtag_heap
@ -1033,7 +1033,7 @@ func (sanitize *sanitize) isUnsanitizedVariant() bool {
!sanitize.isSanitizerEnabled(Hwasan) && !sanitize.isSanitizerEnabled(Hwasan) &&
!sanitize.isSanitizerEnabled(tsan) && !sanitize.isSanitizerEnabled(tsan) &&
!sanitize.isSanitizerEnabled(cfi) && !sanitize.isSanitizerEnabled(cfi) &&
!sanitize.isSanitizerEnabled(Scs) && !sanitize.isSanitizerEnabled(scs) &&
!sanitize.isSanitizerEnabled(Memtag_heap) && !sanitize.isSanitizerEnabled(Memtag_heap) &&
!sanitize.isSanitizerEnabled(Memtag_stack) && !sanitize.isSanitizerEnabled(Memtag_stack) &&
!sanitize.isSanitizerEnabled(Memtag_globals) && !sanitize.isSanitizerEnabled(Memtag_globals) &&
@ -1070,7 +1070,7 @@ func (sanitize *sanitize) SetSanitizer(t SanitizerType, b bool) {
sanitize.Properties.SanitizeMutated.Integer_overflow = bPtr sanitize.Properties.SanitizeMutated.Integer_overflow = bPtr
case cfi: case cfi:
sanitize.Properties.SanitizeMutated.Cfi = bPtr sanitize.Properties.SanitizeMutated.Cfi = bPtr
case Scs: case scs:
sanitize.Properties.SanitizeMutated.Scs = bPtr sanitize.Properties.SanitizeMutated.Scs = bPtr
case Memtag_heap: case Memtag_heap:
sanitize.Properties.SanitizeMutated.Memtag_heap = bPtr sanitize.Properties.SanitizeMutated.Memtag_heap = bPtr
@ -1330,7 +1330,7 @@ func (s *sanitizerSplitMutator) Mutate(mctx android.BottomUpMutatorContext, vari
oneMakeVariation := false oneMakeVariation := false
if c.StaticallyLinked() || c.Header() { if c.StaticallyLinked() || c.Header() {
if s.sanitizer != cfi && s.sanitizer != Scs && s.sanitizer != Hwasan { if s.sanitizer != cfi && s.sanitizer != scs && s.sanitizer != Hwasan {
// These sanitizers export only one variation to Make. For the rest, // These sanitizers export only one variation to Make. For the rest,
// Make targets can depend on both the sanitized and non-sanitized // Make targets can depend on both the sanitized and non-sanitized
// versions. // versions.
@ -1340,7 +1340,7 @@ func (s *sanitizerSplitMutator) Mutate(mctx android.BottomUpMutatorContext, vari
// Shared library. These are the sanitizers that do propagate through shared // Shared library. These are the sanitizers that do propagate through shared
// library dependencies and therefore can cause multiple variations of a // library dependencies and therefore can cause multiple variations of a
// shared library to be built. // shared library to be built.
if s.sanitizer != cfi && s.sanitizer != Hwasan && s.sanitizer != Scs && s.sanitizer != Asan { if s.sanitizer != cfi && s.sanitizer != Hwasan && s.sanitizer != scs && s.sanitizer != Asan {
oneMakeVariation = true oneMakeVariation = true
} }
} }

View file

@ -95,7 +95,7 @@ func isSnapshotAware(cfg android.DeviceConfig, m LinkableInterface, inProprietar
if sanitizable.SanitizePropDefined() { if sanitizable.SanitizePropDefined() {
// scs exports both sanitized and unsanitized variants for static and header // scs exports both sanitized and unsanitized variants for static and header
// Always use unsanitized variant of it. // Always use unsanitized variant of it.
if !sanitizable.Shared() && sanitizable.IsSanitizerEnabled(Scs) { if !sanitizable.Shared() && sanitizable.IsSanitizerEnabled(scs) {
return false return false
} }
// cfi and hwasan also export both variants. But for static, we capture both. // cfi and hwasan also export both variants. But for static, we capture both.

View file

@ -32,7 +32,6 @@ type SanitizeProperties struct {
Sanitize struct { Sanitize struct {
Address *bool `android:"arch_variant"` Address *bool `android:"arch_variant"`
Hwaddress *bool `android:"arch_variant"` Hwaddress *bool `android:"arch_variant"`
Scs *bool `android:"arch_variant"`
// Memory-tagging, only available on arm64 // Memory-tagging, only available on arm64
// if diag.memtag unset or false, enables async memory tagging // if diag.memtag unset or false, enables async memory tagging
@ -76,9 +75,6 @@ var fuzzerFlags = []string{
var asanFlags = []string{ var asanFlags = []string{
"-Z sanitizer=address", "-Z sanitizer=address",
} }
var scsFlags = []string{
"-Z sanitizer=shadow-call-stack",
}
// See cc/sanitize.go's hwasanGlobalOptions for global hwasan options. // See cc/sanitize.go's hwasanGlobalOptions for global hwasan options.
var hwasanFlags = []string{ var hwasanFlags = []string{
@ -212,15 +208,9 @@ func (sanitize *sanitize) begin(ctx BaseModuleContext) {
s.Memtag_heap = nil s.Memtag_heap = nil
} }
// SCS is only supported on AArch64 in Rust.
// TODO: Add riscv when riscv supported.
if (ctx.Arch().ArchType != android.Arm64) || !ctx.toolchain().Bionic() {
s.Scs = nil
}
// TODO:(b/178369775) // TODO:(b/178369775)
// For now sanitizing is only supported on devices // For now sanitizing is only supported on devices
if ctx.Os() == android.Android && (Bool(s.Hwaddress) || Bool(s.Address) || Bool(s.Memtag_heap) || Bool(s.Fuzzer) || Bool(s.Scs)) { if ctx.Os() == android.Android && (Bool(s.Hwaddress) || Bool(s.Address) || Bool(s.Memtag_heap) || Bool(s.Fuzzer)) {
sanitize.Properties.SanitizerEnabled = true sanitize.Properties.SanitizerEnabled = true
} }
} }
@ -239,10 +229,7 @@ func (sanitize *sanitize) flags(ctx ModuleContext, flags Flags, deps PathDeps) (
flags.RustFlags = append(flags.RustFlags, hwasanFlags...) flags.RustFlags = append(flags.RustFlags, hwasanFlags...)
} else if Bool(sanitize.Properties.Sanitize.Address) { } else if Bool(sanitize.Properties.Sanitize.Address) {
flags.RustFlags = append(flags.RustFlags, asanFlags...) flags.RustFlags = append(flags.RustFlags, asanFlags...)
} else if Bool(sanitize.Properties.Sanitize.Scs) {
flags.RustFlags = append(flags.RustFlags, scsFlags...)
} }
return flags, deps return flags, deps
} }
@ -324,9 +311,6 @@ func (sanitize *sanitize) SetSanitizer(t cc.SanitizerType, b bool) {
case cc.Memtag_heap: case cc.Memtag_heap:
sanitize.Properties.Sanitize.Memtag_heap = boolPtr(b) sanitize.Properties.Sanitize.Memtag_heap = boolPtr(b)
sanitizerSet = true sanitizerSet = true
case cc.Scs:
sanitize.Properties.Sanitize.Scs = boolPtr(b)
sanitizerSet = true
default: default:
panic(fmt.Errorf("setting unsupported sanitizerType %d", t)) panic(fmt.Errorf("setting unsupported sanitizerType %d", t))
} }
@ -388,8 +372,6 @@ func (sanitize *sanitize) getSanitizerBoolPtr(t cc.SanitizerType) *bool {
return sanitize.Properties.Sanitize.Hwaddress return sanitize.Properties.Sanitize.Hwaddress
case cc.Memtag_heap: case cc.Memtag_heap:
return sanitize.Properties.Sanitize.Memtag_heap return sanitize.Properties.Sanitize.Memtag_heap
case cc.Scs:
return sanitize.Properties.Sanitize.Scs
default: default:
return nil return nil
} }
@ -402,10 +384,6 @@ func (sanitize *sanitize) AndroidMk(ctx AndroidMkContext, entries *android.Andro
if sanitize.isSanitizerEnabled(cc.Hwasan) { if sanitize.isSanitizerEnabled(cc.Hwasan) {
entries.SubName += ".hwasan" entries.SubName += ".hwasan"
} }
if sanitize.isSanitizerEnabled(cc.Scs) {
entries.SubName += ".scs"
}
} }
} }
@ -426,13 +404,6 @@ func (mod *Module) SanitizerSupported(t cc.SanitizerType) bool {
return true return true
case cc.Memtag_heap: case cc.Memtag_heap:
return true return true
case cc.Scs:
// SCS is only supported on AArch64 in Rust.
// TODO: Add riscv when riscv supported.
if mod.Target().Arch.ArchType == android.Arm64 {
return true
}
return false
default: default:
return false return false
} }