459 lines
17 KiB
Diff
459 lines
17 KiB
Diff
From 983998134384d06aeb49a33a97400d573210e852 Mon Sep 17 00:00:00 2001
|
|
From: q66 <daniel@octaforge.org>
|
|
Date: Thu, 3 Sep 2020 05:33:48 +0200
|
|
Subject: [PATCH] add ppc64* support
|
|
|
|
---
|
|
misc/linux-platform.sh | 8 +
|
|
misc/linux/ppc64_syscall.h.in | 390 ++++++++++++++++++++++++++++++++++
|
|
src/seccomp.c | 10 +
|
|
3 files changed, 408 insertions(+)
|
|
create mode 100644 misc/linux/ppc64_syscall.h.in
|
|
|
|
diff --git misc/linux-platform.sh misc/linux-platform.sh
|
|
index 2acde97..0d949d2 100755
|
|
--- a/misc/linux-platform.sh
|
|
+++ b/misc/linux-platform.sh
|
|
@@ -22,6 +22,14 @@ case "$PLATFORM" in
|
|
seccomp_audit_arch=AUDIT_ARCH_AARCH64
|
|
syscall_file=$BASE/linux/aarch64_syscall.h.in
|
|
;;
|
|
+ ppc64le*)
|
|
+ seccomp_audit_arch=AUDIT_ARCH_PPC64LE
|
|
+ syscall_file=$BASE/linux/ppc64_syscall.h.in
|
|
+ ;;
|
|
+ ppc64*)
|
|
+ seccomp_audit_arch=AUDIT_ARCH_PPC64
|
|
+ syscall_file=$BASE/linux/ppc64_syscall.h.in
|
|
+ ;;
|
|
esac
|
|
|
|
cat << __EOF
|
|
diff --git misc/linux/ppc64_syscall.h.in misc/linux/ppc64_syscall.h.in
|
|
new file mode 100644
|
|
index 0000000..b935864
|
|
--- /dev/null
|
|
+++ b/misc/linux/ppc64_syscall.h.in
|
|
@@ -0,0 +1,390 @@
|
|
+#define __NR_restart_syscall 0
|
|
+#define __NR_exit 1
|
|
+#define __NR_fork 2
|
|
+#define __NR_read 3
|
|
+#define __NR_write 4
|
|
+#define __NR_open 5
|
|
+#define __NR_close 6
|
|
+#define __NR_waitpid 7
|
|
+#define __NR_creat 8
|
|
+#define __NR_link 9
|
|
+#define __NR_unlink 10
|
|
+#define __NR_execve 11
|
|
+#define __NR_chdir 12
|
|
+#define __NR_time 13
|
|
+#define __NR_mknod 14
|
|
+#define __NR_chmod 15
|
|
+#define __NR_lchown 16
|
|
+#define __NR_break 17
|
|
+#define __NR_oldstat 18
|
|
+#define __NR_lseek 19
|
|
+#define __NR_getpid 20
|
|
+#define __NR_mount 21
|
|
+#define __NR_umount 22
|
|
+#define __NR_setuid 23
|
|
+#define __NR_getuid 24
|
|
+#define __NR_stime 25
|
|
+#define __NR_ptrace 26
|
|
+#define __NR_alarm 27
|
|
+#define __NR_oldfstat 28
|
|
+#define __NR_pause 29
|
|
+#define __NR_utime 30
|
|
+#define __NR_stty 31
|
|
+#define __NR_gtty 32
|
|
+#define __NR_access 33
|
|
+#define __NR_nice 34
|
|
+#define __NR_ftime 35
|
|
+#define __NR_sync 36
|
|
+#define __NR_kill 37
|
|
+#define __NR_rename 38
|
|
+#define __NR_mkdir 39
|
|
+#define __NR_rmdir 40
|
|
+#define __NR_dup 41
|
|
+#define __NR_pipe 42
|
|
+#define __NR_times 43
|
|
+#define __NR_prof 44
|
|
+#define __NR_brk 45
|
|
+#define __NR_setgid 46
|
|
+#define __NR_getgid 47
|
|
+#define __NR_signal 48
|
|
+#define __NR_geteuid 49
|
|
+#define __NR_getegid 50
|
|
+#define __NR_acct 51
|
|
+#define __NR_umount2 52
|
|
+#define __NR_lock 53
|
|
+#define __NR_ioctl 54
|
|
+#define __NR_fcntl 55
|
|
+#define __NR_mpx 56
|
|
+#define __NR_setpgid 57
|
|
+#define __NR_ulimit 58
|
|
+#define __NR_oldolduname 59
|
|
+#define __NR_umask 60
|
|
+#define __NR_chroot 61
|
|
+#define __NR_ustat 62
|
|
+#define __NR_dup2 63
|
|
+#define __NR_getppid 64
|
|
+#define __NR_getpgrp 65
|
|
+#define __NR_setsid 66
|
|
+#define __NR_sigaction 67
|
|
+#define __NR_sgetmask 68
|
|
+#define __NR_ssetmask 69
|
|
+#define __NR_setreuid 70
|
|
+#define __NR_setregid 71
|
|
+#define __NR_sigsuspend 72
|
|
+#define __NR_sigpending 73
|
|
+#define __NR_sethostname 74
|
|
+#define __NR_setrlimit 75
|
|
+#define __NR_getrlimit 76
|
|
+#define __NR_getrusage 77
|
|
+#define __NR_gettimeofday 78
|
|
+#define __NR_settimeofday 79
|
|
+#define __NR_getgroups 80
|
|
+#define __NR_setgroups 81
|
|
+#define __NR_select 82
|
|
+#define __NR_symlink 83
|
|
+#define __NR_oldlstat 84
|
|
+#define __NR_readlink 85
|
|
+#define __NR_uselib 86
|
|
+#define __NR_swapon 87
|
|
+#define __NR_reboot 88
|
|
+#define __NR_readdir 89
|
|
+#define __NR_mmap 90
|
|
+#define __NR_munmap 91
|
|
+#define __NR_truncate 92
|
|
+#define __NR_ftruncate 93
|
|
+#define __NR_fchmod 94
|
|
+#define __NR_fchown 95
|
|
+#define __NR_getpriority 96
|
|
+#define __NR_setpriority 97
|
|
+#define __NR_profil 98
|
|
+#define __NR_statfs 99
|
|
+#define __NR_fstatfs 100
|
|
+#define __NR_ioperm 101
|
|
+#define __NR_socketcall 102
|
|
+#define __NR_syslog 103
|
|
+#define __NR_setitimer 104
|
|
+#define __NR_getitimer 105
|
|
+#define __NR_stat 106
|
|
+#define __NR_lstat 107
|
|
+#define __NR_fstat 108
|
|
+#define __NR_olduname 109
|
|
+#define __NR_iopl 110
|
|
+#define __NR_vhangup 111
|
|
+#define __NR_idle 112
|
|
+#define __NR_vm86 113
|
|
+#define __NR_wait4 114
|
|
+#define __NR_swapoff 115
|
|
+#define __NR_sysinfo 116
|
|
+#define __NR_ipc 117
|
|
+#define __NR_fsync 118
|
|
+#define __NR_sigreturn 119
|
|
+#define __NR_clone 120
|
|
+#define __NR_setdomainname 121
|
|
+#define __NR_uname 122
|
|
+#define __NR_modify_ldt 123
|
|
+#define __NR_adjtimex 124
|
|
+#define __NR_mprotect 125
|
|
+#define __NR_sigprocmask 126
|
|
+#define __NR_create_module 127
|
|
+#define __NR_init_module 128
|
|
+#define __NR_delete_module 129
|
|
+#define __NR_get_kernel_syms 130
|
|
+#define __NR_quotactl 131
|
|
+#define __NR_getpgid 132
|
|
+#define __NR_fchdir 133
|
|
+#define __NR_bdflush 134
|
|
+#define __NR_sysfs 135
|
|
+#define __NR_personality 136
|
|
+#define __NR_afs_syscall 137
|
|
+#define __NR_setfsuid 138
|
|
+#define __NR_setfsgid 139
|
|
+#define __NR__llseek 140
|
|
+#define __NR_getdents 141
|
|
+#define __NR__newselect 142
|
|
+#define __NR_flock 143
|
|
+#define __NR_msync 144
|
|
+#define __NR_readv 145
|
|
+#define __NR_writev 146
|
|
+#define __NR_getsid 147
|
|
+#define __NR_fdatasync 148
|
|
+#define __NR__sysctl 149
|
|
+#define __NR_mlock 150
|
|
+#define __NR_munlock 151
|
|
+#define __NR_mlockall 152
|
|
+#define __NR_munlockall 153
|
|
+#define __NR_sched_setparam 154
|
|
+#define __NR_sched_getparam 155
|
|
+#define __NR_sched_setscheduler 156
|
|
+#define __NR_sched_getscheduler 157
|
|
+#define __NR_sched_yield 158
|
|
+#define __NR_sched_get_priority_max 159
|
|
+#define __NR_sched_get_priority_min 160
|
|
+#define __NR_sched_rr_get_interval 161
|
|
+#define __NR_nanosleep 162
|
|
+#define __NR_mremap 163
|
|
+#define __NR_setresuid 164
|
|
+#define __NR_getresuid 165
|
|
+#define __NR_query_module 166
|
|
+#define __NR_poll 167
|
|
+#define __NR_nfsservctl 168
|
|
+#define __NR_setresgid 169
|
|
+#define __NR_getresgid 170
|
|
+#define __NR_prctl 171
|
|
+#define __NR_rt_sigreturn 172
|
|
+#define __NR_rt_sigaction 173
|
|
+#define __NR_rt_sigprocmask 174
|
|
+#define __NR_rt_sigpending 175
|
|
+#define __NR_rt_sigtimedwait 176
|
|
+#define __NR_rt_sigqueueinfo 177
|
|
+#define __NR_rt_sigsuspend 178
|
|
+#define __NR_pread64 179
|
|
+#define __NR_pwrite64 180
|
|
+#define __NR_chown 181
|
|
+#define __NR_getcwd 182
|
|
+#define __NR_capget 183
|
|
+#define __NR_capset 184
|
|
+#define __NR_sigaltstack 185
|
|
+#define __NR_sendfile 186
|
|
+#define __NR_getpmsg 187
|
|
+#define __NR_putpmsg 188
|
|
+#define __NR_vfork 189
|
|
+#define __NR_ugetrlimit 190
|
|
+#define __NR_readahead 191
|
|
+#define __NR_pciconfig_read 198
|
|
+#define __NR_pciconfig_write 199
|
|
+#define __NR_pciconfig_iobase 200
|
|
+#define __NR_multiplexer 201
|
|
+#define __NR_getdents64 202
|
|
+#define __NR_pivot_root 203
|
|
+#define __NR_madvise 205
|
|
+#define __NR_mincore 206
|
|
+#define __NR_gettid 207
|
|
+#define __NR_tkill 208
|
|
+#define __NR_setxattr 209
|
|
+#define __NR_lsetxattr 210
|
|
+#define __NR_fsetxattr 211
|
|
+#define __NR_getxattr 212
|
|
+#define __NR_lgetxattr 213
|
|
+#define __NR_fgetxattr 214
|
|
+#define __NR_listxattr 215
|
|
+#define __NR_llistxattr 216
|
|
+#define __NR_flistxattr 217
|
|
+#define __NR_removexattr 218
|
|
+#define __NR_lremovexattr 219
|
|
+#define __NR_fremovexattr 220
|
|
+#define __NR_futex 221
|
|
+#define __NR_sched_setaffinity 222
|
|
+#define __NR_sched_getaffinity 223
|
|
+#define __NR_tuxcall 225
|
|
+#define __NR_io_setup 227
|
|
+#define __NR_io_destroy 228
|
|
+#define __NR_io_getevents 229
|
|
+#define __NR_io_submit 230
|
|
+#define __NR_io_cancel 231
|
|
+#define __NR_set_tid_address 232
|
|
+#define __NR_fadvise64 233
|
|
+#define __NR_exit_group 234
|
|
+#define __NR_lookup_dcookie 235
|
|
+#define __NR_epoll_create 236
|
|
+#define __NR_epoll_ctl 237
|
|
+#define __NR_epoll_wait 238
|
|
+#define __NR_remap_file_pages 239
|
|
+#define __NR_timer_create 240
|
|
+#define __NR_timer_settime 241
|
|
+#define __NR_timer_gettime 242
|
|
+#define __NR_timer_getoverrun 243
|
|
+#define __NR_timer_delete 244
|
|
+#define __NR_clock_settime 245
|
|
+#define __NR_clock_gettime 246
|
|
+#define __NR_clock_getres 247
|
|
+#define __NR_clock_nanosleep 248
|
|
+#define __NR_swapcontext 249
|
|
+#define __NR_tgkill 250
|
|
+#define __NR_utimes 251
|
|
+#define __NR_statfs64 252
|
|
+#define __NR_fstatfs64 253
|
|
+#define __NR_rtas 255
|
|
+#define __NR_sys_debug_setcontext 256
|
|
+#define __NR_migrate_pages 258
|
|
+#define __NR_mbind 259
|
|
+#define __NR_get_mempolicy 260
|
|
+#define __NR_set_mempolicy 261
|
|
+#define __NR_mq_open 262
|
|
+#define __NR_mq_unlink 263
|
|
+#define __NR_mq_timedsend 264
|
|
+#define __NR_mq_timedreceive 265
|
|
+#define __NR_mq_notify 266
|
|
+#define __NR_mq_getsetattr 267
|
|
+#define __NR_kexec_load 268
|
|
+#define __NR_add_key 269
|
|
+#define __NR_request_key 270
|
|
+#define __NR_keyctl 271
|
|
+#define __NR_waitid 272
|
|
+#define __NR_ioprio_set 273
|
|
+#define __NR_ioprio_get 274
|
|
+#define __NR_inotify_init 275
|
|
+#define __NR_inotify_add_watch 276
|
|
+#define __NR_inotify_rm_watch 277
|
|
+#define __NR_spu_run 278
|
|
+#define __NR_spu_create 279
|
|
+#define __NR_pselect6 280
|
|
+#define __NR_ppoll 281
|
|
+#define __NR_unshare 282
|
|
+#define __NR_splice 283
|
|
+#define __NR_tee 284
|
|
+#define __NR_vmsplice 285
|
|
+#define __NR_openat 286
|
|
+#define __NR_mkdirat 287
|
|
+#define __NR_mknodat 288
|
|
+#define __NR_fchownat 289
|
|
+#define __NR_futimesat 290
|
|
+#define __NR_newfstatat 291
|
|
+#define __NR_unlinkat 292
|
|
+#define __NR_renameat 293
|
|
+#define __NR_linkat 294
|
|
+#define __NR_symlinkat 295
|
|
+#define __NR_readlinkat 296
|
|
+#define __NR_fchmodat 297
|
|
+#define __NR_faccessat 298
|
|
+#define __NR_get_robust_list 299
|
|
+#define __NR_set_robust_list 300
|
|
+#define __NR_move_pages 301
|
|
+#define __NR_getcpu 302
|
|
+#define __NR_epoll_pwait 303
|
|
+#define __NR_utimensat 304
|
|
+#define __NR_signalfd 305
|
|
+#define __NR_timerfd_create 306
|
|
+#define __NR_eventfd 307
|
|
+#define __NR_sync_file_range2 308
|
|
+#define __NR_fallocate 309
|
|
+#define __NR_subpage_prot 310
|
|
+#define __NR_timerfd_settime 311
|
|
+#define __NR_timerfd_gettime 312
|
|
+#define __NR_signalfd4 313
|
|
+#define __NR_eventfd2 314
|
|
+#define __NR_epoll_create1 315
|
|
+#define __NR_dup3 316
|
|
+#define __NR_pipe2 317
|
|
+#define __NR_inotify_init1 318
|
|
+#define __NR_perf_event_open 319
|
|
+#define __NR_preadv 320
|
|
+#define __NR_pwritev 321
|
|
+#define __NR_rt_tgsigqueueinfo 322
|
|
+#define __NR_fanotify_init 323
|
|
+#define __NR_fanotify_mark 324
|
|
+#define __NR_prlimit64 325
|
|
+#define __NR_socket 326
|
|
+#define __NR_bind 327
|
|
+#define __NR_connect 328
|
|
+#define __NR_listen 329
|
|
+#define __NR_accept 330
|
|
+#define __NR_getsockname 331
|
|
+#define __NR_getpeername 332
|
|
+#define __NR_socketpair 333
|
|
+#define __NR_send 334
|
|
+#define __NR_sendto 335
|
|
+#define __NR_recv 336
|
|
+#define __NR_recvfrom 337
|
|
+#define __NR_shutdown 338
|
|
+#define __NR_setsockopt 339
|
|
+#define __NR_getsockopt 340
|
|
+#define __NR_sendmsg 341
|
|
+#define __NR_recvmsg 342
|
|
+#define __NR_recvmmsg 343
|
|
+#define __NR_accept4 344
|
|
+#define __NR_name_to_handle_at 345
|
|
+#define __NR_open_by_handle_at 346
|
|
+#define __NR_clock_adjtime 347
|
|
+#define __NR_syncfs 348
|
|
+#define __NR_sendmmsg 349
|
|
+#define __NR_setns 350
|
|
+#define __NR_process_vm_readv 351
|
|
+#define __NR_process_vm_writev 352
|
|
+#define __NR_finit_module 353
|
|
+#define __NR_kcmp 354
|
|
+#define __NR_sched_setattr 355
|
|
+#define __NR_sched_getattr 356
|
|
+#define __NR_renameat2 357
|
|
+#define __NR_seccomp 358
|
|
+#define __NR_getrandom 359
|
|
+#define __NR_memfd_create 360
|
|
+#define __NR_bpf 361
|
|
+#define __NR_execveat 362
|
|
+#define __NR_switch_endian 363
|
|
+#define __NR_userfaultfd 364
|
|
+#define __NR_membarrier 365
|
|
+#define __NR_mlock2 378
|
|
+#define __NR_copy_file_range 379
|
|
+#define __NR_preadv2 380
|
|
+#define __NR_pwritev2 381
|
|
+#define __NR_kexec_file_load 382
|
|
+#define __NR_statx 383
|
|
+#define __NR_pkey_alloc 384
|
|
+#define __NR_pkey_free 385
|
|
+#define __NR_pkey_mprotect 386
|
|
+#define __NR_rseq 387
|
|
+#define __NR_io_pgetevents 388
|
|
+#define __NR_semtimedop 392
|
|
+#define __NR_semget 393
|
|
+#define __NR_semctl 394
|
|
+#define __NR_shmget 395
|
|
+#define __NR_shmctl 396
|
|
+#define __NR_shmat 397
|
|
+#define __NR_shmdt 398
|
|
+#define __NR_msgget 399
|
|
+#define __NR_msgsnd 400
|
|
+#define __NR_msgrcv 401
|
|
+#define __NR_msgctl 402
|
|
+#define __NR_pidfd_send_signal 424
|
|
+#define __NR_io_uring_setup 425
|
|
+#define __NR_io_uring_enter 426
|
|
+#define __NR_io_uring_register 427
|
|
+#define __NR_open_tree 428
|
|
+#define __NR_move_mount 429
|
|
+#define __NR_fsopen 430
|
|
+#define __NR_fsconfig 431
|
|
+#define __NR_fsmount 432
|
|
+#define __NR_fspick 433
|
|
+#define __NR_pidfd_open 434
|
|
+#define __NR_clone3 435
|
|
+
|
|
--- a/src/seccomp.c 2021-01-24 11:27:12.401550281 +0100
|
|
+++ b/src/seccomp.c 2021-01-24 11:30:18.102787637 +0100
|
|
@@ -460,13 +460,19 @@
|
|
struct iovec iov;
|
|
#if defined(__arm__)
|
|
struct pt_regs regs;
|
|
+#elif defined(__powerpc__)
|
|
+ unsigned long regs[32];
|
|
#else
|
|
struct user_regs_struct regs;
|
|
#endif
|
|
long sysnr;
|
|
const char *name;
|
|
|
|
+#if defined(__powerpc__)
|
|
+ iov.iov_base = (void *)regs;
|
|
+#else
|
|
iov.iov_base = ®s;
|
|
+#endif
|
|
iov.iov_len = sizeof(regs);
|
|
|
|
if (ptrace(PTRACE_GETREGSET, pid, 1, &iov) == -1)
|
|
@@ -478,6 +484,8 @@
|
|
sysnr = regs.regs[8];
|
|
#elif SECCOMP_AUDIT_ARCH == AUDIT_ARCH_ARM
|
|
sysnr = regs.uregs[7];
|
|
+#elif defined(__powerpc__)
|
|
+ sysnr = regs[0];
|
|
#else
|
|
#error "platform not supported"
|
|
#endif
|