Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c1fecc2d authored by Ivan Lozano's avatar Ivan Lozano Committed by Gerrit Code Review
Browse files

Merge "Support enabling overflow sanitization by path."

parents d40471c7 17df3c1b
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -712,6 +712,13 @@ func (c *config) CFIDisabledForPath(path string) bool {
	return PrefixInList(path, *c.ProductVariables.CFIExcludePaths)
}

func (c *config) IntegerOverflowEnabledForPath(path string) bool {
	if c.ProductVariables.IntegerOverflowIncludePaths == nil {
		return false
	}
	return PrefixInList(path, *c.ProductVariables.IntegerOverflowIncludePaths)
}

func (c *config) CFIEnabledForPath(path string) bool {
	if c.ProductVariables.CFIIncludePaths == nil {
		return false
+1 −0
Original line number Diff line number Diff line
@@ -167,6 +167,7 @@ type productVariables struct {
	MinimizeJavaDebugInfo      *bool `json:",omitempty"`

	IntegerOverflowExcludePaths *[]string `json:",omitempty"`
	IntegerOverflowIncludePaths *[]string `json:",omitempty"`

	EnableCFI       *bool     `json:",omitempty"`
	CFIExcludePaths *[]string `json:",omitempty"`
+21 −1
Original line number Diff line number Diff line
@@ -232,6 +232,14 @@ func (sanitize *sanitize) begin(ctx BaseModuleContext) {
		}
	}

	// Enable Integer Overflow for all components in the include paths
	if !ctx.Host() && ctx.Config().IntegerOverflowEnabledForPath(ctx.ModuleDir()) && s.Integer_overflow == nil {
		s.Integer_overflow = boolPtr(true)
		if inList("integer_overflow", ctx.Config().SanitizeDeviceDiag()) {
			s.Diag.Integer_overflow = boolPtr(true)
		}
	}

	// CFI needs gold linker, and mips toolchain does not have one.
	if !ctx.Config().EnableCFI() || ctx.Arch().ArchType == android.Mips || ctx.Arch().ArchType == android.Mips64 {
		s.Cfi = nil
@@ -417,6 +425,7 @@ func (sanitize *sanitize) flags(ctx ModuleContext, flags Flags) Flags {
			sanitizers = append(sanitizers, "unsigned-integer-overflow")
			sanitizers = append(sanitizers, "signed-integer-overflow")
			flags.CFlags = append(flags.CFlags, intOverflowCflags...)

			if Bool(sanitize.Properties.Sanitize.Diag.Integer_overflow) {
				diagSanitizers = append(diagSanitizers, "unsigned-integer-overflow")
				diagSanitizers = append(diagSanitizers, "signed-integer-overflow")
@@ -424,6 +433,8 @@ func (sanitize *sanitize) flags(ctx ModuleContext, flags Flags) Flags {
		}
	}

	diagSanitizeArgs := "-fno-sanitize-trap=" + strings.Join(diagSanitizers, ",")

	if len(sanitizers) > 0 {
		sanitizeArg := "-fsanitize=" + strings.Join(sanitizers, ",")
		flags.CFlags = append(flags.CFlags, sanitizeArg)
@@ -436,10 +447,19 @@ func (sanitize *sanitize) flags(ctx ModuleContext, flags Flags) Flags {
		} else {
			flags.CFlags = append(flags.CFlags, "-fsanitize-trap=all", "-ftrap-function=abort")
		}

		// Specific settings for userdebug and eng builds
		if Bool(ctx.Config().ProductVariables.Debuggable) {
			// TODO(ivanlozano): uncomment after switch to clang-4536805.
			// Run integer overflow sanitizers with the minimal runtime diagnostics.
			if strings.Contains(sanitizeArg, "integer") && !strings.Contains(diagSanitizeArgs, "integer") && !Bool(sanitize.Properties.Sanitize.Address) {
				//flags.CFlags = append(flags.CFlags, "-fsanitize-minimal-runtime")
			}
		}
	}

	if len(diagSanitizers) > 0 {
		flags.CFlags = append(flags.CFlags, "-fno-sanitize-trap="+strings.Join(diagSanitizers, ","))
		flags.CFlags = append(flags.CFlags, diagSanitizeArgs)
	}
	// FIXME: enable RTTI if diag + (cfi or vptr)