Skip to content

Commit cfafa51

Browse files
LeviYeoReumctmarinas
authored andcommitted
kselftest/arm64/mte: Register mte signal handler with SA_EXPOSE_TAGBITS
To test address tag[63:60] and memory tag[59:56] is preserved when memory tag fault happen, Let mte_register_signal() to register signal handler with SA_EXPOSE_TAGBITS. Signed-off-by: Yeoreum Yun <[email protected]> Reviewed-by: Mark Brown <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Catalin Marinas <[email protected]>
1 parent 49a9942 commit cfafa51

File tree

9 files changed

+23
-13
lines changed

9 files changed

+23
-13
lines changed

tools/testing/selftests/arm64/mte/check_buffer_fill.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ int main(int argc, char *argv[])
415415
return err;
416416

417417
/* Register SIGSEGV handler */
418-
mte_register_signal(SIGSEGV, mte_default_handler);
418+
mte_register_signal(SIGSEGV, mte_default_handler, false);
419419

420420
/* Set test plan */
421421
ksft_set_plan(20);

tools/testing/selftests/arm64/mte/check_child_memory.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,8 @@ int main(int argc, char *argv[])
160160
return err;
161161

162162
/* Register SIGSEGV handler */
163-
mte_register_signal(SIGSEGV, mte_default_handler);
164-
mte_register_signal(SIGBUS, mte_default_handler);
163+
mte_register_signal(SIGSEGV, mte_default_handler, false);
164+
mte_register_signal(SIGBUS, mte_default_handler, false);
165165

166166
/* Set test plan */
167167
ksft_set_plan(12);

tools/testing/selftests/arm64/mte/check_hugetlb_options.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,8 +235,8 @@ int main(int argc, char *argv[])
235235
return err;
236236

237237
/* Register signal handlers */
238-
mte_register_signal(SIGBUS, mte_default_handler);
239-
mte_register_signal(SIGSEGV, mte_default_handler);
238+
mte_register_signal(SIGBUS, mte_default_handler, false);
239+
mte_register_signal(SIGSEGV, mte_default_handler, false);
240240

241241
allocate_hugetlb();
242242

tools/testing/selftests/arm64/mte/check_ksm_options.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ int main(int argc, char *argv[])
141141
return KSFT_FAIL;
142142
}
143143
/* Register signal handlers */
144-
mte_register_signal(SIGBUS, mte_default_handler);
145-
mte_register_signal(SIGSEGV, mte_default_handler);
144+
mte_register_signal(SIGBUS, mte_default_handler, false);
145+
mte_register_signal(SIGSEGV, mte_default_handler, false);
146146

147147
/* Set test plan */
148148
ksft_set_plan(4);

tools/testing/selftests/arm64/mte/check_mmap_options.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,8 @@ int main(int argc, char *argv[])
201201
sizes[item - 1] = page_size + 1;
202202

203203
/* Register signal handlers */
204-
mte_register_signal(SIGBUS, mte_default_handler);
205-
mte_register_signal(SIGSEGV, mte_default_handler);
204+
mte_register_signal(SIGBUS, mte_default_handler, false);
205+
mte_register_signal(SIGSEGV, mte_default_handler, false);
206206

207207
/* Set test plan */
208208
ksft_set_plan(22);

tools/testing/selftests/arm64/mte/check_tags_inclusion.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ int main(int argc, char *argv[])
180180
return err;
181181

182182
/* Register SIGSEGV handler */
183-
mte_register_signal(SIGSEGV, mte_default_handler);
183+
mte_register_signal(SIGSEGV, mte_default_handler, false);
184184

185185
/* Set test plan */
186186
ksft_set_plan(4);

tools/testing/selftests/arm64/mte/check_user_mem.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ int main(int argc, char *argv[])
211211
return err;
212212

213213
/* Register signal handlers */
214-
mte_register_signal(SIGSEGV, mte_default_handler);
214+
mte_register_signal(SIGSEGV, mte_default_handler, false);
215215

216216
/* Set test plan */
217217
ksft_set_plan(64);

tools/testing/selftests/arm64/mte/mte_common_util.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919
#include "mte_common_util.h"
2020
#include "mte_def.h"
2121

22+
#ifndef SA_EXPOSE_TAGBITS
23+
#define SA_EXPOSE_TAGBITS 0x00000800
24+
#endif
25+
2226
#define INIT_BUFFER_SIZE 256
2327

2428
struct mte_fault_cxt cur_mte_cxt;
@@ -79,12 +83,17 @@ void mte_default_handler(int signum, siginfo_t *si, void *uc)
7983
}
8084
}
8185

82-
void mte_register_signal(int signal, void (*handler)(int, siginfo_t *, void *))
86+
void mte_register_signal(int signal, void (*handler)(int, siginfo_t *, void *),
87+
bool export_tags)
8388
{
8489
struct sigaction sa;
8590

8691
sa.sa_sigaction = handler;
8792
sa.sa_flags = SA_SIGINFO;
93+
94+
if (export_tags && signal == SIGSEGV)
95+
sa.sa_flags |= SA_EXPOSE_TAGBITS;
96+
8897
sigemptyset(&sa.sa_mask);
8998
sigaction(signal, &sa, NULL);
9099
}

tools/testing/selftests/arm64/mte/mte_common_util.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ extern struct mte_fault_cxt cur_mte_cxt;
4040

4141
/* MTE utility functions */
4242
void mte_default_handler(int signum, siginfo_t *si, void *uc);
43-
void mte_register_signal(int signal, void (*handler)(int, siginfo_t *, void *));
43+
void mte_register_signal(int signal, void (*handler)(int, siginfo_t *, void *),
44+
bool export_tags);
4445
void mte_wait_after_trig(void);
4546
void *mte_allocate_memory(size_t size, int mem_type, int mapping, bool tags);
4647
void *mte_allocate_memory_tag_range(size_t size, int mem_type, int mapping,

0 commit comments

Comments
 (0)