Skip to content

Commit cc6e568

Browse files
cmd/go: accept more safe CFLAGS/LDFLAGS
Fixes #23749 Fixes #24703 Fixes #24858 Change-Id: Ib32d8efee294004c70fdd602087df2da0867f099 Reviewed-on: https://go-review.googlesource.com/115415 Run-TryBot: Ian Lance Taylor <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: Brad Fitzpatrick <[email protected]>
1 parent 999e230 commit cc6e568

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

src/cmd/go/internal/work/security.go

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,43 +41,57 @@ var re = regexp.MustCompile
4141

4242
var validCompilerFlags = []*regexp.Regexp{
4343
re(`-D([A-Za-z_].*)`),
44+
re(`-F([^@\-].*)`),
4445
re(`-I([^@\-].*)`),
4546
re(`-O`),
4647
re(`-O([^@\-].*)`),
4748
re(`-W`),
4849
re(`-W([^@,]+)`), // -Wall but not -Wa,-foo.
4950
re(`-Wa,-mbig-obj`),
51+
re(`-Wp,-D([A-Za-z_].*)`),
5052
re(`-ansi`),
53+
re(`-f(no-)?asynchronous-unwind-tables`),
5154
re(`-f(no-)?blocks`),
55+
re(`-f(no-)builtin-[a-zA-Z0-9_]*`),
5256
re(`-f(no-)?common`),
5357
re(`-f(no-)?constant-cfstrings`),
5458
re(`-fdiagnostics-show-note-include-stack`),
59+
re(`-f(no-)?eliminate-unused-debug-types`),
5560
re(`-f(no-)?exceptions`),
61+
re(`-f(no-)?fast-math`),
5662
re(`-f(no-)?inline-functions`),
5763
re(`-finput-charset=([^@\-].*)`),
5864
re(`-f(no-)?fat-lto-objects`),
65+
re(`-f(no-)?keep-inline-dllexport`),
5966
re(`-f(no-)?lto`),
6067
re(`-fmacro-backtrace-limit=(.+)`),
6168
re(`-fmessage-length=(.+)`),
6269
re(`-f(no-)?modules`),
6370
re(`-f(no-)?objc-arc`),
71+
re(`-f(no-)?objc-nonfragile-abi`),
72+
re(`-f(no-)?objc-legacy-dispatch`),
6473
re(`-f(no-)?omit-frame-pointer`),
6574
re(`-f(no-)?openmp(-simd)?`),
6675
re(`-f(no-)?permissive`),
6776
re(`-f(no-)?(pic|PIC|pie|PIE)`),
77+
re(`-f(no-)?plt`),
6878
re(`-f(no-)?rtti`),
6979
re(`-f(no-)?split-stack`),
7080
re(`-f(no-)?stack-(.+)`),
7181
re(`-f(no-)?strict-aliasing`),
7282
re(`-f(un)signed-char`),
7383
re(`-f(no-)?use-linker-plugin`), // safe if -B is not used; we don't permit -B
84+
re(`-f(no-)?visibility-inlines-hidden`),
7485
re(`-fsanitize=(.+)`),
7586
re(`-ftemplate-depth-(.+)`),
7687
re(`-fvisibility=(.+)`),
7788
re(`-g([^@\-].*)?`),
7889
re(`-m32`),
7990
re(`-m64`),
80-
re(`-m(arch|cpu|fpu|tune)=([^@\-].*)`),
91+
re(`-m(abi|arch|cpu|fpu|tune)=([^@\-].*)`),
92+
re(`-marm`),
93+
re(`-mfloat-abi=([^@\-].*)`),
94+
re(`-mfpmath=[0-9a-z,+]*`),
8195
re(`-m(no-)?avx[0-9a-z.]*`),
8296
re(`-m(no-)?ms-bitfields`),
8397
re(`-m(no-)?stack-(.+)`),
@@ -86,12 +100,16 @@ var validCompilerFlags = []*regexp.Regexp{
86100
re(`-miphoneos-version-min=(.+)`),
87101
re(`-mnop-fun-dllimport`),
88102
re(`-m(no-)?sse[0-9.]*`),
103+
re(`-mthumb(-interwork)?`),
104+
re(`-mthreads`),
89105
re(`-mwindows`),
106+
re(`--param=ssp-buffer-size=[0-9]*`),
90107
re(`-pedantic(-errors)?`),
91108
re(`-pipe`),
92109
re(`-pthread`),
93110
re(`-?-std=([^@\-].*)`),
94111
re(`-?-stdlib=([^@\-].*)`),
112+
re(`--sysroot=([^@\-].*)`),
95113
re(`-w`),
96114
re(`-x([^@\-].*)`),
97115
re(`-v`),
@@ -116,15 +134,20 @@ var validLinkerFlags = []*regexp.Regexp{
116134
re(`-O`),
117135
re(`-O([^@\-].*)`),
118136
re(`-f(no-)?(pic|PIC|pie|PIE)`),
137+
re(`-f(no-)?openmp(-simd)?`),
119138
re(`-fsanitize=([^@\-].*)`),
120139
re(`-g([^@\-].*)?`),
121-
re(`-m(arch|cpu|fpu|tune)=([^@\-].*)`),
140+
re(`-headerpad_max_install_names`),
141+
re(`-m(abi|arch|cpu|fpu|tune)=([^@\-].*)`),
142+
re(`-mfloat-abi=([^@\-].*)`),
122143
re(`-mmacosx-(.+)`),
123144
re(`-mios-simulator-version-min=(.+)`),
124145
re(`-miphoneos-version-min=(.+)`),
146+
re(`-mthreads`),
125147
re(`-mwindows`),
126148
re(`-(pic|PIC|pie|PIE)`),
127149
re(`-pthread`),
150+
re(`-rdynamic`),
128151
re(`-shared`),
129152
re(`-?-static([-a-z0-9+]*)`),
130153
re(`-?-stdlib=([^@\-].*)`),
@@ -136,29 +159,35 @@ var validLinkerFlags = []*regexp.Regexp{
136159
// in a wildcard would allow tunnelling arbitrary additional
137160
// linker arguments through one of these.
138161
re(`-Wl,--(no-)?allow-multiple-definition`),
162+
re(`-Wl,--(no-)?allow-shlib-undefined`),
139163
re(`-Wl,--(no-)?as-needed`),
140164
re(`-Wl,-Bdynamic`),
141165
re(`-Wl,-Bstatic`),
166+
re(`-WL,-O([^@,\-][^,]*)?`),
142167
re(`-Wl,-d[ny]`),
143168
re(`-Wl,--disable-new-dtags`),
169+
re(`-Wl,-e[=,][a-zA-Z0-9]*`),
144170
re(`-Wl,--enable-new-dtags`),
145171
re(`-Wl,--end-group`),
146172
re(`-Wl,-framework,[^,@\-][^,]+`),
147173
re(`-Wl,-headerpad_max_install_names`),
148174
re(`-Wl,--no-undefined`),
149-
re(`-Wl,-rpath[=,]([^,@\-][^,]+)`),
175+
re(`-Wl,-rpath(-link)?[=,]([^,@\-][^,]+)`),
176+
re(`-Wl,-s`),
150177
re(`-Wl,-search_paths_first`),
151178
re(`-Wl,-sectcreate,([^,@\-][^,]+),([^,@\-][^,]+),([^,@\-][^,]+)`),
152179
re(`-Wl,--start-group`),
153180
re(`-Wl,-?-static`),
154-
re(`-Wl,--subsystem,(native|windows|console|posix|xbox)`),
181+
re(`-Wl,-?-subsystem,(native|windows|console|posix|xbox)`),
182+
re(`-Wl,-syslibroot[=,]([^,@\-][^,]+)`),
155183
re(`-Wl,-undefined[=,]([^,@\-][^,]+)`),
156184
re(`-Wl,-?-unresolved-symbols=[^,]+`),
157185
re(`-Wl,--(no-)?warn-([^,]+)`),
158186
re(`-Wl,-z,(no)?execstack`),
159187
re(`-Wl,-z,relro`),
160188

161189
re(`[a-zA-Z0-9_/].*\.(a|o|obj|dll|dylib|so)`), // direct linker inputs: x.o or libfoo.so (but not -foo.o or @foo.o)
190+
re(`\./.*\.(a|o|obj|dll|dylib|so)`),
162191
}
163192

164193
var validLinkerFlagsWithNextArg = []string{

src/cmd/go/internal/work/security_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
var goodCompilerFlags = [][]string{
1313
{"-DFOO"},
1414
{"-Dfoo=bar"},
15+
{"-F/Qt"},
1516
{"-I/"},
1617
{"-I/etc/passwd"},
1718
{"-I."},
@@ -63,6 +64,8 @@ var goodCompilerFlags = [][]string{
6364
var badCompilerFlags = [][]string{
6465
{"-D@X"},
6566
{"-D-X"},
67+
{"-F@dir"},
68+
{"-F-dir"},
6669
{"-I@dir"},
6770
{"-I-dir"},
6871
{"-O@1"},
@@ -126,6 +129,7 @@ var goodLinkerFlags = [][]string{
126129
{"-Wl,--no-warn-error"},
127130
{"foo.so"},
128131
{"_世界.dll"},
132+
{"./x.o"},
129133
{"libcgosotest.dylib"},
130134
{"-F", "framework"},
131135
{"-l", "."},
@@ -193,6 +197,7 @@ var badLinkerFlags = [][]string{
193197
{"-x", "--c"},
194198
{"-x", "@obj"},
195199
{"-Wl,-rpath,@foo"},
200+
{"../x.o"},
196201
}
197202

198203
func TestCheckLinkerFlags(t *testing.T) {

0 commit comments

Comments
 (0)