From 38189969f2f95368049ab4ae5cff27fe0e3fb629 Mon Sep 17 00:00:00 2001 From: Andrei Vagin Date: Mon, 6 Mar 2023 12:19:27 -0800 Subject: [PATCH] systrap/arm64: use the fpsimd_context structure to parse fpu states PiperOrigin-RevId: 514487900 --- pkg/sentry/platform/systrap/sysmsg/sighandler_arm64.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/sentry/platform/systrap/sysmsg/sighandler_arm64.c b/pkg/sentry/platform/systrap/sysmsg/sighandler_arm64.c index 1fe39d11e..2594ae57d 100644 --- a/pkg/sentry/platform/systrap/sysmsg/sighandler_arm64.c +++ b/pkg/sentry/platform/systrap/sysmsg/sighandler_arm64.c @@ -106,13 +106,13 @@ void __export_sighandler(int signo, siginfo_t *siginfo, void *_ucontext) { // point context. // // See: arch/arm64/include/uapi/asm/sigcontext.h - const uint64_t kSigframeMagicHeaderLen = sizeof(struct _aarch64_ctx); + struct fpsimd_context *fpctx = &ucontext->uc_mcontext.__reserved; // Verify the header. - if (((uint32_t *)&ucontext->uc_mcontext.__reserved)[0] != FPSIMD_MAGIC) { + if (fpctx->head.magic != FPSIMD_MAGIC || + __export_arch_state.fp_len != sizeof(*fpctx) - sizeof(fpctx->head)) { panic(0xbadf); } - uint8_t *fpStatePointer = - (uint8_t *)&ucontext->uc_mcontext.__reserved + kSigframeMagicHeaderLen; + uint8_t *fpStatePointer = (uint8_t *)&fpctx->fpsr; if (__export_context_decoupling_exp) { memcpy(ctx->fpstate, fpStatePointer, __export_arch_state.fp_len); } else {