hc
2023-02-13 e440ec23c5a540cdd3f7464e8779219be6fd3d95
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
/*
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 *
 * Copyright (C) 1995, 96, 97, 98, 99, 2000, 01, 02 by Ralf Baechle
 * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
 * Copyright (C) 2001 MIPS Technologies, Inc.
 */
#include <linux/errno.h>
#include <asm/asm.h>
#include <asm/asmmacro.h>
#include <asm/irqflags.h>
#include <asm/mipsregs.h>
#include <asm/regdef.h>
#include <asm/stackframe.h>
#include <asm/asm-offsets.h>
#include <asm/sysmips.h>
#include <asm/thread_info.h>
#include <asm/unistd.h>
#include <asm/war.h>
 
#ifndef CONFIG_BINFMT_ELF32
/* Neither O32 nor N32, so define handle_sys here */
#define handle_sys64 handle_sys
#endif
 
   .align    5
NESTED(handle_sys64, PT_SIZE, sp)
#if !defined(CONFIG_MIPS32_O32) && !defined(CONFIG_MIPS32_N32)
   /*
    * When 32-bit compatibility is configured scall_o32.S
    * already did this.
    */
   .set    noat
   SAVE_SOME
   TRACE_IRQS_ON_RELOAD
   STI
   .set    at
#endif
 
#if !defined(CONFIG_MIPS32_O32) && !defined(CONFIG_MIPS32_N32)
   ld    t1, PT_EPC(sp)        # skip syscall on return
   daddiu    t1, 4            # skip to next instruction
   sd    t1, PT_EPC(sp)
#endif
 
   sd    a3, PT_R26(sp)        # save a3 for syscall restarting
 
   li    t1, _TIF_WORK_SYSCALL_ENTRY
   LONG_L    t0, TI_FLAGS($28)    # syscall tracing enabled?
   and    t0, t1, t0
   bnez    t0, syscall_trace_entry
 
syscall_common:
   dsubu    t2, v0, __NR_64_Linux
   sltiu   t0, t2, __NR_64_Linux_syscalls + 1
   beqz    t0, illegal_syscall
 
   dsll    t0, t2, 3        # offset into table
   dla    t2, sys_call_table
   daddu    t0, t2, t0
   ld    t2, (t0)        # syscall routine
   beqz    t2, illegal_syscall
 
   jalr    t2            # Do The Real Thing (TM)
 
   li    t0, -EMAXERRNO - 1    # error?
   sltu    t0, t0, v0
   sd    t0, PT_R7(sp)        # set error flag
   beqz    t0, 1f
 
   ld    t1, PT_R2(sp)        # syscall number
   dnegu    v0            # error
   sd    t1, PT_R0(sp)        # save it for syscall restarting
1:    sd    v0, PT_R2(sp)        # result
 
n64_syscall_exit:
   j    syscall_exit_partial
 
/* ------------------------------------------------------------------------ */
 
syscall_trace_entry:
   SAVE_STATIC
   move    a0, sp
   move    a1, v0
   jal    syscall_trace_enter
 
   bltz    v0, 1f            # seccomp failed? Skip syscall
 
   RESTORE_STATIC
   ld    v0, PT_R2(sp)        # Restore syscall (maybe modified)
   ld    a0, PT_R4(sp)        # Restore argument registers
   ld    a1, PT_R5(sp)
   ld    a2, PT_R6(sp)
   ld    a3, PT_R7(sp)
   ld    a4, PT_R8(sp)
   ld    a5, PT_R9(sp)
   j    syscall_common
 
1:    j    syscall_exit
 
illegal_syscall:
   /* This also isn't a 64-bit syscall, throw an error.  */
   li    v0, ENOSYS            # error
   sd    v0, PT_R2(sp)
   li    t0, 1                # set error flag
   sd    t0, PT_R7(sp)
   j    n64_syscall_exit
   END(handle_sys64)
 
   .align    3
   .type    sys_call_table, @object
EXPORT(sys_call_table)
   PTR    sys_read            /* 5000 */
   PTR    sys_write
   PTR    sys_open
   PTR    sys_close
   PTR    sys_newstat
   PTR    sys_newfstat            /* 5005 */
   PTR    sys_newlstat
   PTR    sys_poll
   PTR    sys_lseek
   PTR    sys_mips_mmap
   PTR    sys_mprotect            /* 5010 */
   PTR    sys_munmap
   PTR    sys_brk
   PTR    sys_rt_sigaction
   PTR    sys_rt_sigprocmask
   PTR    sys_ioctl            /* 5015 */
   PTR    sys_pread64
   PTR    sys_pwrite64
   PTR    sys_readv
   PTR    sys_writev
   PTR    sys_access            /* 5020 */
   PTR    sysm_pipe
   PTR    sys_select
   PTR    sys_sched_yield
   PTR    sys_mremap
   PTR    sys_msync            /* 5025 */
   PTR    sys_mincore
   PTR    sys_madvise
   PTR    sys_shmget
   PTR    sys_shmat
   PTR    sys_shmctl            /* 5030 */
   PTR    sys_dup
   PTR    sys_dup2
   PTR    sys_pause
   PTR    sys_nanosleep
   PTR    sys_getitimer            /* 5035 */
   PTR    sys_setitimer
   PTR    sys_alarm
   PTR    sys_getpid
   PTR    sys_sendfile64
   PTR    sys_socket            /* 5040 */
   PTR    sys_connect
   PTR    sys_accept
   PTR    sys_sendto
   PTR    sys_recvfrom
   PTR    sys_sendmsg            /* 5045 */
   PTR    sys_recvmsg
   PTR    sys_shutdown
   PTR    sys_bind
   PTR    sys_listen
   PTR    sys_getsockname            /* 5050 */
   PTR    sys_getpeername
   PTR    sys_socketpair
   PTR    sys_setsockopt
   PTR    sys_getsockopt
   PTR    __sys_clone            /* 5055 */
   PTR    __sys_fork
   PTR    sys_execve
   PTR    sys_exit
   PTR    sys_wait4
   PTR    sys_kill            /* 5060 */
   PTR    sys_newuname
   PTR    sys_semget
   PTR    sys_semop
   PTR    sys_semctl
   PTR    sys_shmdt            /* 5065 */
   PTR    sys_msgget
   PTR    sys_msgsnd
   PTR    sys_msgrcv
   PTR    sys_msgctl
   PTR    sys_fcntl            /* 5070 */
   PTR    sys_flock
   PTR    sys_fsync
   PTR    sys_fdatasync
   PTR    sys_truncate
   PTR    sys_ftruncate            /* 5075 */
   PTR    sys_getdents
   PTR    sys_getcwd
   PTR    sys_chdir
   PTR    sys_fchdir
   PTR    sys_rename            /* 5080 */
   PTR    sys_mkdir
   PTR    sys_rmdir
   PTR    sys_creat
   PTR    sys_link
   PTR    sys_unlink            /* 5085 */
   PTR    sys_symlink
   PTR    sys_readlink
   PTR    sys_chmod
   PTR    sys_fchmod
   PTR    sys_chown            /* 5090 */
   PTR    sys_fchown
   PTR    sys_lchown
   PTR    sys_umask
   PTR    sys_gettimeofday
   PTR    sys_getrlimit            /* 5095 */
   PTR    sys_getrusage
   PTR    sys_sysinfo
   PTR    sys_times
   PTR    sys_ptrace
   PTR    sys_getuid            /* 5100 */
   PTR    sys_syslog
   PTR    sys_getgid
   PTR    sys_setuid
   PTR    sys_setgid
   PTR    sys_geteuid            /* 5105 */
   PTR    sys_getegid
   PTR    sys_setpgid
   PTR    sys_getppid
   PTR    sys_getpgrp
   PTR    sys_setsid            /* 5110 */
   PTR    sys_setreuid
   PTR    sys_setregid
   PTR    sys_getgroups
   PTR    sys_setgroups
   PTR    sys_setresuid            /* 5115 */
   PTR    sys_getresuid
   PTR    sys_setresgid
   PTR    sys_getresgid
   PTR    sys_getpgid
   PTR    sys_setfsuid            /* 5120 */
   PTR    sys_setfsgid
   PTR    sys_getsid
   PTR    sys_capget
   PTR    sys_capset
   PTR    sys_rt_sigpending        /* 5125 */
   PTR    sys_rt_sigtimedwait
   PTR    sys_rt_sigqueueinfo
   PTR    sys_rt_sigsuspend
   PTR    sys_sigaltstack
   PTR    sys_utime            /* 5130 */
   PTR    sys_mknod
   PTR    sys_personality
   PTR    sys_ustat
   PTR    sys_statfs
   PTR    sys_fstatfs            /* 5135 */
   PTR    sys_sysfs
   PTR    sys_getpriority
   PTR    sys_setpriority
   PTR    sys_sched_setparam
   PTR    sys_sched_getparam        /* 5140 */
   PTR    sys_sched_setscheduler
   PTR    sys_sched_getscheduler
   PTR    sys_sched_get_priority_max
   PTR    sys_sched_get_priority_min
   PTR    sys_sched_rr_get_interval    /* 5145 */
   PTR    sys_mlock
   PTR    sys_munlock
   PTR    sys_mlockall
   PTR    sys_munlockall
   PTR    sys_vhangup            /* 5150 */
   PTR    sys_pivot_root
   PTR    sys_sysctl
   PTR    sys_prctl
   PTR    sys_adjtimex
   PTR    sys_setrlimit            /* 5155 */
   PTR    sys_chroot
   PTR    sys_sync
   PTR    sys_acct
   PTR    sys_settimeofday
   PTR    sys_mount            /* 5160 */
   PTR    sys_umount
   PTR    sys_swapon
   PTR    sys_swapoff
   PTR    sys_reboot
   PTR    sys_sethostname            /* 5165 */
   PTR    sys_setdomainname
   PTR    sys_ni_syscall            /* was create_module */
   PTR    sys_init_module
   PTR    sys_delete_module
   PTR    sys_ni_syscall            /* 5170, was get_kernel_syms */
   PTR    sys_ni_syscall            /* was query_module */
   PTR    sys_quotactl
   PTR    sys_ni_syscall            /* was nfsservctl */
   PTR    sys_ni_syscall            /* res. for getpmsg */
   PTR    sys_ni_syscall            /* 5175     for putpmsg */
   PTR    sys_ni_syscall            /* res. for afs_syscall */
   PTR    sys_ni_syscall            /* res. for security */
   PTR    sys_gettid
   PTR    sys_readahead
   PTR    sys_setxattr            /* 5180 */
   PTR    sys_lsetxattr
   PTR    sys_fsetxattr
   PTR    sys_getxattr
   PTR    sys_lgetxattr
   PTR    sys_fgetxattr            /* 5185 */
   PTR    sys_listxattr
   PTR    sys_llistxattr
   PTR    sys_flistxattr
   PTR    sys_removexattr
   PTR    sys_lremovexattr        /* 5190 */
   PTR    sys_fremovexattr
   PTR    sys_tkill
   PTR    sys_ni_syscall
   PTR    sys_futex
   PTR    sys_sched_setaffinity        /* 5195 */
   PTR    sys_sched_getaffinity
   PTR    sys_cacheflush
   PTR    sys_cachectl
   PTR    __sys_sysmips
   PTR    sys_io_setup            /* 5200 */
   PTR    sys_io_destroy
   PTR    sys_io_getevents
   PTR    sys_io_submit
   PTR    sys_io_cancel
   PTR    sys_exit_group            /* 5205 */
   PTR    sys_lookup_dcookie
   PTR    sys_epoll_create
   PTR    sys_epoll_ctl
   PTR    sys_epoll_wait
   PTR    sys_remap_file_pages        /* 5210 */
   PTR    sys_rt_sigreturn
   PTR    sys_set_tid_address
   PTR    sys_restart_syscall
   PTR    sys_semtimedop
   PTR    sys_fadvise64_64        /* 5215 */
   PTR    sys_timer_create
   PTR    sys_timer_settime
   PTR    sys_timer_gettime
   PTR    sys_timer_getoverrun
   PTR    sys_timer_delete        /* 5220 */
   PTR    sys_clock_settime
   PTR    sys_clock_gettime
   PTR    sys_clock_getres
   PTR    sys_clock_nanosleep
   PTR    sys_tgkill            /* 5225 */
   PTR    sys_utimes
   PTR    sys_mbind
   PTR    sys_get_mempolicy
   PTR    sys_set_mempolicy
   PTR    sys_mq_open            /* 5230 */
   PTR    sys_mq_unlink
   PTR    sys_mq_timedsend
   PTR    sys_mq_timedreceive
   PTR    sys_mq_notify
   PTR    sys_mq_getsetattr        /* 5235 */
   PTR    sys_ni_syscall            /* sys_vserver */
   PTR    sys_waitid
   PTR    sys_ni_syscall            /* available, was setaltroot */
   PTR    sys_add_key
   PTR    sys_request_key            /* 5240 */
   PTR    sys_keyctl
   PTR    sys_set_thread_area
   PTR    sys_inotify_init
   PTR    sys_inotify_add_watch
   PTR    sys_inotify_rm_watch        /* 5245 */
   PTR    sys_migrate_pages
   PTR    sys_openat
   PTR    sys_mkdirat
   PTR    sys_mknodat
   PTR    sys_fchownat            /* 5250 */
   PTR    sys_futimesat
   PTR    sys_newfstatat
   PTR    sys_unlinkat
   PTR    sys_renameat
   PTR    sys_linkat            /* 5255 */
   PTR    sys_symlinkat
   PTR    sys_readlinkat
   PTR    sys_fchmodat
   PTR    sys_faccessat
   PTR    sys_pselect6            /* 5260 */
   PTR    sys_ppoll
   PTR    sys_unshare
   PTR    sys_splice
   PTR    sys_sync_file_range
   PTR    sys_tee                /* 5265 */
   PTR    sys_vmsplice
   PTR    sys_move_pages
   PTR    sys_set_robust_list
   PTR    sys_get_robust_list
   PTR    sys_kexec_load            /* 5270 */
   PTR    sys_getcpu
   PTR    sys_epoll_pwait
   PTR    sys_ioprio_set
   PTR    sys_ioprio_get
   PTR    sys_utimensat            /* 5275 */
   PTR    sys_signalfd
   PTR    sys_ni_syscall            /* was timerfd */
   PTR    sys_eventfd
   PTR    sys_fallocate
   PTR    sys_timerfd_create        /* 5280 */
   PTR    sys_timerfd_gettime
   PTR    sys_timerfd_settime
   PTR    sys_signalfd4
   PTR    sys_eventfd2
   PTR    sys_epoll_create1        /* 5285 */
   PTR    sys_dup3
   PTR    sys_pipe2
   PTR    sys_inotify_init1
   PTR    sys_preadv
   PTR    sys_pwritev            /* 5290 */
   PTR    sys_rt_tgsigqueueinfo
   PTR    sys_perf_event_open
   PTR    sys_accept4
   PTR    sys_recvmmsg
   PTR    sys_fanotify_init        /* 5295 */
   PTR    sys_fanotify_mark
   PTR    sys_prlimit64
   PTR    sys_name_to_handle_at
   PTR    sys_open_by_handle_at
   PTR    sys_clock_adjtime        /* 5300 */
   PTR    sys_syncfs
   PTR    sys_sendmmsg
   PTR    sys_setns
   PTR    sys_process_vm_readv
   PTR    sys_process_vm_writev        /* 5305 */
   PTR    sys_kcmp
   PTR    sys_finit_module
   PTR    sys_getdents64
   PTR    sys_sched_setattr
   PTR    sys_sched_getattr        /* 5310 */
   PTR    sys_renameat2
   PTR    sys_seccomp
   PTR    sys_getrandom
   PTR    sys_memfd_create
   PTR    sys_bpf                /* 5315 */
   PTR    sys_execveat
   PTR    sys_userfaultfd
   PTR    sys_membarrier
   PTR    sys_mlock2
   PTR    sys_copy_file_range        /* 5320 */
   PTR    sys_preadv2
   PTR    sys_pwritev2
   PTR    sys_pkey_mprotect
   PTR    sys_pkey_alloc
   PTR    sys_pkey_free            /* 5325 */
   PTR    sys_statx
   PTR    sys_rseq
   PTR    sys_io_pgetevents
   .size    sys_call_table,.-sys_call_table