1 /*
2 * Support for decoding of NS_* ioctl commands.
3 *
4 * Copyright (c) 2017 Nikolay Marchuk <marchuk.nikolay.a@gmail.com>
5 * Copyright (c) 2017-2021 The strace developers.
6 * All rights reserved.
7 *
8 * SPDX-License-Identifier: LGPL-2.1-or-later
9 */
10
11 #include "defs.h"
12 #include <linux/nsfs.h>
13
14 int
15 nsfs_ioctl(struct tcb *tcp, unsigned int code, kernel_ulong_t arg)
16 {
17 unsigned int uid;
18 switch (code) {
19 case NS_GET_USERNS:
20 case NS_GET_PARENT:
21 return RVAL_IOCTL_DECODED | RVAL_FD;
22 case NS_GET_NSTYPE:
23 if (entering(tcp))
24 return 0;
25 if (!syserror(tcp))
26 tcp->auxstr = xlookup(setns_types, tcp->u_rval);
27 return RVAL_IOCTL_DECODED | RVAL_STR;
28 case NS_GET_OWNER_UID:
29 if (entering(tcp))
30 return 0;
31 tprint_arg_next();
32 if (!umove_or_printaddr(tcp, arg, &uid)) {
33 tprint_indirect_begin();
34 printuid(uid);
35 tprint_indirect_end();
36 }
37 return RVAL_IOCTL_DECODED;
38 default:
39 return RVAL_DECODED;
40 }
41 }