mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 10:33:41 +02:00
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 <yeoreum.yun@arm.com> Reviewed-by: Mark Brown <broonie@kernel.org> Link: https://lore.kernel.org/r/20250618084513.1761345-6-yeoreum.yun@arm.com Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
parent
49a9942ff8
commit
cfafa517c9
|
|
@ -415,7 +415,7 @@ int main(int argc, char *argv[])
|
|||
return err;
|
||||
|
||||
/* Register SIGSEGV handler */
|
||||
mte_register_signal(SIGSEGV, mte_default_handler);
|
||||
mte_register_signal(SIGSEGV, mte_default_handler, false);
|
||||
|
||||
/* Set test plan */
|
||||
ksft_set_plan(20);
|
||||
|
|
|
|||
|
|
@ -160,8 +160,8 @@ int main(int argc, char *argv[])
|
|||
return err;
|
||||
|
||||
/* Register SIGSEGV handler */
|
||||
mte_register_signal(SIGSEGV, mte_default_handler);
|
||||
mte_register_signal(SIGBUS, mte_default_handler);
|
||||
mte_register_signal(SIGSEGV, mte_default_handler, false);
|
||||
mte_register_signal(SIGBUS, mte_default_handler, false);
|
||||
|
||||
/* Set test plan */
|
||||
ksft_set_plan(12);
|
||||
|
|
|
|||
|
|
@ -235,8 +235,8 @@ int main(int argc, char *argv[])
|
|||
return err;
|
||||
|
||||
/* Register signal handlers */
|
||||
mte_register_signal(SIGBUS, mte_default_handler);
|
||||
mte_register_signal(SIGSEGV, mte_default_handler);
|
||||
mte_register_signal(SIGBUS, mte_default_handler, false);
|
||||
mte_register_signal(SIGSEGV, mte_default_handler, false);
|
||||
|
||||
allocate_hugetlb();
|
||||
|
||||
|
|
|
|||
|
|
@ -141,8 +141,8 @@ int main(int argc, char *argv[])
|
|||
return KSFT_FAIL;
|
||||
}
|
||||
/* Register signal handlers */
|
||||
mte_register_signal(SIGBUS, mte_default_handler);
|
||||
mte_register_signal(SIGSEGV, mte_default_handler);
|
||||
mte_register_signal(SIGBUS, mte_default_handler, false);
|
||||
mte_register_signal(SIGSEGV, mte_default_handler, false);
|
||||
|
||||
/* Set test plan */
|
||||
ksft_set_plan(4);
|
||||
|
|
|
|||
|
|
@ -201,8 +201,8 @@ int main(int argc, char *argv[])
|
|||
sizes[item - 1] = page_size + 1;
|
||||
|
||||
/* Register signal handlers */
|
||||
mte_register_signal(SIGBUS, mte_default_handler);
|
||||
mte_register_signal(SIGSEGV, mte_default_handler);
|
||||
mte_register_signal(SIGBUS, mte_default_handler, false);
|
||||
mte_register_signal(SIGSEGV, mte_default_handler, false);
|
||||
|
||||
/* Set test plan */
|
||||
ksft_set_plan(22);
|
||||
|
|
|
|||
|
|
@ -180,7 +180,7 @@ int main(int argc, char *argv[])
|
|||
return err;
|
||||
|
||||
/* Register SIGSEGV handler */
|
||||
mte_register_signal(SIGSEGV, mte_default_handler);
|
||||
mte_register_signal(SIGSEGV, mte_default_handler, false);
|
||||
|
||||
/* Set test plan */
|
||||
ksft_set_plan(4);
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@ int main(int argc, char *argv[])
|
|||
return err;
|
||||
|
||||
/* Register signal handlers */
|
||||
mte_register_signal(SIGSEGV, mte_default_handler);
|
||||
mte_register_signal(SIGSEGV, mte_default_handler, false);
|
||||
|
||||
/* Set test plan */
|
||||
ksft_set_plan(64);
|
||||
|
|
|
|||
|
|
@ -19,6 +19,10 @@
|
|||
#include "mte_common_util.h"
|
||||
#include "mte_def.h"
|
||||
|
||||
#ifndef SA_EXPOSE_TAGBITS
|
||||
#define SA_EXPOSE_TAGBITS 0x00000800
|
||||
#endif
|
||||
|
||||
#define INIT_BUFFER_SIZE 256
|
||||
|
||||
struct mte_fault_cxt cur_mte_cxt;
|
||||
|
|
@ -79,12 +83,17 @@ void mte_default_handler(int signum, siginfo_t *si, void *uc)
|
|||
}
|
||||
}
|
||||
|
||||
void mte_register_signal(int signal, void (*handler)(int, siginfo_t *, void *))
|
||||
void mte_register_signal(int signal, void (*handler)(int, siginfo_t *, void *),
|
||||
bool export_tags)
|
||||
{
|
||||
struct sigaction sa;
|
||||
|
||||
sa.sa_sigaction = handler;
|
||||
sa.sa_flags = SA_SIGINFO;
|
||||
|
||||
if (export_tags && signal == SIGSEGV)
|
||||
sa.sa_flags |= SA_EXPOSE_TAGBITS;
|
||||
|
||||
sigemptyset(&sa.sa_mask);
|
||||
sigaction(signal, &sa, NULL);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,7 +40,8 @@ extern struct mte_fault_cxt cur_mte_cxt;
|
|||
|
||||
/* MTE utility functions */
|
||||
void mte_default_handler(int signum, siginfo_t *si, void *uc);
|
||||
void mte_register_signal(int signal, void (*handler)(int, siginfo_t *, void *));
|
||||
void mte_register_signal(int signal, void (*handler)(int, siginfo_t *, void *),
|
||||
bool export_tags);
|
||||
void mte_wait_after_trig(void);
|
||||
void *mte_allocate_memory(size_t size, int mem_type, int mapping, bool tags);
|
||||
void *mte_allocate_memory_tag_range(size_t size, int mem_type, int mapping,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user