brintos

brintos / linux-shallow public Read only

0
0
Text · 1.8 KiB · 2e384d7 Raw
87 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (C) 2021 ARM Limited4 *5 * Verify that using an instruction not supported in streaming mode6 * traps when in streaming mode.7 */8 9#include <signal.h>10#include <ucontext.h>11#include <sys/prctl.h>12 13#include "test_signals_utils.h"14#include "testcases.h"15 16static union {17	ucontext_t uc;18	char buf[1024 * 128];19} context;20 21static void enable_za(void)22{23	/* smstart za; real data is TODO */24	asm volatile(".inst 0xd503457f" : : : );25}26 27int zt_regs_run(struct tdescr *td, siginfo_t *si, ucontext_t *uc)28{29	size_t offset;30	struct _aarch64_ctx *head = GET_BUF_RESV_HEAD(context);31	struct zt_context *zt;32	char *zeros;33 34	/*35	 * Get a signal context which should have a ZT frame and registers36	 * in it.37	 */38	enable_za();39	if (!get_current_context(td, &context.uc, sizeof(context)))40		return 1;41 42	head = get_header(head, ZT_MAGIC, GET_BUF_RESV_SIZE(context), &offset);43	if (!head) {44		fprintf(stderr, "No ZT context\n");45		return 1;46	}47 48	zt = (struct zt_context *)head;49	if (zt->nregs == 0) {50		fprintf(stderr, "Got context with no registers\n");51		return 1;52	}53 54	fprintf(stderr, "Got expected size %u for %d registers\n",55		head->size, zt->nregs);56 57	/* We didn't load any data into ZT so it should be all zeros */58	zeros = malloc(ZT_SIG_REGS_SIZE(zt->nregs));59	if (!zeros) {60		fprintf(stderr, "Out of memory, nregs=%u\n", zt->nregs);61		return 1;62	}63	memset(zeros, 0, ZT_SIG_REGS_SIZE(zt->nregs));64 65	if (memcmp(zeros, (char *)zt + ZT_SIG_REGS_OFFSET,66		   ZT_SIG_REGS_SIZE(zt->nregs)) != 0) {67		fprintf(stderr, "ZT data invalid\n");68		free(zeros);69		return 1;70	}71 72	free(zeros);73 74	td->pass = 1;75 76	return 0;77}78 79struct tdescr tde = {80	.name = "ZT register data",81	.descr = "Validate that ZT is present and has data when ZA is enabled",82	.feats_required = FEAT_SME2,83	.timeout = 3,84	.sanity_disabled = true,85	.run = zt_regs_run,86};87