Skip to content

Commit e566298

Browse files
Increased AUXV limit
1 parent da9bc46 commit e566298

1 file changed

Lines changed: 5 additions & 2 deletions

File tree

source/kernel/C/userland.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,13 @@
2020
#define LINUX_AT_EGID 14
2121
#define LINUX_AT_PLATFORM 15
2222
#define LINUX_AT_HWCAP 16
23+
#define LINUX_AT_HWCAP2 26
2324
#define LINUX_AT_CLKTCK 17
2425
#define LINUX_AT_SECURE 23
2526
#define LINUX_AT_RANDOM 25
2627
#define LINUX_AT_EXECFN 31
2728
#define IA32_FS_BASE_MSR 0xC0000100
29+
#define USER_AUXV_MAX 18
2830

2931
typedef struct {
3032
int i[4];
@@ -159,7 +161,7 @@ static uint64_t build_initial_user_stack(const char* exec_path,
159161
uint64_t env_addrs[32];
160162
char random_bytes[16];
161163
char exec_name_buf[256];
162-
auxv_pair_t auxv[16];
164+
auxv_pair_t auxv[USER_AUXV_MAX];
163165
uint64_t frame_words = 0;
164166
uint64_t frame_top = 0;
165167
uint64_t frame_ptr = 0;
@@ -202,8 +204,9 @@ static uint64_t build_initial_user_stack(const char* exec_path,
202204
auxv[auxc++] = (auxv_pair_t){ LINUX_AT_CLKTCK, 100 };
203205
auxv[auxc++] = (auxv_pair_t){ LINUX_AT_SECURE, 0 };
204206
auxv[auxc++] = (auxv_pair_t){ LINUX_AT_RANDOM, random_addr };
207+
auxv[auxc++] = (auxv_pair_t){ LINUX_AT_HWCAP2, 0 };
205208
auxv[auxc++] = (auxv_pair_t){ LINUX_AT_PLATFORM, platform_addr };
206-
if (execfn_addr)
209+
if (execfn_addr && auxc < USER_AUXV_MAX)
207210
auxv[auxc++] = (auxv_pair_t){ LINUX_AT_EXECFN, execfn_addr };
208211

209212
frame_words = 1 + (uint64_t)argc + 1 + (uint64_t)envc + 1 + ((uint64_t)(auxc + 1) * 2);

0 commit comments

Comments
 (0)