Skip to content

Commit 0c5aeda

Browse files
committed
[Backtracing][Runtime] Fix Linux build to use getauxval(AT_SECURE).
Linux doesn't have `issetugid()`, so use `getauxval(AT_SECURE)` there instead. rdar://105391747
1 parent 36c2e4c commit 0c5aeda

File tree

1 file changed

+34
-21
lines changed

1 file changed

+34
-21
lines changed

stdlib/public/runtime/Backtrace.cpp

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@
2727

2828
#include "swift/Demangling/Demangler.h"
2929

30+
#ifdef __linux__
31+
#include <sys/auxv.h>
32+
#endif
33+
3034
#ifdef _WIN32
3135
#include <windows.h>
3236
#else
@@ -212,17 +216,29 @@ const char *presetToString(Preset preset) {
212216
}
213217
#endif
214218

219+
#ifdef __linux__
220+
bool isPrivileged() {
221+
return getauxval(AT_SECURE);
222+
}
223+
#elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__)
224+
bool isPrivileged() {
225+
return issetugid();
226+
}
227+
#elif _WIN32
228+
bool isPrivileged() {
229+
return false;
230+
}
231+
#endif
232+
215233
} // namespace
216234

217235
BacktraceInitializer::BacktraceInitializer() {
218236
const char *backtracing = swift::runtime::environment::SWIFT_BACKTRACE();
219237

220-
#if !_WIN32
221238
// Force off for setuid processes.
222-
if (issetugid()) {
239+
if (isPrivileged()) {
223240
_swift_backtraceSettings.enabled = OnOffTty::Off;
224241
}
225-
#endif
226242

227243
if (backtracing)
228244
_swift_parseBacktracingSettings(backtracing);
@@ -246,25 +262,22 @@ BacktraceInitializer::BacktraceInitializer() {
246262
_swift_backtraceSettings.enabled = OnOffTty::Off;
247263
}
248264
#else
249-
#if !_WIN32
250-
if (issetugid()) {
251-
if (_swift_backtraceSettings.enabled != OnOffTty::Off) {
252-
// You'll only see this warning if you do e.g.
253-
//
254-
// SWIFT_BACKTRACE=enable=on /path/to/some/setuid/binary
255-
//
256-
// as opposed to
257-
//
258-
// /path/to/some/setuid/binary
259-
//
260-
// i.e. when you're trying to force matters.
261-
swift::warning(0,
262-
"swift runtime: backtrace-on-crash is not supported for "
263-
"setuid executables.\n");
264-
_swift_backtraceSettings.enabled = OnOffTty::Off;
265-
}
265+
266+
if (isPrivileged() && _swift_backtraceSettings.enabled != OnOffTty::Off) {
267+
// You'll only see this warning if you do e.g.
268+
//
269+
// SWIFT_BACKTRACE=enable=on /path/to/some/setuid/binary
270+
//
271+
// as opposed to
272+
//
273+
// /path/to/some/setuid/binary
274+
//
275+
// i.e. when you're trying to force matters.
276+
swift::warning(0,
277+
"swift runtime: backtrace-on-crash is not supported for "
278+
"privileged executables.\n");
279+
_swift_backtraceSettings.enabled = OnOffTty::Off;
266280
}
267-
#endif // !_WIN32
268281

269282
if (_swift_backtraceSettings.enabled == OnOffTty::TTY)
270283
_swift_backtraceSettings.enabled =

0 commit comments

Comments
 (0)