cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

sme_trap_non_streaming.c (1173B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Copyright (C) 2021 ARM Limited
      4 *
      5 * Verify that using an instruction not supported in streaming mode
      6 * 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
     16int sme_trap_non_streaming_trigger(struct tdescr *td)
     17{
     18	/*
     19	 * The framework will handle SIGILL so we need to exit SM to
     20	 * stop any other code triggering a further SIGILL down the
     21	 * line from using a streaming-illegal instruction.
     22	 */
     23	asm volatile(".inst 0xd503437f; /* SMSTART ZA */ \
     24		      cnt v0.16b, v0.16b; \
     25                      .inst 0xd503447f  /* SMSTOP ZA */");
     26
     27	return 0;
     28}
     29
     30int sme_trap_non_streaming_run(struct tdescr *td, siginfo_t *si, ucontext_t *uc)
     31{
     32	return 1;
     33}
     34
     35struct tdescr tde = {
     36	.name = "SME SM trap unsupported instruction",
     37	.descr = "Check that we get a SIGILL if we use an unsupported instruction in streaming mode",
     38	.feats_required = FEAT_SME,
     39	.feats_incompatible = FEAT_SME_FA64,
     40	.timeout = 3,
     41	.sanity_disabled = true,
     42	.trigger = sme_trap_non_streaming_trigger,
     43	.run = sme_trap_non_streaming_run,
     44	.sig_ok = SIGILL,
     45};