@@ -25,13 +25,12 @@ extern syscall_handler_t syscall_handler_table[MAX_SYSCALLS];
2525// macro for defining syscall handlers dynamically
2626#define DEFINE_HANDLER (name , num , ...) \
2727 /* function defination for syscall handler */ \
28- int name##_grate(uint64_t cageid, uint64_t arg1, uint64_t arg1cage, \
28+ int name##_grate(uint64_t cageid, uint64_t arg1, uint64_t arg1cage, \
2929 uint64_t arg2, uint64_t arg2cage, \
3030 uint64_t arg3, uint64_t arg3cage, \
3131 uint64_t arg4, uint64_t arg4cage, \
3232 uint64_t arg5, uint64_t arg5cage, \
3333 uint64_t arg6, uint64_t arg6cage) { \
34- \
3534 int thiscage = getpid(); \
3635 int types[] = {__VA_ARGS__}; \
3736 int argsnum = sizeof(types) / sizeof(int); \
@@ -43,11 +42,11 @@ extern syscall_handler_t syscall_handler_table[MAX_SYSCALLS];
4342 int offset = 0; \
4443 \
4544 /* log buffer to print syscall with args and ret val */ \
46- offset += snprintf (log_buffer + offset , 1024 - offset , "%s(" , #name ); \
45+ offset += snprintf (log_buffer + offset , sizeof ( log_buffer ) - offset , "%s(" , #name ); \
4746 \
4847 for (int i = 0 ; i < argsnum ; i ++ ) { \
4948 if (i > 0 ) \
50- offset += snprintf(log_buffer + offset, 1024 - offset, ", "); \
49+ offset += snprintf (log_buffer + offset , sizeof ( log_buffer ) - offset , ", " ); \
5150 \
5251 if (types [i ] == ARG_STR && args [i ] != 0 ) { \
5352 char * buf = malloc (256 ); \
@@ -56,28 +55,23 @@ extern syscall_handler_t syscall_handler_table[MAX_SYSCALLS];
5655 args [i ], argcages [i ], \
5756 (uint64_t )buf , thiscage , \
5857 256 , 1 ); \
59- offset += snprintf(log_buffer + offset, 1024 - offset, \
58+ offset += snprintf (log_buffer + offset , sizeof ( log_buffer ) - offset , \
6059 "\"%s\"" , buf ); \
6160 free (buf ); \
6261 } else { \
63- offset += snprintf(log_buffer + offset, 1024 - offset, \
62+ offset += snprintf (log_buffer + offset , sizeof ( log_buffer ) - offset , \
6463 "0x%lx" , (unsigned long )args [i ]); \
6564 } \
66- } else if (types[i] == ARG_PTR || args[i] > 0xFFFFFF || args[i] == 0) { \
67- offset += snprintf(log_buffer + offset, 1024 - offset, \
65+ } else if (types [i ] == ARG_PTR ) { \
66+ offset += snprintf (log_buffer + offset , sizeof ( log_buffer ) - offset , \
6867 "0x%lx" , (unsigned long )args [i ]); \
6968 } else { \
70- offset += snprintf(log_buffer + offset, 1024 - offset, \
69+ offset += snprintf (log_buffer + offset , sizeof ( log_buffer ) - offset , \
7170 "%ld" , (long )args [i ]); \
7271 } \
7372 } \
74- offset += snprintf(log_buffer + offset, 1024 - offset, ")"); \
7573 \
76- int is_terminal = (num == 59 || num == 60 || num == 231); \
77- if (is_terminal) { \
78- fprintf(stderr, "%s\n", log_buffer); \
79- fflush(stderr); \
80- } \
74+ offset += snprintf (log_buffer + offset , sizeof (log_buffer ) - offset , ")" ); \
8175 \
8276 /* forward interposed syscall */ \
8377 int ret = make_threei_call (num , 0 , \
@@ -86,18 +80,11 @@ extern syscall_handler_t syscall_handler_table[MAX_SYSCALLS];
8680 arg3 , arg3cage , arg4 , arg4cage , \
8781 arg5 , arg5cage , arg6 , arg6cage , 0 ); \
8882 \
89- if (!is_terminal ) { \
90- fprintf (stderr , "%s = %d\n" , log_buffer , ret ); \
91- } else { \
92- fprintf (stderr , "%s [failed] = %d\n" , log_buffer , ret ); \
93- } \
94- \
95- /* printing log buffer after return to ensure proper printing */ \
9683 fprintf (stderr , "%s = %d\n" , log_buffer , ret ); \
9784 return ret ; \
9885 } \
9986 \
100- /* constructor to store handler address in the table */ \
87+ /* constructor to store handler address in the table */ \
10188 __attribute__((constructor )) static void register_ ##name () { \
10289 syscall_handler_table[num] = &name##_grate; \
10390 }
0 commit comments