annotate src/privsep.h @ 5526:b1a3d9055662 draft

privsep: Allow logfile reopening in a chroot Now that only the privileged actioneer does the actual logging we can safely reopen the file we are logging to. This also closes and re-opens the syslog connection.
author Roy Marples <roy@marples.name>
date Fri, 30 Oct 2020 14:19:16 +0000
parents 41d06921177b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4840
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
1 /* SPDX-License-Identifier: BSD-2-Clause */
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
2 /*
5060
4539ffcdd656 spelling: Correct both privilege and separation
Roy Marples <roy@marples.name>
parents: 4991
diff changeset
3 * Privilege Separation for dhcpcd
4922
555d7d1a4939 Welcome to 2020!
Roy Marples <roy@marples.name>
parents: 4868
diff changeset
4 * Copyright (c) 2006-2020 Roy Marples <roy@marples.name>
4840
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
5 * All rights reserved
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
6
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
7 * Redistribution and use in source and binary forms, with or without
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
8 * modification, are permitted provided that the following conditions
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
9 * are met:
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
10 * 1. Redistributions of source code must retain the above copyright
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
11 * notice, this list of conditions and the following disclaimer.
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
15 *
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
26 * SUCH DAMAGE.
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
27 */
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
28
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
29 #ifndef PRIVSEP_H
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
30 #define PRIVSEP_H
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
31
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
32 //#define PRIVSEP_DEBUG
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
33
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
34 /* Start flags */
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
35 #define PSF_DROPPRIVS 0x01
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
36
5207
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
37 /* Protocols */
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
38 #define PS_BOOTP 0x0001
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
39 #define PS_ND 0x0002
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
40 #define PS_DHCP6 0x0003
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
41 #define PS_BPF_BOOTP 0x0004
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
42 #define PS_BPF_ARP 0x0005
4840
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
43
5207
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
44 /* Generic commands */
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
45 #define PS_IOCTL 0x0010
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
46 #define PS_ROUTE 0x0011 /* Also used for NETLINK */
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
47 #define PS_SCRIPT 0x0012
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
48 #define PS_UNLINK 0x0013
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
49 #define PS_READFILE 0x0014
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
50 #define PS_WRITEFILE 0x0015
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
51 #define PS_FILEMTIME 0x0016
5299
b7e676ac73c1 privsep: Access the RDM monotic file via IPC
Roy Marples <roy@marples.name>
parents: 5260
diff changeset
52 #define PS_AUTH_MONORDM 0x0017
5328
ea68407e5ac8 privsep: Implement a resource limited sandbox
Roy Marples <roy@marples.name>
parents: 5321
diff changeset
53 #define PS_CTL 0x0018
ea68407e5ac8 privsep: Implement a resource limited sandbox
Roy Marples <roy@marples.name>
parents: 5321
diff changeset
54 #define PS_CTL_EOF 0x0019
5526
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5493
diff changeset
55 #define PS_LOGREOPEN 0x0020
4989
ca9234046989 privsep: chroot the master process
Roy Marples <roy@marples.name>
parents: 4958
diff changeset
56
ca9234046989 privsep: chroot the master process
Roy Marples <roy@marples.name>
parents: 4958
diff changeset
57 /* BSD Commands */
5207
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
58 #define PS_IOCTLLINK 0x0101
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
59 #define PS_IOCTL6 0x0102
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
60 #define PS_IOCTLINDIRECT 0x0103
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
61 #define PS_IP6FORWARDING 0x0104
5223
333f66ce84bd privsep: Add a generic wrapper for getifaddrs(3)
Roy Marples <roy@marples.name>
parents: 5207
diff changeset
62 #define PS_GETIFADDRS 0x0105
5310
0a6bde63868b privsep: Remove pledges inet and dns from the master process
Roy Marples <roy@marples.name>
parents: 5299
diff changeset
63 #define PS_IFIGNOREGRP 0x0106
4989
ca9234046989 privsep: chroot the master process
Roy Marples <roy@marples.name>
parents: 4958
diff changeset
64
5260
7571d82b48da privsep: Allow dev plugins to work
Roy Marples <roy@marples.name>
parents: 5258
diff changeset
65 /* Dev Commands */
5331
d075e31eb148 privsep: For Linux and Solaris, set RLIMIT_NOFILES to nevents
Roy Marples <roy@marples.name>
parents: 5328
diff changeset
66 #define PS_DEV_LISTENING 0x1001
d075e31eb148 privsep: For Linux and Solaris, set RLIMIT_NOFILES to nevents
Roy Marples <roy@marples.name>
parents: 5328
diff changeset
67 #define PS_DEV_INITTED 0x1002
d075e31eb148 privsep: For Linux and Solaris, set RLIMIT_NOFILES to nevents
Roy Marples <roy@marples.name>
parents: 5328
diff changeset
68 #define PS_DEV_IFCMD 0x1003
5260
7571d82b48da privsep: Allow dev plugins to work
Roy Marples <roy@marples.name>
parents: 5258
diff changeset
69
7571d82b48da privsep: Allow dev plugins to work
Roy Marples <roy@marples.name>
parents: 5258
diff changeset
70 /* Dev Interface Commands (via flags) */
7571d82b48da privsep: Allow dev plugins to work
Roy Marples <roy@marples.name>
parents: 5258
diff changeset
71 #define PS_DEV_IFADDED 0x0001
7571d82b48da privsep: Allow dev plugins to work
Roy Marples <roy@marples.name>
parents: 5258
diff changeset
72 #define PS_DEV_IFREMOVED 0x0002
7571d82b48da privsep: Allow dev plugins to work
Roy Marples <roy@marples.name>
parents: 5258
diff changeset
73 #define PS_DEV_IFUPDATED 0x0003
7571d82b48da privsep: Allow dev plugins to work
Roy Marples <roy@marples.name>
parents: 5258
diff changeset
74
5328
ea68407e5ac8 privsep: Implement a resource limited sandbox
Roy Marples <roy@marples.name>
parents: 5321
diff changeset
75 /* Control Type (via flags) */
5331
d075e31eb148 privsep: For Linux and Solaris, set RLIMIT_NOFILES to nevents
Roy Marples <roy@marples.name>
parents: 5328
diff changeset
76 #define PS_CTL_PRIV 0x0004
d075e31eb148 privsep: For Linux and Solaris, set RLIMIT_NOFILES to nevents
Roy Marples <roy@marples.name>
parents: 5328
diff changeset
77 #define PS_CTL_UNPRIV 0x0005
5328
ea68407e5ac8 privsep: Implement a resource limited sandbox
Roy Marples <roy@marples.name>
parents: 5321
diff changeset
78
5207
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
79 /* Process commands */
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
80 #define PS_START 0x4000
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
81 #define PS_STOP 0x8000
4840
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
82
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
83 /* Max INET message size + meta data for IPC */
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
84 #define PS_BUFLEN ((64 * 1024) + \
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
85 sizeof(struct ps_msghdr) + \
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
86 sizeof(struct msghdr) + \
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
87 CMSG_SPACE(sizeof(struct in6_pktinfo) + \
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
88 sizeof(int)))
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
89
4868
119c8986dfc8 privsep: Enable ARP BPF filtering for interesting addresses
Roy Marples <roy@marples.name>
parents: 4848
diff changeset
90 /* Handy macro to work out if in the privsep engine or not. */
119c8986dfc8 privsep: Enable ARP BPF filtering for interesting addresses
Roy Marples <roy@marples.name>
parents: 4848
diff changeset
91 #define IN_PRIVSEP(ctx) \
119c8986dfc8 privsep: Enable ARP BPF filtering for interesting addresses
Roy Marples <roy@marples.name>
parents: 4848
diff changeset
92 ((ctx)->options & DHCPCD_PRIVSEP)
119c8986dfc8 privsep: Enable ARP BPF filtering for interesting addresses
Roy Marples <roy@marples.name>
parents: 4848
diff changeset
93 #define IN_PRIVSEP_SE(ctx) \
119c8986dfc8 privsep: Enable ARP BPF filtering for interesting addresses
Roy Marples <roy@marples.name>
parents: 4848
diff changeset
94 (((ctx)->options & (DHCPCD_PRIVSEP | DHCPCD_FORKED)) == DHCPCD_PRIVSEP)
119c8986dfc8 privsep: Enable ARP BPF filtering for interesting addresses
Roy Marples <roy@marples.name>
parents: 4848
diff changeset
95
5321
41b99a2a12cf privsep: Limit rights generically rather than Capsicum specifc
Roy Marples <roy@marples.name>
parents: 5310
diff changeset
96 #if defined(PRIVSEP) && defined(HAVE_CAPSICUM)
41b99a2a12cf privsep: Limit rights generically rather than Capsicum specifc
Roy Marples <roy@marples.name>
parents: 5310
diff changeset
97 #define PRIVSEP_RIGHTS
41b99a2a12cf privsep: Limit rights generically rather than Capsicum specifc
Roy Marples <roy@marples.name>
parents: 5310
diff changeset
98 #endif
41b99a2a12cf privsep: Limit rights generically rather than Capsicum specifc
Roy Marples <roy@marples.name>
parents: 5310
diff changeset
99
5461
30f55aaa5fd6 privsep: Add the SECCOMP BPF sandbox for Linux
Roy Marples <roy@marples.name>
parents: 5459
diff changeset
100 #ifdef __linux__
30f55aaa5fd6 privsep: Add the SECCOMP BPF sandbox for Linux
Roy Marples <roy@marples.name>
parents: 5459
diff changeset
101 # include <linux/version.h>
30f55aaa5fd6 privsep: Add the SECCOMP BPF sandbox for Linux
Roy Marples <roy@marples.name>
parents: 5459
diff changeset
102 # if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0)
30f55aaa5fd6 privsep: Add the SECCOMP BPF sandbox for Linux
Roy Marples <roy@marples.name>
parents: 5459
diff changeset
103 # define HAVE_SECCOMP
30f55aaa5fd6 privsep: Add the SECCOMP BPF sandbox for Linux
Roy Marples <roy@marples.name>
parents: 5459
diff changeset
104 # endif
30f55aaa5fd6 privsep: Add the SECCOMP BPF sandbox for Linux
Roy Marples <roy@marples.name>
parents: 5459
diff changeset
105 #endif
30f55aaa5fd6 privsep: Add the SECCOMP BPF sandbox for Linux
Roy Marples <roy@marples.name>
parents: 5459
diff changeset
106
4840
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
107 #include "config.h"
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
108 #include "arp.h"
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
109 #include "dhcp.h"
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
110 #include "dhcpcd.h"
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
111
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
112 struct ps_addr {
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
113 sa_family_t psa_family;
4951
3a8e7a111dd9 privsep: sa_family_t can be a different size
Roy Marples <roy@marples.name>
parents: 4946
diff changeset
114 uint8_t psa_pad[4 - sizeof(sa_family_t)];
4840
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
115 union {
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
116 struct in_addr psau_in_addr;
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
117 struct in6_addr psau_in6_addr;
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
118 } psa_u;
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
119 #define psa_in_addr psa_u.psau_in_addr
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
120 #define psa_in6_addr psa_u.psau_in6_addr
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
121 };
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
122
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
123 /* Uniquely identify a process */
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
124 struct ps_id {
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
125 struct ps_addr psi_addr;
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
126 unsigned int psi_ifindex;
5207
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
127 uint16_t psi_cmd;
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
128 uint8_t psi_pad[2];
4946
c80386966f1f privsep: Pad structs out so there are no uninited memory issues
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
129 };
c80386966f1f privsep: Pad structs out so there are no uninited memory issues
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
130
c80386966f1f privsep: Pad structs out so there are no uninited memory issues
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
131 struct ps_msghdr {
5207
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
132 uint16_t ps_cmd;
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
133 uint8_t ps_pad[sizeof(unsigned long) - sizeof(uint16_t)];
4946
c80386966f1f privsep: Pad structs out so there are no uninited memory issues
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
134 unsigned long ps_flags;
c80386966f1f privsep: Pad structs out so there are no uninited memory issues
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
135 struct ps_id ps_id;
c80386966f1f privsep: Pad structs out so there are no uninited memory issues
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
136 socklen_t ps_namelen;
c80386966f1f privsep: Pad structs out so there are no uninited memory issues
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
137 socklen_t ps_controllen;
c80386966f1f privsep: Pad structs out so there are no uninited memory issues
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
138 uint8_t ps_pad2[sizeof(size_t) - sizeof(socklen_t)];
c80386966f1f privsep: Pad structs out so there are no uninited memory issues
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
139 size_t ps_datalen;
c80386966f1f privsep: Pad structs out so there are no uninited memory issues
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
140 };
c80386966f1f privsep: Pad structs out so there are no uninited memory issues
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
141
c80386966f1f privsep: Pad structs out so there are no uninited memory issues
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
142 struct ps_msg {
c80386966f1f privsep: Pad structs out so there are no uninited memory issues
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
143 struct ps_msghdr psm_hdr;
c80386966f1f privsep: Pad structs out so there are no uninited memory issues
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
144 uint8_t psm_data[PS_BUFLEN];
4840
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
145 };
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
146
5231
a2c342295221 privsep: Enable Capsicum for all processes.
Roy Marples <roy@marples.name>
parents: 5228
diff changeset
147 struct bpf;
4840
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
148 struct ps_process {
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
149 TAILQ_ENTRY(ps_process) next;
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
150 struct dhcpcd_ctx *psp_ctx;
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
151 struct ps_id psp_id;
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
152 pid_t psp_pid;
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
153 int psp_fd;
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
154 int psp_work_fd;
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
155 unsigned int psp_ifindex;
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
156 char psp_ifname[IF_NAMESIZE];
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
157 uint16_t psp_proto;
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
158 const char *psp_protostr;
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
159
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
160 #ifdef INET
5231
a2c342295221 privsep: Enable Capsicum for all processes.
Roy Marples <roy@marples.name>
parents: 5228
diff changeset
161 int (*psp_filter)(const struct bpf *, const struct in_addr *);
4840
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
162 struct interface psp_ifp; /* Move BPF gubbins elsewhere */
5231
a2c342295221 privsep: Enable Capsicum for all processes.
Roy Marples <roy@marples.name>
parents: 5228
diff changeset
163 struct bpf *psp_bpf;
4840
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
164 #endif
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
165 };
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
166 TAILQ_HEAD(ps_process_head, ps_process);
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
167
5332
b22045bba8b9 privsep: control proxy is no longer optional
Roy Marples <roy@marples.name>
parents: 5331
diff changeset
168 #include "privsep-control.h"
4840
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
169 #include "privsep-inet.h"
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
170 #include "privsep-root.h"
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
171 #ifdef INET
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
172 #include "privsep-bpf.h"
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
173 #endif
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
174
4953
109206a59cc6 privsep: Delay control startup after starting privsep
Roy Marples <roy@marples.name>
parents: 4951
diff changeset
175 int ps_init(struct dhcpcd_ctx *);
4840
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
176 int ps_start(struct dhcpcd_ctx *);
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
177 int ps_stop(struct dhcpcd_ctx *);
5462
6e80b8c6f70c privsep: Log if the platform sandbox is unavailable or available
Roy Marples <roy@marples.name>
parents: 5461
diff changeset
178 int ps_entersandbox(const char *, const char **);
5466
8bf1ce29152c privsep: sandbox the launcher process
Roy Marples <roy@marples.name>
parents: 5462
diff changeset
179 int ps_mastersandbox(struct dhcpcd_ctx *, const char *);
4840
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
180
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
181 int ps_unrollmsg(struct msghdr *, struct ps_msghdr *, const void *, size_t);
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
182 ssize_t ps_sendpsmmsg(struct dhcpcd_ctx *, int,
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
183 struct ps_msghdr *, const struct msghdr *);
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
184 ssize_t ps_sendpsmdata(struct dhcpcd_ctx *, int,
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
185 struct ps_msghdr *, const void *, size_t);
5207
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
186 ssize_t ps_sendmsg(struct dhcpcd_ctx *, int, uint16_t, unsigned long,
4840
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
187 const struct msghdr *);
5207
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
188 ssize_t ps_sendcmd(struct dhcpcd_ctx *, int, uint16_t, unsigned long,
4840
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
189 const void *data, size_t len);
5207
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5204
diff changeset
190 ssize_t ps_recvmsg(struct dhcpcd_ctx *, int, uint16_t, int);
4840
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
191 ssize_t ps_recvpsmsg(struct dhcpcd_ctx *, int,
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
192 ssize_t (*callback)(void *, struct ps_msghdr *, struct msghdr *), void *);
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
193
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
194 /* Internal privsep functions. */
5321
41b99a2a12cf privsep: Limit rights generically rather than Capsicum specifc
Roy Marples <roy@marples.name>
parents: 5310
diff changeset
195 int ps_setbuf_fdpair(int []);
5459
4ac77faa4990 privsep: Fold capsicum and pledge entry points into ps_entersandbox
Roy Marples <roy@marples.name>
parents: 5444
diff changeset
196
5321
41b99a2a12cf privsep: Limit rights generically rather than Capsicum specifc
Roy Marples <roy@marples.name>
parents: 5310
diff changeset
197 #ifdef PRIVSEP_RIGHTS
41b99a2a12cf privsep: Limit rights generically rather than Capsicum specifc
Roy Marples <roy@marples.name>
parents: 5310
diff changeset
198 int ps_rights_limit_ioctl(int);
41b99a2a12cf privsep: Limit rights generically rather than Capsicum specifc
Roy Marples <roy@marples.name>
parents: 5310
diff changeset
199 int ps_rights_limit_fd_fctnl(int);
41b99a2a12cf privsep: Limit rights generically rather than Capsicum specifc
Roy Marples <roy@marples.name>
parents: 5310
diff changeset
200 int ps_rights_limit_fd_rdonly(int);
5493
41d06921177b privsep: We need getsockopt as well as setsockopt on the link socket
Roy Marples <roy@marples.name>
parents: 5492
diff changeset
201 int ps_rights_limit_fd_sockopt(int);
5321
41b99a2a12cf privsep: Limit rights generically rather than Capsicum specifc
Roy Marples <roy@marples.name>
parents: 5310
diff changeset
202 int ps_rights_limit_fd(int);
41b99a2a12cf privsep: Limit rights generically rather than Capsicum specifc
Roy Marples <roy@marples.name>
parents: 5310
diff changeset
203 int ps_rights_limit_fdpair(int []);
41b99a2a12cf privsep: Limit rights generically rather than Capsicum specifc
Roy Marples <roy@marples.name>
parents: 5310
diff changeset
204 #endif
5459
4ac77faa4990 privsep: Fold capsicum and pledge entry points into ps_entersandbox
Roy Marples <roy@marples.name>
parents: 5444
diff changeset
205
5461
30f55aaa5fd6 privsep: Add the SECCOMP BPF sandbox for Linux
Roy Marples <roy@marples.name>
parents: 5459
diff changeset
206 #ifdef HAVE_SECCOMP
30f55aaa5fd6 privsep: Add the SECCOMP BPF sandbox for Linux
Roy Marples <roy@marples.name>
parents: 5459
diff changeset
207 int ps_seccomp_enter(void);
30f55aaa5fd6 privsep: Add the SECCOMP BPF sandbox for Linux
Roy Marples <roy@marples.name>
parents: 5459
diff changeset
208 #endif
30f55aaa5fd6 privsep: Add the SECCOMP BPF sandbox for Linux
Roy Marples <roy@marples.name>
parents: 5459
diff changeset
209
4840
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
210 pid_t ps_dostart(struct dhcpcd_ctx * ctx,
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
211 pid_t *priv_pid, int *priv_fd,
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
212 void (*recv_msg)(void *), void (*recv_unpriv_msg),
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
213 void *recv_ctx, int (*callback)(void *), void (*)(int, void *),
4989
ca9234046989 privsep: chroot the master process
Roy Marples <roy@marples.name>
parents: 4958
diff changeset
214 unsigned int);
4840
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
215 int ps_dostop(struct dhcpcd_ctx *ctx, pid_t *pid, int *fd);
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
216
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
217 struct ps_process *ps_findprocess(struct dhcpcd_ctx *, struct ps_id *);
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
218 struct ps_process *ps_newprocess(struct dhcpcd_ctx *, struct ps_id *);
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
219 void ps_freeprocess(struct ps_process *);
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
220 void ps_freeprocesses(struct dhcpcd_ctx *, struct ps_process *);
073fcd86db9b privsep: Add support for priviledge separation
Roy Marples <roy@marples.name>
parents:
diff changeset
221 #endif