Skip to content

Commit 0302d11

Browse files
committed
runtime/cgo: add assertions for safe stack retrieval
1 parent f062d7b commit 0302d11

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/runtime/cgo/gcc_stack_unix.c

+6-5
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#define _GNU_SOURCE
99
#endif
1010

11+
#include <assert.h>
1112
#include <pthread.h>
1213
#include "libcgo.h"
1314

@@ -20,16 +21,16 @@ x_cgo_getstackbound(uintptr bounds[2])
2021

2122
// Needed before pthread_getattr_np, too, since before glibc 2.32
2223
// it did not call pthread_attr_init in all cases (see #65625).
23-
pthread_attr_init(&attr);
24+
assert(pthread_attr_init(&attr) == 0);
2425
#if defined(__GLIBC__) || defined(__BIONIC__) || (defined(__sun) && !defined(__illumos__))
2526
// pthread_getattr_np is a GNU extension supported in glibc.
2627
// Solaris is not glibc but does support pthread_getattr_np
2728
// (and the fallback doesn't work...). Illumos does not.
28-
pthread_getattr_np(pthread_self(), &attr); // GNU extension
29-
pthread_attr_getstack(&attr, &addr, &size); // low address
29+
assert(pthread_getattr_np(pthread_self(), &attr) == 0); // GNU extension
30+
assert(pthread_attr_getstack(&attr, &addr, &size) == 0); // low address
3031
#elif defined(__illumos__)
31-
pthread_attr_get_np(pthread_self(), &attr);
32-
pthread_attr_getstack(&attr, &addr, &size); // low address
32+
assert(pthread_attr_get_np(pthread_self(), &attr) == 0); // Solaris extension
33+
assert(pthread_attr_getstack(&attr, &addr, &size) == 0); // low address
3334
#else
3435
// We don't know how to get the current stacks, leave it as
3536
// 0 and the caller will use an estimate based on the current

0 commit comments

Comments
 (0)