(root)/
strace-6.5/
tests/
setfsugid.c
       1  /*
       2   * Check decoding of setfsuid/setfsgid/setfsuid32/setfsgid32 syscalls.
       3   *
       4   * Copyright (c) 2016 Dmitry V. Levin <ldv@strace.io>
       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 <stdio.h>
      12  #include <unistd.h>
      13  
      14  static void
      15  printuid(unsigned UGID_TYPE id)
      16  {
      17  	if (id == (unsigned UGID_TYPE) -1U)
      18  		printf("-1");
      19  	else
      20  		printf("%u", id);
      21  }
      22  
      23  int
      24  main(void)
      25  {
      26  	unsigned int ugid = GETUGID;
      27  
      28  	const kernel_ulong_t tests[] = {
      29  		ugid,
      30  		0xffff0000U | ugid,
      31  		F8ILL_KULONG_MASK | ugid,
      32  		0xffffU,
      33  		-1U,
      34  		-1L,
      35  		0xc0deffffU,
      36  		0xfacefeedU,
      37  		(long) 0xfacefeeddeadbeefULL
      38  	};
      39  
      40  	for (unsigned int i = 0; i < ARRAY_SIZE(tests); ++i) {
      41  		const unsigned int num = (unsigned UGID_TYPE) tests[i];
      42  		unsigned int rc;
      43  
      44  		rc = syscall(SYSCALL_NR, tests[i]);
      45  		printf("%s(", SYSCALL_NAME);
      46  		printuid(num);
      47  		printf(") = %u\n", rc);
      48  
      49  		rc = syscall(SYSCALL_NR, ugid);
      50  		printf("%s(%u) = %u\n", SYSCALL_NAME, ugid, rc);
      51  	}
      52  
      53  	puts("+++ exited with 0 +++");
      54  	return 0;
      55  }