66 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2 3#include <errno.h>4#include <fcntl.h>5#include <signal.h>6#include <stdio.h>7#include <string.h>8#include <sys/ioctl.h>9#include <sys/mman.h>10#include <sys/stat.h>11#include <sys/types.h>12#include <unistd.h>13 14#include "vas-api.h"15#include "utils.h"16 17static bool faulted;18 19static void sigbus_handler(int n, siginfo_t *info, void *ctxt_v)20{21 ucontext_t *ctxt = (ucontext_t *)ctxt_v;22 struct pt_regs *regs = ctxt->uc_mcontext.regs;23 24 faulted = true;25 regs->nip += 4;26}27 28static int test_ra_error(void)29{30 struct vas_tx_win_open_attr attr;31 int fd, *paste_addr;32 char *devname = "/dev/crypto/nx-gzip";33 struct sigaction act = {34 .sa_sigaction = sigbus_handler,35 .sa_flags = SA_SIGINFO,36 };37 38 memset(&attr, 0, sizeof(attr));39 attr.version = 1;40 attr.vas_id = 0;41 42 SKIP_IF(access(devname, F_OK));43 44 fd = open(devname, O_RDWR);45 FAIL_IF(fd < 0);46 FAIL_IF(ioctl(fd, VAS_TX_WIN_OPEN, &attr) < 0);47 FAIL_IF(sigaction(SIGBUS, &act, NULL) != 0);48 49 paste_addr = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0ULL);50 51 /* The following assignment triggers exception */52 mb();53 *paste_addr = 1;54 mb();55 56 FAIL_IF(!faulted);57 58 return 0;59}60 61int main(void)62{63 return test_harness(test_ra_error, "inject-ra-err");64}65 66