1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
6 This file is part of systemd.
8 Copyright 2010 Lennart Poettering
10 systemd is free software; you can redistribute it and/or modify it
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
13 (at your option) any later version.
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 Lesser General Public License for more details.
20 You should have received a copy of the GNU Lesser General Public License
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
24 /* Missing glibc definitions to access certain kernel APIs */
26 #include <sys/resource.h>
27 #include <sys/syscall.h>
31 #include <linux/oom.h>
32 #include <linux/input.h>
41 #include <asm/sgidefs.h>
45 #define RLIMIT_RTTIME 15
48 #ifndef F_LINUX_SPECIFIC_BASE
49 #define F_LINUX_SPECIFIC_BASE 1024
53 #define F_SETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 7)
57 #define F_GETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 8)
61 #define IP_FREEBIND 15
64 #ifndef OOM_SCORE_ADJ_MIN
65 #define OOM_SCORE_ADJ_MIN (-1000)
68 #ifndef OOM_SCORE_ADJ_MAX
69 #define OOM_SCORE_ADJ_MAX 1000
72 #ifndef AUDIT_SERVICE_START
73 #define AUDIT_SERVICE_START 1130 /* Service (daemon) start */
76 #ifndef AUDIT_SERVICE_STOP
77 #define AUDIT_SERVICE_STOP 1131 /* Service (daemon) stop */
81 #define TIOCVHANGUP 0x5437
84 #ifndef IP_TRANSPARENT
85 #define IP_TRANSPARENT 19
88 #if !HAVE_DECL_PIVOT_ROOT
89 static inline int pivot_root(const char *new_root, const char *put_old) {
90 return syscall(SYS_pivot_root, new_root, put_old);
95 # ifndef __NR_fanotify_init
96 # define __NR_fanotify_init 300
98 # ifndef __NR_fanotify_mark
99 # define __NR_fanotify_mark 301
101 #elif defined _MIPS_SIM
102 # if _MIPS_SIM == _MIPS_SIM_ABI32
103 # ifndef __NR_fanotify_init
104 # define __NR_fanotify_init 4336
106 # ifndef __NR_fanotify_mark
107 # define __NR_fanotify_mark 4337
109 # elif _MIPS_SIM == _MIPS_SIM_NABI32
110 # ifndef __NR_fanotify_init
111 # define __NR_fanotify_init 6300
113 # ifndef __NR_fanotify_mark
114 # define __NR_fanotify_mark 6301
116 # elif _MIPS_SIM == _MIPS_SIM_ABI64
117 # ifndef __NR_fanotify_init
118 # define __NR_fanotify_init 5295
120 # ifndef __NR_fanotify_mark
121 # define __NR_fanotify_mark 5296
125 # ifndef __NR_fanotify_init
126 # define __NR_fanotify_init 338
128 # ifndef __NR_fanotify_mark
129 # define __NR_fanotify_mark 339
133 #ifndef HAVE_FANOTIFY_INIT
134 static inline int fanotify_init(unsigned int flags, unsigned int event_f_flags) {
135 return syscall(__NR_fanotify_init, flags, event_f_flags);
139 #ifndef HAVE_FANOTIFY_MARK
140 static inline int fanotify_mark(int fanotify_fd, unsigned int flags, uint64_t mask,
141 int dfd, const char *pathname) {
142 #if defined _MIPS_SIM && _MIPS_SIM == _MIPS_SIM_ABI32 || defined __powerpc__ && !defined __powerpc64__ \
143 || defined __arm__ && !defined __aarch64__
150 return syscall(__NR_fanotify_mark, fanotify_fd, flags,
151 _mask._32[0], _mask._32[1], dfd, pathname);
153 return syscall(__NR_fanotify_mark, fanotify_fd, flags, mask, dfd, pathname);
158 #ifndef BTRFS_IOCTL_MAGIC
159 #define BTRFS_IOCTL_MAGIC 0x94
162 #ifndef BTRFS_PATH_NAME_MAX
163 #define BTRFS_PATH_NAME_MAX 4087
166 #ifndef BTRFS_DEVICE_PATH_NAME_MAX
167 #define BTRFS_DEVICE_PATH_NAME_MAX 1024
170 #ifndef BTRFS_FSID_SIZE
171 #define BTRFS_FSID_SIZE 16
174 #ifndef BTRFS_UUID_SIZE
175 #define BTRFS_UUID_SIZE 16
178 #ifndef HAVE_LINUX_BTRFS_H
179 struct btrfs_ioctl_vol_args {
181 char name[BTRFS_PATH_NAME_MAX + 1];
184 struct btrfs_ioctl_dev_info_args {
185 uint64_t devid; /* in/out */
186 uint8_t uuid[BTRFS_UUID_SIZE]; /* in/out */
187 uint64_t bytes_used; /* out */
188 uint64_t total_bytes; /* out */
189 uint64_t unused[379]; /* pad to 4k */
190 char path[BTRFS_DEVICE_PATH_NAME_MAX]; /* out */
193 struct btrfs_ioctl_fs_info_args {
194 uint64_t max_id; /* out */
195 uint64_t num_devices; /* out */
196 uint8_t fsid[BTRFS_FSID_SIZE]; /* out */
197 uint64_t reserved[124]; /* pad to 1k */
201 #ifndef BTRFS_IOC_DEFRAG
202 #define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, struct btrfs_ioctl_vol_args)
205 #ifndef BTRFS_IOC_DEV_INFO
206 #define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \
207 struct btrfs_ioctl_dev_info_args)
210 #ifndef BTRFS_IOC_FS_INFO
211 #define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \
212 struct btrfs_ioctl_fs_info_args)
215 #ifndef BTRFS_SUPER_MAGIC
216 #define BTRFS_SUPER_MAGIC 0x9123683E
224 #define MS_PRIVATE (1 << 18)
227 #if !HAVE_DECL_GETTID
228 static inline pid_t gettid(void) {
229 return (pid_t) syscall(SYS_gettid);
234 #define SCM_SECURITY 0x03
237 #ifndef MS_STRICTATIME
238 #define MS_STRICTATIME (1<<24)
246 #define MS_SHARED (1<<20)
249 #ifndef PR_SET_NO_NEW_PRIVS
250 #define PR_SET_NO_NEW_PRIVS 38
253 #ifndef PR_SET_CHILD_SUBREAPER
254 #define PR_SET_CHILD_SUBREAPER 36
257 #ifndef MAX_HANDLE_SZ
258 #define MAX_HANDLE_SZ 128
261 #if defined __x86_64__
262 # ifndef __NR_name_to_handle_at
263 # define __NR_name_to_handle_at 303
265 #elif defined __i386__
266 # ifndef __NR_name_to_handle_at
267 # define __NR_name_to_handle_at 341
269 #elif defined __arm__
270 # ifndef __NR_name_to_handle_at
271 # define __NR_name_to_handle_at 370
273 #elif defined __powerpc__
274 # ifndef __NR_name_to_handle_at
275 # define __NR_name_to_handle_at 345
278 # ifndef __NR_name_to_handle_at
279 # error __NR_name_to_handle_at is not defined
283 #if !HAVE_DECL_NAME_TO_HANDLE_AT
285 unsigned int handle_bytes;
287 unsigned char f_handle[0];
290 static inline int name_to_handle_at(int fd, const char *name, struct file_handle *handle, int *mnt_id, int flags) {
291 return syscall(__NR_name_to_handle_at, fd, name, handle, mnt_id, flags);
295 #ifndef HAVE_SECURE_GETENV
296 # ifdef HAVE___SECURE_GETENV
297 # define secure_getenv __secure_getenv
299 # error neither secure_getenv nor __secure_getenv are available
303 #ifndef CIFS_MAGIC_NUMBER
304 #define CIFS_MAGIC_NUMBER 0xFF534D42
307 #ifndef TFD_TIMER_CANCEL_ON_SET
308 #define TFD_TIMER_CANCEL_ON_SET (1 << 1)
312 #define SO_REUSEPORT 15
316 #define EVIOCREVOKE _IOW('E', 0x91, int)
319 #ifndef DRM_IOCTL_SET_MASTER
320 #define DRM_IOCTL_SET_MASTER _IO('d', 0x1e)
323 #ifndef DRM_IOCTL_DROP_MASTER
324 #define DRM_IOCTL_DROP_MASTER _IO('d', 0x1f)