Skip to content
This repository was archived by the owner on Jan 6, 2025. It is now read-only.

Commit 5766039

Browse files
author
Sarah Jelinek
authored
Merge pull request #38 from GBuella/logging_continued
Logging continued
2 parents 5807c1e + ea97ecf commit 5766039

File tree

3 files changed

+897
-148
lines changed

3 files changed

+897
-148
lines changed

examples/syscall_desc.c

Lines changed: 171 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,16 @@
3434

3535
#include <stddef.h>
3636
#include <syscall.h>
37+
#include <fcntl.h>
3738

3839
#define SARGS(name, r, ...) \
3940
[SYS_##name] = {#name, r, {__VA_ARGS__, }}
4041

42+
/* Linux syscalls on X86_64 */
4143
static const struct syscall_desc table[] = {
4244
SARGS(read, rdec, arg_fd, arg_, arg_),
4345
SARGS(write, rdec, arg_fd, arg_, arg_),
44-
SARGS(open, rdec, arg_cstr, arg_, arg_),
46+
SARGS(open, rdec, arg_cstr, arg_open_flags, arg_mode),
4547
SARGS(close, rdec, arg_fd),
4648
SARGS(stat, rdec, arg_cstr, arg_),
4749
SARGS(fstat, rdec, arg_fd, arg_),
@@ -54,13 +56,13 @@ static const struct syscall_desc table[] = {
5456
SARGS(brk, rdec, arg_),
5557
SARGS(rt_sigaction, rdec, arg_, arg_, arg_),
5658
SARGS(rt_sigprocmask, rdec, arg_, arg_, arg_, arg_),
57-
SARGS(rt_sigreturn, rdec, arg_none),
59+
SARGS(rt_sigreturn, rnoreturn, arg_none),
5860
SARGS(ioctl, rdec, arg_fd, arg_, arg_),
5961
SARGS(pread64, rdec, arg_fd, arg_, arg_, arg_),
6062
SARGS(pwrite64, rdec, arg_fd, arg_, arg_, arg_),
6163
SARGS(readv, rdec, arg_fd, arg_, arg_),
6264
SARGS(writev, rdec, arg_fd, arg_, arg_),
63-
SARGS(access, rdec, arg_cstr, arg_),
65+
SARGS(access, rdec, arg_cstr, arg_mode),
6466
SARGS(pipe, rdec, arg_),
6567
SARGS(select, rdec, arg_, arg_, arg_, arg_, arg_),
6668
SARGS(sched_yield, rdec, arg_none),
@@ -99,7 +101,7 @@ static const struct syscall_desc table[] = {
99101
SARGS(fork, rdec, arg_none),
100102
SARGS(vfork, rdec, arg_none),
101103
SARGS(execve, rdec, arg_, arg_, arg_),
102-
SARGS(exit, rdec, arg_),
104+
SARGS(exit, rnoreturn, arg_),
103105
SARGS(wait4, rdec, arg_, arg_, arg_, arg_),
104106
SARGS(kill, rdec, arg_, arg_),
105107
SARGS(uname, rdec, arg_),
@@ -122,19 +124,19 @@ static const struct syscall_desc table[] = {
122124
SARGS(chdir, rdec, arg_cstr),
123125
SARGS(fchdir, rdec, arg_fd),
124126
SARGS(rename, rdec, arg_cstr, arg_cstr),
125-
SARGS(mkdir, rdec, arg_cstr, arg_),
127+
SARGS(mkdir, rdec, arg_cstr, arg_mode),
126128
SARGS(rmdir, rdec, arg_cstr),
127-
SARGS(creat, rdec, arg_cstr, arg_),
129+
SARGS(creat, rdec, arg_cstr, arg_mode),
128130
SARGS(link, rdec, arg_cstr, arg_cstr),
129131
SARGS(unlink, rdec, arg_cstr),
130132
SARGS(symlink, rdec, arg_cstr, arg_cstr),
131133
SARGS(readlink, rdec, arg_cstr, arg_, arg_),
132-
SARGS(chmod, rdec, arg_cstr, arg_),
133-
SARGS(fchmod, rdec, arg_fd, arg_),
134+
SARGS(chmod, rdec, arg_cstr, arg_mode),
135+
SARGS(fchmod, rdec, arg_fd, arg_mode),
134136
SARGS(chown, rdec, arg_cstr, arg_, arg_),
135137
SARGS(fchown, rdec, arg_fd, arg_, arg_),
136138
SARGS(lchown, rdec, arg_cstr, arg_, arg_),
137-
SARGS(umask, roct, arg_),
139+
SARGS(umask, rmode, arg_mode),
138140
SARGS(gettimeofday, rdec, arg_, arg_),
139141
SARGS(getrlimit, rdec, arg_, arg_),
140142
SARGS(getrusage, rdec, arg_, arg_),
@@ -248,20 +250,177 @@ static const struct syscall_desc table[] = {
248250
SARGS(timer_settime, rdec, arg_, arg_, arg_, arg_),
249251
SARGS(timer_gettime, rdec, arg_, arg_),
250252
SARGS(timer_getoverrun, rdec, arg_),
251-
SARGS(timer_delete, rdec, arg_)
252-
/* to be continued... at this point I got tired */
253+
SARGS(timer_delete, rdec, arg_),
254+
SARGS(clock_settime, rdec, arg_, arg_),
255+
SARGS(clock_gettime, rdec, arg_, arg_),
256+
SARGS(clock_getres, rdec, arg_, arg_),
257+
SARGS(clock_nanosleep, rdec, arg_, arg_, arg_, arg_),
258+
SARGS(exit_group, rnoreturn, arg_),
259+
SARGS(epoll_wait, rdec, arg_fd, arg_, arg_, arg_),
260+
SARGS(epoll_ctl, rdec, arg_fd, arg_, arg_fd, arg_),
261+
SARGS(tgkill, rdec, arg_, arg_, arg_),
262+
SARGS(utimes, rdec, arg_cstr, arg_),
263+
SARGS(mbind, rdec, arg_, arg_, arg_, arg_, arg_),
264+
SARGS(set_mempolicy, rdec, arg_, arg_, arg_),
265+
SARGS(get_mempolicy, rdec, arg_, arg_, arg_, arg_, arg_),
266+
SARGS(mq_open, rdec, arg_cstr, arg_, arg_, arg_, arg_),
267+
SARGS(mq_unlink, rdec, arg_cstr),
268+
SARGS(mq_timedsend, rdec, arg_, arg_, arg_, arg_, arg_),
269+
SARGS(mq_timedreceive, rdec, arg_, arg_, arg_, arg_, arg_),
270+
SARGS(mq_notify, rdec, arg_, arg_),
271+
SARGS(mq_getsetattr, rdec, arg_, arg_, arg_),
272+
SARGS(kexec_load, rdec, arg_, arg_, arg_, arg_),
273+
SARGS(waitid, rdec, arg_, arg_, arg_, arg_),
274+
SARGS(add_key, rdec, arg_, arg_, arg_, arg_, arg_),
275+
SARGS(request_key, rdec, arg_, arg_, arg_, arg_),
276+
SARGS(keyctl, rdec, arg_, arg_, arg_, arg_, arg_),
277+
SARGS(ioprio_set, rdec, arg_, arg_, arg_),
278+
SARGS(ioprio_get, rdec, arg_, arg_),
279+
SARGS(inotify_init, rdec, arg_none),
280+
SARGS(inotify_add_watch, rdec, arg_fd, arg_cstr, arg_),
281+
SARGS(inotify_rm_watch, rdec, arg_fd, arg_),
282+
SARGS(migrate_pages, rdec, arg_, arg_, arg_, arg_),
283+
SARGS(openat, rdec, arg_atfd, arg_cstr, arg_open_flags, arg_mode),
284+
SARGS(mkdirat, rdec, arg_atfd, arg_cstr, arg_mode),
285+
SARGS(mknodat, rdec, arg_atfd, arg_cstr, arg_mode, arg_),
286+
SARGS(fchownat, rdec, arg_atfd, arg_cstr, arg_, arg_, arg_),
287+
SARGS(futimesat, rdec, arg_atfd, arg_cstr, arg_),
288+
SARGS(newfstatat, rdec, arg_atfd, arg_cstr, arg_, arg_),
289+
SARGS(unlinkat, rdec, arg_atfd, arg_cstr, arg_),
290+
SARGS(renameat, rdec, arg_atfd, arg_cstr, arg_atfd, arg_cstr),
291+
SARGS(linkat, rdec, arg_atfd, arg_cstr, arg_atfd, arg_cstr, arg_),
292+
SARGS(symlinkat, rdec, arg_atfd, arg_cstr, arg_cstr),
293+
SARGS(readlinkat, rdec, arg_atfd, arg_cstr, arg_, arg_),
294+
SARGS(fchmodat, rdec, arg_atfd, arg_cstr, arg_mode),
295+
SARGS(faccessat, rdec, arg_atfd, arg_cstr, arg_mode),
296+
SARGS(pselect6, rdec, arg_, arg_, arg_, arg_, arg_, arg_),
297+
SARGS(ppoll, rdec, arg_, arg_, arg_, arg_, arg_),
298+
SARGS(unshare, rdec, arg_),
299+
SARGS(set_robust_list, rdec, arg_, arg_),
300+
SARGS(get_robust_list, rdec, arg_, arg_, arg_),
301+
SARGS(splice, rdec, arg_fd, arg_, arg_fd, arg_, arg_, arg_),
302+
SARGS(tee, rdec, arg_fd, arg_fd, arg_, arg_),
303+
SARGS(sync_file_range, rdec, arg_fd, arg_, arg_, arg_),
304+
SARGS(vmsplice, rdec, arg_fd, arg_, arg_, arg_),
305+
SARGS(move_pages, rdec, arg_, arg_, arg_, arg_, arg_, arg_),
306+
SARGS(utimensat, rdec, arg_atfd, arg_cstr, arg_, arg_),
307+
SARGS(epoll_pwait, rdec, arg_fd, arg_, arg_, arg_, arg_, arg_),
308+
SARGS(signalfd, rdec, arg_fd, arg_, arg_),
309+
SARGS(timerfd_create, rdec, arg_, arg_),
310+
SARGS(eventfd, rdec, arg_),
311+
SARGS(fallocate, rdec, arg_fd, arg_, arg_, arg_),
312+
SARGS(timerfd_settime, rdec, arg_fd, arg_, arg_, arg_),
313+
SARGS(timerfd_gettime, rdec, arg_fd, arg_),
314+
SARGS(accept4, rdec, arg_fd, arg_, arg_, arg_, arg_),
315+
SARGS(signalfd4, rdec, arg_fd, arg_, arg_, arg_, arg_),
316+
SARGS(eventfd2, rdec, arg_, arg_),
317+
SARGS(epoll_create1, rdec, arg_),
318+
SARGS(dup3, rdec, arg_fd, arg_fd, arg_),
319+
SARGS(pipe2, rdec, arg_, arg_),
320+
SARGS(inotify_init1, rdec, arg_),
321+
SARGS(preadv, rdec, arg_fd, arg_, arg_, arg_),
322+
SARGS(pwritev, rdec, arg_fd, arg_, arg_, arg_),
323+
SARGS(rt_tgsigqueueinfo, rdec, arg_, arg_, arg_, arg_),
324+
SARGS(perf_event_open, rdec, arg_, arg_, arg_, arg_, arg_),
325+
SARGS(recvmmsg, rdec, arg_fd, arg_, arg_, arg_, arg_),
326+
SARGS(fanotify_init, rdec, arg_, arg_),
327+
SARGS(fanotify_mark, rdec, arg_, arg_, arg_, arg_, arg_),
328+
SARGS(prlimit64, rdec, arg_, arg_, arg_, arg_),
329+
SARGS(name_to_handle_at, rdec, arg_atfd, arg_cstr, arg_, arg_, arg_),
330+
SARGS(open_by_handle_at, rdec, arg_atfd, arg_cstr, arg_),
331+
SARGS(clock_adjtime, rdec, arg_, arg_),
332+
SARGS(syncfs, rdec, arg_fd),
333+
SARGS(sendmmsg, rdec, arg_fd, arg_, arg_, arg_),
334+
SARGS(setns, rdec, arg_fd, arg_),
335+
SARGS(getcpu, rdec, arg_, arg_, arg_),
336+
SARGS(process_vm_readv, rdec, arg_, arg_, arg_, arg_, arg_, arg_),
337+
SARGS(process_vm_writev, rdec, arg_, arg_, arg_, arg_, arg_, arg_),
338+
SARGS(kcmp, rdec, arg_, arg_, arg_, arg_, arg_),
339+
SARGS(finit_module, rdec, arg_fd, arg_, arg_),
340+
#ifdef SYS_sched_setattr
341+
SARGS(sched_setattr, rdec, arg_, arg_, arg_),
342+
#endif
343+
#ifdef SYS_sched_getattr
344+
SARGS(sched_getattr, rdec, arg_, arg_, arg_, arg_),
345+
#endif
346+
#ifdef SYS_renameat2
347+
SARGS(renameat2, rdec, arg_atfd, arg_cstr, arg_atfd, arg_cstr, arg_),
348+
#endif
349+
#ifdef SYS_seccomp
350+
SARGS(seccomp, rdec, arg_, arg_, arg_),
351+
#endif
352+
#ifdef SYS_getrandom
353+
SARGS(getrandom, rdec, arg_, arg_, arg_),
354+
#endif
355+
#ifdef SYS_memfd_create
356+
SARGS(memfd_create, rdec, arg_cstr, arg_),
357+
#endif
358+
#ifdef SYS_kexec_file_load
359+
SARGS(kexec_file_load, rdec, arg_, arg_, arg_, arg_, arg_),
360+
#endif
361+
#ifdef SYS_bpf
362+
SARGS(bpf, rdec, arg_, arg_, arg_),
363+
#endif
364+
#ifdef SYS_execveat
365+
SARGS(execveat, rdec, arg_atfd, arg_cstr, arg_, arg_, arg_),
366+
#endif
367+
#ifdef SYS_userfaultfd
368+
SARGS(userfaultfd, rdec, arg_),
369+
#endif
370+
#ifdef SYS_membarrier
371+
SARGS(membarrier, rdec, arg_, arg_),
372+
#endif
373+
#ifdef SYS_mlock2
374+
SARGS(mlock2, rdec, arg_, arg_, arg_),
375+
#endif
376+
#ifdef SYS_copy_file_range
377+
SARGS(copy_file_range, rdec, arg_fd, arg_, arg_fd, arg_, arg_, arg_),
378+
#endif
379+
#ifdef SYS_preadv2
380+
SARGS(preadv2, rdec, arg_fd, arg_, arg_, arg_, arg_),
381+
#endif
382+
#ifdef SYS_pwritev2
383+
SARGS(pwritev2, rdec, arg_fd, arg_, arg_, arg_, arg_),
384+
#endif
385+
#ifdef SYS_pkey_mprotect
386+
SARGS(pkey_mprotect, rdec, arg_, arg_, arg_, arg_),
387+
#endif
388+
#ifdef SYS_pkey_alloc
389+
SARGS(pkey_alloc, rdec, arg_, arg_),
390+
#endif
391+
#ifdef SYS_pkey_free
392+
SARGS(pkey_free, rdec, arg_),
393+
#endif
253394
};
254395

255396
#undef SARGS
256397

398+
static const struct syscall_desc open_without_mode = {
399+
.name = "open",
400+
.return_type = rdec,
401+
.args = {arg_cstr, arg_open_flags, }
402+
};
403+
404+
static const struct syscall_desc openat_without_mode = {
405+
.name = "openat",
406+
.return_type = rdec,
407+
.args = {arg_atfd, arg_cstr, arg_open_flags, }
408+
};
409+
257410
const struct syscall_desc *
258-
get_syscall_desc(long syscall_number)
411+
get_syscall_desc(long syscall_number, const long args[6])
259412
{
260413
if (syscall_number < 0)
261414
return NULL;
262415

263416
if ((size_t)syscall_number >= (sizeof(table) / sizeof(table[0])))
264417
return NULL;
265418

419+
if (syscall_number == SYS_open && (args[1] & O_CREAT) == 0)
420+
return &open_without_mode;
421+
422+
if (syscall_number == SYS_openat && (args[2] & O_CREAT) == 0)
423+
return &openat_without_mode;
424+
266425
return table + syscall_number;
267426
}

examples/syscall_desc.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,19 @@
3636
enum arg_type {
3737
arg_none,
3838
arg_fd,
39+
arg_atfd,
3940
arg_cstr,
41+
arg_open_flags,
42+
arg_mode,
4043
arg_ /* no special formatting implemented yet, print as hex number */
4144
};
4245

4346
enum return_type {
4447
rhex,
4548
rdec,
4649
runsigned,
47-
roct
50+
rmode,
51+
rnoreturn
4852
};
4953

5054
struct syscall_desc {
@@ -53,6 +57,7 @@ struct syscall_desc {
5357
enum arg_type args[6];
5458
};
5559

56-
const struct syscall_desc *get_syscall_desc(long syscall_number);
60+
const struct syscall_desc *get_syscall_desc(long syscall_number,
61+
const long args[static 6]);
5762

5863
#endif

0 commit comments

Comments
 (0)