From ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Tue, 13 Mar 2012 15:28:01 +0000 Subject: [PATCH] Implement syslog syscall decoder * linux/dummy.h (sys_syslog): Remove. * linux/syscall.h (sys_syslog): New prototype. * system.c (syslog_action_type): New xlat structure. (sys_syslog): New function. --- linux/dummy.h | 1 - linux/syscall.h | 1 + system.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) diff --git a/linux/dummy.h b/linux/dummy.h index f22a8d32..08b5b109 100644 --- a/linux/dummy.h +++ b/linux/dummy.h @@ -47,7 +47,6 @@ #define sys_rt_tgsigqueueinfo printargs #define sys_sync_file_range printargs #define sys_sysfs printargs -#define sys_syslog printargs #define sys_vm86old printargs #define sys_vm86 printargs diff --git a/linux/syscall.h b/linux/syscall.h index 18039703..b74c6c40 100644 --- a/linux/syscall.h +++ b/linux/syscall.h @@ -268,6 +268,7 @@ int sys_swapon(); int sys_symlinkat(); int sys_sysctl(); int sys_sysinfo(); +int sys_syslog(); int sys_tee(); int sys_tgkill(); int sys_time(); diff --git a/system.c b/system.c index 61a614a7..54984494 100644 --- a/system.c +++ b/system.c @@ -214,6 +214,72 @@ sys_personality(struct tcb *tcp) return 0; } +enum { + SYSLOG_ACTION_CLOSE = 0, + SYSLOG_ACTION_OPEN, + SYSLOG_ACTION_READ, + SYSLOG_ACTION_READ_ALL, + SYSLOG_ACTION_READ_CLEAR, + SYSLOG_ACTION_CLEAR, + SYSLOG_ACTION_CONSOLE_OFF, + SYSLOG_ACTION_CONSOLE_ON, + SYSLOG_ACTION_CONSOLE_LEVEL, + SYSLOG_ACTION_SIZE_UNREAD, + SYSLOG_ACTION_SIZE_BUFFER +}; + +static const struct xlat syslog_action_type[] = { + { SYSLOG_ACTION_CLOSE, "SYSLOG_ACTION_CLOSE" }, + { SYSLOG_ACTION_OPEN, "SYSLOG_ACTION_OPEN" }, + { SYSLOG_ACTION_READ, "SYSLOG_ACTION_READ" }, + { SYSLOG_ACTION_READ_ALL, "SYSLOG_ACTION_READ_ALL" }, + { SYSLOG_ACTION_READ_CLEAR, "SYSLOG_ACTION_READ_CLEAR" }, + { SYSLOG_ACTION_CLEAR, "SYSLOG_ACTION_CLEAR" }, + { SYSLOG_ACTION_CONSOLE_OFF, "SYSLOG_ACTION_CONSOLE_OFF" }, + { SYSLOG_ACTION_CONSOLE_ON, "SYSLOG_ACTION_CONSOLE_ON" }, + { SYSLOG_ACTION_CONSOLE_LEVEL, "SYSLOG_ACTION_CONSOLE_LEVEL" }, + { SYSLOG_ACTION_SIZE_UNREAD, "SYSLOG_ACTION_SIZE_UNREAD" }, + { SYSLOG_ACTION_SIZE_BUFFER, "SYSLOG_ACTION_SIZE_BUFFER" }, + { 0, NULL } +}; + +int +sys_syslog(struct tcb *tcp) +{ + int type = tcp->u_arg[0]; + + if (entering(tcp)) { + /* type */ + printxval(syslog_action_type, type, "SYSLOG_ACTION_???"); + tprints(", "); + } + + switch (type) { + case SYSLOG_ACTION_READ: + case SYSLOG_ACTION_READ_ALL: + case SYSLOG_ACTION_READ_CLEAR: + if (entering(tcp)) + return 0; + break; + default: + if (entering(tcp)) { + tprintf("%#lx, %lu", + tcp->u_arg[1], tcp->u_arg[2]); + } + return 0; + } + + /* bufp */ + if (syserror(tcp)) + tprintf("%#lx", tcp->u_arg[1]); + else + printstr(tcp, tcp->u_arg[1], tcp->u_rval); + /* len */ + tprintf(", %d", (int) tcp->u_arg[2]); + + return 0; +} + #include static const struct xlat bootflags1[] = { { LINUX_REBOOT_MAGIC1, "LINUX_REBOOT_MAGIC1" }, -- 2.50.1