(root)/
strace-6.5/
tests-mx32/
pkey_alloc.c
       1  /*
       2   * Check decoding of pkey_alloc syscall.
       3   *
       4   * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
       5   * Copyright (c) 2016-2021 The strace developers.
       6   * All rights reserved.
       7   *
       8   * SPDX-License-Identifier: GPL-2.0-or-later
       9   */
      10  
      11  #include "tests.h"
      12  #include "scno.h"
      13  
      14  #include <stdio.h>
      15  #include <unistd.h>
      16  
      17  int
      18  main(void)
      19  {
      20  	static const kernel_ulong_t flags[] = {
      21  		0,
      22  		(kernel_ulong_t) 0xbadc0ded00000000ULL,
      23  		(kernel_ulong_t) 0xffff0000eeee1111ULL,
      24  		(kernel_ulong_t) 0x123456789abcdef0ULL,
      25  	};
      26  	static const struct {
      27  		kernel_ulong_t val;
      28  		const char *str;
      29  	} rights[] = {
      30  		{ (kernel_ulong_t) 0xbadc0ded00000002ULL,
      31  			sizeof(kernel_ulong_t) > sizeof(int) ?
      32  			"PKEY_DISABLE_WRITE|0xbadc0ded00000000" :
      33  			"PKEY_DISABLE_WRITE" },
      34  		{ 0xdec0ded, "PKEY_DISABLE_ACCESS|PKEY_DISABLE_EXECUTE|"
      35  				"0xdec0de8" },
      36  		{ 0x7, "PKEY_DISABLE_ACCESS|PKEY_DISABLE_WRITE|"
      37  				"PKEY_DISABLE_EXECUTE" },
      38  		{ ARG_STR(0) },
      39  		{ 0xbadc0de8, "0xbadc0de8 /* PKEY_??? */" },
      40  	};
      41  
      42  	for (unsigned int i = 0; i < ARRAY_SIZE(flags); ++i) {
      43  		for (unsigned int j = 0; j < ARRAY_SIZE(rights); ++j) {
      44  			long rc = syscall(__NR_pkey_alloc,
      45  					  flags[i], rights[j].val);
      46  			printf("pkey_alloc(%#llx, %s) = %s\n",
      47  			       (unsigned long long) flags[i], rights[j].str,
      48  			       sprintrc(rc));
      49  		}
      50  	}
      51  
      52  	puts("+++ exited with 0 +++");
      53  
      54  	return 0;
      55  }