1 /*
2 * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
3 * Copyright (c) 2017-2021 The strace developers.
4 * All rights reserved.
5 *
6 * SPDX-License-Identifier: LGPL-2.1-or-later
7 */
8
9 #include "defs.h"
10 #include "netlink.h"
11
12 #include <linux/selinux_netlink.h>
13
14 bool
15 decode_netlink_selinux(struct tcb *const tcp,
16 const struct nlmsghdr *const nlmsghdr,
17 const kernel_ulong_t addr,
18 const unsigned int len)
19 {
20 switch (nlmsghdr->nlmsg_type) {
21 case SELNL_MSG_SETENFORCE: {
22 struct selnl_msg_setenforce msg;
23
24 if (len < sizeof(msg))
25 printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
26 else if (!umove_or_printaddr(tcp, addr, &msg)) {
27 tprint_struct_begin();
28 PRINT_FIELD_D(msg, val);
29 tprint_struct_end();
30 }
31 break;
32 }
33 case SELNL_MSG_POLICYLOAD: {
34 struct selnl_msg_policyload msg;
35
36 if (len < sizeof(msg))
37 printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
38 else if (!umove_or_printaddr(tcp, addr, &msg)) {
39 tprint_struct_begin();
40 PRINT_FIELD_U(msg, seqno);
41 tprint_struct_end();
42 }
43 break;
44 }
45 default:
46 return false;
47 }
48
49 return true;
50 }