(root)/
strace-6.5/
tests-m32/
reboot.c
       1  /*
       2   * Check decoding of reboot syscall.
       3   *
       4   * Copyright (c) 2016-2021 The strace developers.
       5   * All rights reserved.
       6   *
       7   * SPDX-License-Identifier: GPL-2.0-or-later
       8   */
       9  
      10  #include "tests.h"
      11  #include "scno.h"
      12  
      13  #include <stdio.h>
      14  #include <linux/reboot.h>
      15  #include <unistd.h>
      16  
      17  #define INVALID_MAGIC 319887762
      18  #define INVALID_CMD 0x01234568
      19  
      20  #define STR32 "AbCdEfGhIjKlMnOpQrStUvWxYz012345"
      21  #define STR128 STR32 STR32 STR32 STR32
      22  
      23  int
      24  main(void)
      25  {
      26  	static const kernel_ulong_t bogus_magic1 =
      27  		(kernel_ulong_t) 0xFFFFFFFFFFFFFFFFULL;
      28  	static const kernel_ulong_t bogus_magic2 =
      29  		(kernel_ulong_t) 0xdeadfacefa57beefULL;
      30  	static const kernel_ulong_t bogus_cmd =
      31  		(kernel_ulong_t) 0xbadda7a09caffee1ULL;
      32  	static const char buf[] = "reboot";
      33  	static const char str256_buf[] = STR128 STR128;
      34  
      35  	long rc;
      36  	char *str256 = tail_memdup(str256_buf, sizeof(str256_buf) - 1);
      37  
      38  	rc = syscall(__NR_reboot, 0, 0, 0, 0);
      39  	printf("reboot(0 /* LINUX_REBOOT_MAGIC_??? */, "
      40  	       "0 /* LINUX_REBOOT_MAGIC_??? */, "
      41  	       "LINUX_REBOOT_CMD_CAD_OFF) = %s\n",
      42  	       sprintrc(rc));
      43  
      44  	rc = syscall(__NR_reboot, bogus_magic1, bogus_magic2, bogus_cmd, -1);
      45  	printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, "
      46  	       "%#x /* LINUX_REBOOT_MAGIC_??? */, "
      47  	       "%#x /* LINUX_REBOOT_CMD_??? */) = %s\n",
      48  	       (unsigned int) bogus_magic1, (unsigned int) bogus_magic2,
      49  	       (unsigned int) bogus_cmd, sprintrc(rc));
      50  
      51  	rc = syscall(__NR_reboot, LINUX_REBOOT_MAGIC1,
      52  			  INVALID_MAGIC, LINUX_REBOOT_CMD_RESTART2, buf);
      53  	printf("reboot(LINUX_REBOOT_MAGIC1, %#x /* LINUX_REBOOT_MAGIC_??? */,"
      54  	       " LINUX_REBOOT_CMD_RESTART2, \"%s\") = %s\n",
      55  	       INVALID_MAGIC, buf, sprintrc(rc));
      56  
      57  	rc = syscall(__NR_reboot, LINUX_REBOOT_MAGIC1,
      58  		     LINUX_REBOOT_MAGIC2, INVALID_CMD);
      59  	printf("reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,"
      60  	       " %#x /* LINUX_REBOOT_CMD_??? */) = %s\n",
      61  	       INVALID_CMD, sprintrc(rc));
      62  
      63  	rc = syscall(__NR_reboot, INVALID_MAGIC, LINUX_REBOOT_MAGIC2A,
      64  			  LINUX_REBOOT_CMD_RESTART2, str256);
      65  	printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, LINUX_REBOOT_MAGIC2A, "
      66  	       "LINUX_REBOOT_CMD_RESTART2, \"%.255s\"...) = %s\n",
      67  	       INVALID_MAGIC, str256, sprintrc(rc));
      68  
      69  	rc = syscall(__NR_reboot, INVALID_MAGIC, LINUX_REBOOT_MAGIC2B,
      70  			  LINUX_REBOOT_CMD_RESTART2, str256 + 1);
      71  	printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, LINUX_REBOOT_MAGIC2B, "
      72  	       "LINUX_REBOOT_CMD_RESTART2, \"%.255s\"...) = %s\n",
      73  	       INVALID_MAGIC, str256 + 1, sprintrc(rc));
      74  
      75  	rc = syscall(__NR_reboot, INVALID_MAGIC, LINUX_REBOOT_MAGIC2C,
      76  			  LINUX_REBOOT_CMD_RESTART2, str256 + 2);
      77  	printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, LINUX_REBOOT_MAGIC2C, "
      78  	       "LINUX_REBOOT_CMD_RESTART2, %p) = %s\n",
      79  	       INVALID_MAGIC, str256 + 2, sprintrc(rc));
      80  
      81  	str256[255] = '\0';
      82  	rc = syscall(__NR_reboot, INVALID_MAGIC, bogus_magic1,
      83  			  LINUX_REBOOT_CMD_RESTART2, str256);
      84  	printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, "
      85  	       "%#x /* LINUX_REBOOT_MAGIC_??? */, "
      86  	       "LINUX_REBOOT_CMD_RESTART2, \"%.255s\"...) = %s\n",
      87  	       INVALID_MAGIC, (unsigned int) bogus_magic1, str256,
      88  	       sprintrc(rc));
      89  
      90  	rc = syscall(__NR_reboot, INVALID_MAGIC, bogus_magic1,
      91  			  LINUX_REBOOT_CMD_RESTART2, str256 + 1);
      92  	printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, "
      93  	       "%#x /* LINUX_REBOOT_MAGIC_??? */, "
      94  	       "LINUX_REBOOT_CMD_RESTART2, \"%.254s\") = %s\n",
      95  	       INVALID_MAGIC, (unsigned int) bogus_magic1, str256 + 1,
      96  	       sprintrc(rc));
      97  
      98  	puts("+++ exited with 0 +++");
      99  	return 0;
     100  }