diff --git a/android/config.go b/android/config.go index 1a3b53978..01c39f09a 100644 --- a/android/config.go +++ b/android/config.go @@ -1662,11 +1662,18 @@ func (c *config) MemtagHeapSyncEnabledForPath(path string) bool { return HasAnyPrefix(path, c.productVariables.MemtagHeapSyncIncludePaths) && !c.MemtagHeapDisabledForPath(path) } +func (c *config) HWASanDisabledForPath(path string) bool { + if len(c.productVariables.HWASanExcludePaths) == 0 { + return false + } + return HasAnyPrefix(path, c.productVariables.HWASanExcludePaths) +} + func (c *config) HWASanEnabledForPath(path string) bool { if len(c.productVariables.HWASanIncludePaths) == 0 { return false } - return HasAnyPrefix(path, c.productVariables.HWASanIncludePaths) + return HasAnyPrefix(path, c.productVariables.HWASanIncludePaths) && !c.HWASanDisabledForPath(path) } func (c *config) VendorConfig(name string) VendorConfig { diff --git a/android/variable.go b/android/variable.go index 89ac91539..02eff25f9 100644 --- a/android/variable.go +++ b/android/variable.go @@ -315,6 +315,7 @@ type ProductVariables struct { MemtagHeapSyncIncludePaths []string `json:",omitempty"` HWASanIncludePaths []string `json:",omitempty"` + HWASanExcludePaths []string `json:",omitempty"` VendorPath *string `json:",omitempty"` OdmPath *string `json:",omitempty"` diff --git a/cc/sanitize.go b/cc/sanitize.go index f37b5c7ad..0abdafc32 100644 --- a/cc/sanitize.go +++ b/cc/sanitize.go @@ -553,7 +553,9 @@ func (sanitize *sanitize) begin(ctx BaseModuleContext) { } if found, globalSanitizers = removeFromList("hwaddress", globalSanitizers); found && s.Hwaddress == nil { - s.Hwaddress = proptools.BoolPtr(true) + if !ctx.Config().HWASanDisabledForPath(ctx.ModuleDir()) { + s.Hwaddress = proptools.BoolPtr(true) + } } if found, globalSanitizers = removeFromList("writeonly", globalSanitizers); found && s.Writeonly == nil {