src/cmd/go/internal/work/exec.go | 8 ++++++++ src/cmd/go/internal/work/security.go | 1 + diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go index 63fd13f7544db3ed9f3bf3b89956f69d9a5878f5..9d4429a51c2cb7aa8f890b5281a65ab6b8088b8a 100644 --- a/src/cmd/go/internal/work/exec.go +++ b/src/cmd/go/internal/work/exec.go @@ -1636,6 +1636,14 @@ if !load.SafeArg(pkg) { return nil, nil, fmt.Errorf("invalid pkg-config package name: %s", pkg) } } + + // Running 'pkg-config' can cause execution of + // arbitrary code using flags that are not in + // the safelist. + if err := checkCompilerFlags("CFLAGS", "pkg-config --cflags", pcflags); err != nil { + return nil, nil, err + } + var out []byte out, err = sh.runOut(p.Dir, nil, b.PkgconfigCmd(), "--cflags", pcflags, "--", pkgs) if err != nil { diff --git a/src/cmd/go/internal/work/security.go b/src/cmd/go/internal/work/security.go index 3b3eba536cb146091082e053df9fad49c4bf917e..68d2706051b08bc9654315cfc5d320e8aac2e6b0 100644 --- a/src/cmd/go/internal/work/security.go +++ b/src/cmd/go/internal/work/security.go @@ -130,6 +130,7 @@ re(`--param=ssp-buffer-size=[0-9]*`), re(`-pedantic(-errors)?`), re(`-pipe`), re(`-pthread`), + re(`--static`), re(`-?-std=([^@\-].*)`), re(`-?-stdlib=([^@\-].*)`), re(`--sysroot=([^@\-].*)`),