diff options
Diffstat (limited to 'src/libtracelog/libtracelog.c')
-rw-r--r-- | src/libtracelog/libtracelog.c | 72 |
1 files changed, 36 insertions, 36 deletions
diff --git a/src/libtracelog/libtracelog.c b/src/libtracelog/libtracelog.c index abacb7115..dc68b0620 100644 --- a/src/libtracelog/libtracelog.c +++ b/src/libtracelog/libtracelog.c | |||
@@ -52,7 +52,7 @@ typedef struct list_elem_t { | |||
52 | #define HMASK 0x0ff | 52 | #define HMASK 0x0ff |
53 | ListElem *storage[HMASK + 1]; | 53 | ListElem *storage[HMASK + 1]; |
54 | 54 | ||
55 | // djb2 | 55 | // djb2 |
56 | static inline uint32_t hash(const char *str) { | 56 | static inline uint32_t hash(const char *str) { |
57 | uint32_t hash = 5381; | 57 | uint32_t hash = 5381; |
58 | int c; | 58 | int c; |
@@ -70,10 +70,10 @@ static void storage_add(const char *str) { | |||
70 | if (!str) { | 70 | if (!str) { |
71 | #ifdef DEBUG | 71 | #ifdef DEBUG |
72 | printf("null pointer passed to storage_add\n"); | 72 | printf("null pointer passed to storage_add\n"); |
73 | #endif | 73 | #endif |
74 | return; | 74 | return; |
75 | } | 75 | } |
76 | 76 | ||
77 | ListElem *ptr = malloc(sizeof(ListElem)); | 77 | ListElem *ptr = malloc(sizeof(ListElem)); |
78 | if (!ptr) { | 78 | if (!ptr) { |
79 | fprintf(stderr, "Error: cannot allocate memory\n"); | 79 | fprintf(stderr, "Error: cannot allocate memory\n"); |
@@ -85,7 +85,7 @@ static void storage_add(const char *str) { | |||
85 | free(ptr); | 85 | free(ptr); |
86 | return; | 86 | return; |
87 | } | 87 | } |
88 | 88 | ||
89 | // insert it into the hash table | 89 | // insert it into the hash table |
90 | uint32_t h = hash(ptr->path); | 90 | uint32_t h = hash(ptr->path); |
91 | ptr->next = storage[h]; | 91 | ptr->next = storage[h]; |
@@ -147,11 +147,11 @@ static char *storage_find(const char *str) { | |||
147 | } | 147 | } |
148 | ptr = ptr->next; | 148 | ptr = ptr->next; |
149 | } | 149 | } |
150 | 150 | ||
151 | if (allocated) | 151 | if (allocated) |
152 | free((char *) tofind); | 152 | free((char *) tofind); |
153 | #ifdef DEBUG | 153 | #ifdef DEBUG |
154 | printf("storage not found\n"); | 154 | printf("storage not found\n"); |
155 | #endif | 155 | #endif |
156 | return NULL; | 156 | return NULL; |
157 | } | 157 | } |
@@ -168,7 +168,7 @@ static char *sandbox_name_str = NULL; | |||
168 | static void load_blacklist(void) { | 168 | static void load_blacklist(void) { |
169 | if (blacklist_loaded) | 169 | if (blacklist_loaded) |
170 | return; | 170 | return; |
171 | 171 | ||
172 | // open filesystem log | 172 | // open filesystem log |
173 | if (!orig_fopen) | 173 | if (!orig_fopen) |
174 | orig_fopen = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen"); | 174 | orig_fopen = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen"); |
@@ -204,7 +204,7 @@ static void load_blacklist(void) { | |||
204 | } | 204 | } |
205 | fclose(fp); | 205 | fclose(fp); |
206 | blacklist_loaded = 1; | 206 | blacklist_loaded = 1; |
207 | #ifdef DEBUG | 207 | #ifdef DEBUG |
208 | printf("Monitoring %d blacklists\n", cnt); | 208 | printf("Monitoring %d blacklists\n", cnt); |
209 | { | 209 | { |
210 | int i; | 210 | int i; |
@@ -215,7 +215,7 @@ static void load_blacklist(void) { | |||
215 | cnt++; | 215 | cnt++; |
216 | ptr = ptr->next; | 216 | ptr = ptr->next; |
217 | } | 217 | } |
218 | 218 | ||
219 | if ((i % 16) == 0) | 219 | if ((i % 16) == 0) |
220 | printf("\n"); | 220 | printf("\n"); |
221 | printf("%02d ", cnt); | 221 | printf("%02d ", cnt); |
@@ -232,8 +232,8 @@ static void sendlog(const char *name, const char *call, const char *path) { | |||
232 | printf("null pointer passed to sendlog\n"); | 232 | printf("null pointer passed to sendlog\n"); |
233 | #endif | 233 | #endif |
234 | return; | 234 | return; |
235 | } | 235 | } |
236 | 236 | ||
237 | openlog ("firejail", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); | 237 | openlog ("firejail", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); |
238 | if (sandbox_pid_str && sandbox_name_str) | 238 | if (sandbox_pid_str && sandbox_name_str) |
239 | syslog (LOG_INFO, "blacklist violation - sandbox %s, name %s, exe %s, syscall %s, path %s", | 239 | syslog (LOG_INFO, "blacklist violation - sandbox %s, name %s, exe %s, syscall %s, path %s", |
@@ -266,10 +266,10 @@ static char myname[MAXNAME]; | |||
266 | static int nameinit = 0; | 266 | static int nameinit = 0; |
267 | static char *name(void) { | 267 | static char *name(void) { |
268 | if (!nameinit) { | 268 | if (!nameinit) { |
269 | 269 | ||
270 | // initialize the name of the process based on /proc/PID/comm | 270 | // initialize the name of the process based on /proc/PID/comm |
271 | memset(myname, 0, MAXNAME); | 271 | memset(myname, 0, MAXNAME); |
272 | 272 | ||
273 | pid_t p = pid(); | 273 | pid_t p = pid(); |
274 | char *fname; | 274 | char *fname; |
275 | if (asprintf(&fname, "/proc/%u/comm", p) == -1) | 275 | if (asprintf(&fname, "/proc/%u/comm", p) == -1) |
@@ -286,17 +286,17 @@ static char *name(void) { | |||
286 | free(fname); | 286 | free(fname); |
287 | return "unknown"; | 287 | return "unknown"; |
288 | } | 288 | } |
289 | 289 | ||
290 | // clean '\n' | 290 | // clean '\n' |
291 | char *ptr = strchr(myname, '\n'); | 291 | char *ptr = strchr(myname, '\n'); |
292 | if (ptr) | 292 | if (ptr) |
293 | *ptr = '\0'; | 293 | *ptr = '\0'; |
294 | 294 | ||
295 | fclose(fp); | 295 | fclose(fp); |
296 | free(fname); | 296 | free(fname); |
297 | nameinit = 1; | 297 | nameinit = 1; |
298 | } | 298 | } |
299 | 299 | ||
300 | return myname; | 300 | return myname; |
301 | } | 301 | } |
302 | 302 | ||
@@ -313,10 +313,10 @@ int open(const char *pathname, int flags, mode_t mode) { | |||
313 | #endif | 313 | #endif |
314 | if (!orig_open) | 314 | if (!orig_open) |
315 | orig_open = (orig_open_t)dlsym(RTLD_NEXT, "open"); | 315 | orig_open = (orig_open_t)dlsym(RTLD_NEXT, "open"); |
316 | 316 | ||
317 | if (!blacklist_loaded) | 317 | if (!blacklist_loaded) |
318 | load_blacklist(); | 318 | load_blacklist(); |
319 | 319 | ||
320 | if (storage_find(pathname)) | 320 | if (storage_find(pathname)) |
321 | sendlog(name(), __FUNCTION__, pathname); | 321 | sendlog(name(), __FUNCTION__, pathname); |
322 | int rv = orig_open(pathname, flags, mode); | 322 | int rv = orig_open(pathname, flags, mode); |
@@ -337,7 +337,7 @@ int open64(const char *pathname, int flags, mode_t mode) { | |||
337 | orig_open64 = (orig_open64_t)dlsym(RTLD_NEXT, "open64"); | 337 | orig_open64 = (orig_open64_t)dlsym(RTLD_NEXT, "open64"); |
338 | if (!blacklist_loaded) | 338 | if (!blacklist_loaded) |
339 | load_blacklist(); | 339 | load_blacklist(); |
340 | 340 | ||
341 | if (storage_find(pathname)) | 341 | if (storage_find(pathname)) |
342 | sendlog(name(), __FUNCTION__, pathname); | 342 | sendlog(name(), __FUNCTION__, pathname); |
343 | int rv = orig_open64(pathname, flags, mode); | 343 | int rv = orig_open64(pathname, flags, mode); |
@@ -357,7 +357,7 @@ int openat(int dirfd, const char *pathname, int flags, mode_t mode) { | |||
357 | orig_openat = (orig_openat_t)dlsym(RTLD_NEXT, "openat"); | 357 | orig_openat = (orig_openat_t)dlsym(RTLD_NEXT, "openat"); |
358 | if (!blacklist_loaded) | 358 | if (!blacklist_loaded) |
359 | load_blacklist(); | 359 | load_blacklist(); |
360 | 360 | ||
361 | if (storage_find(pathname)) | 361 | if (storage_find(pathname)) |
362 | sendlog(name(), __FUNCTION__, pathname); | 362 | sendlog(name(), __FUNCTION__, pathname); |
363 | int rv = orig_openat(dirfd, pathname, flags, mode); | 363 | int rv = orig_openat(dirfd, pathname, flags, mode); |
@@ -374,7 +374,7 @@ int openat64(int dirfd, const char *pathname, int flags, mode_t mode) { | |||
374 | orig_openat64 = (orig_openat64_t)dlsym(RTLD_NEXT, "openat64"); | 374 | orig_openat64 = (orig_openat64_t)dlsym(RTLD_NEXT, "openat64"); |
375 | if (!blacklist_loaded) | 375 | if (!blacklist_loaded) |
376 | load_blacklist(); | 376 | load_blacklist(); |
377 | 377 | ||
378 | if (storage_find(pathname)) | 378 | if (storage_find(pathname)) |
379 | sendlog(name(), __FUNCTION__, pathname); | 379 | sendlog(name(), __FUNCTION__, pathname); |
380 | int rv = orig_openat64(dirfd, pathname, flags, mode); | 380 | int rv = orig_openat64(dirfd, pathname, flags, mode); |
@@ -391,7 +391,7 @@ FILE *fopen(const char *pathname, const char *mode) { | |||
391 | orig_fopen = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen"); | 391 | orig_fopen = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen"); |
392 | if (!blacklist_loaded) | 392 | if (!blacklist_loaded) |
393 | load_blacklist(); | 393 | load_blacklist(); |
394 | 394 | ||
395 | if (storage_find(pathname)) | 395 | if (storage_find(pathname)) |
396 | sendlog(name(), __FUNCTION__, pathname); | 396 | sendlog(name(), __FUNCTION__, pathname); |
397 | FILE *rv = orig_fopen(pathname, mode); | 397 | FILE *rv = orig_fopen(pathname, mode); |
@@ -407,7 +407,7 @@ FILE *fopen64(const char *pathname, const char *mode) { | |||
407 | orig_fopen64 = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen64"); | 407 | orig_fopen64 = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen64"); |
408 | if (!blacklist_loaded) | 408 | if (!blacklist_loaded) |
409 | load_blacklist(); | 409 | load_blacklist(); |
410 | 410 | ||
411 | if (storage_find(pathname)) | 411 | if (storage_find(pathname)) |
412 | sendlog(name(), __FUNCTION__, pathname); | 412 | sendlog(name(), __FUNCTION__, pathname); |
413 | FILE *rv = orig_fopen64(pathname, mode); | 413 | FILE *rv = orig_fopen64(pathname, mode); |
@@ -427,7 +427,7 @@ FILE *freopen(const char *pathname, const char *mode, FILE *stream) { | |||
427 | orig_freopen = (orig_freopen_t)dlsym(RTLD_NEXT, "freopen"); | 427 | orig_freopen = (orig_freopen_t)dlsym(RTLD_NEXT, "freopen"); |
428 | if (!blacklist_loaded) | 428 | if (!blacklist_loaded) |
429 | load_blacklist(); | 429 | load_blacklist(); |
430 | 430 | ||
431 | if (storage_find(pathname)) | 431 | if (storage_find(pathname)) |
432 | sendlog(name(), __FUNCTION__, pathname); | 432 | sendlog(name(), __FUNCTION__, pathname); |
433 | FILE *rv = orig_freopen(pathname, mode, stream); | 433 | FILE *rv = orig_freopen(pathname, mode, stream); |
@@ -445,7 +445,7 @@ FILE *freopen64(const char *pathname, const char *mode, FILE *stream) { | |||
445 | orig_freopen64 = (orig_freopen64_t)dlsym(RTLD_NEXT, "freopen64"); | 445 | orig_freopen64 = (orig_freopen64_t)dlsym(RTLD_NEXT, "freopen64"); |
446 | if (!blacklist_loaded) | 446 | if (!blacklist_loaded) |
447 | load_blacklist(); | 447 | load_blacklist(); |
448 | 448 | ||
449 | if (storage_find(pathname)) | 449 | if (storage_find(pathname)) |
450 | sendlog(name(), __FUNCTION__, pathname); | 450 | sendlog(name(), __FUNCTION__, pathname); |
451 | FILE *rv = orig_freopen64(pathname, mode, stream); | 451 | FILE *rv = orig_freopen64(pathname, mode, stream); |
@@ -464,7 +464,7 @@ int unlink(const char *pathname) { | |||
464 | orig_unlink = (orig_unlink_t)dlsym(RTLD_NEXT, "unlink"); | 464 | orig_unlink = (orig_unlink_t)dlsym(RTLD_NEXT, "unlink"); |
465 | if (!blacklist_loaded) | 465 | if (!blacklist_loaded) |
466 | load_blacklist(); | 466 | load_blacklist(); |
467 | 467 | ||
468 | if (storage_find(pathname)) | 468 | if (storage_find(pathname)) |
469 | sendlog(name(), __FUNCTION__, pathname); | 469 | sendlog(name(), __FUNCTION__, pathname); |
470 | int rv = orig_unlink(pathname); | 470 | int rv = orig_unlink(pathname); |
@@ -481,7 +481,7 @@ int unlinkat(int dirfd, const char *pathname, int flags) { | |||
481 | orig_unlinkat = (orig_unlinkat_t)dlsym(RTLD_NEXT, "unlinkat"); | 481 | orig_unlinkat = (orig_unlinkat_t)dlsym(RTLD_NEXT, "unlinkat"); |
482 | if (!blacklist_loaded) | 482 | if (!blacklist_loaded) |
483 | load_blacklist(); | 483 | load_blacklist(); |
484 | 484 | ||
485 | if (storage_find(pathname)) | 485 | if (storage_find(pathname)) |
486 | sendlog(name(), __FUNCTION__, pathname); | 486 | sendlog(name(), __FUNCTION__, pathname); |
487 | int rv = orig_unlinkat(dirfd, pathname, flags); | 487 | int rv = orig_unlinkat(dirfd, pathname, flags); |
@@ -499,7 +499,7 @@ int mkdir(const char *pathname, mode_t mode) { | |||
499 | orig_mkdir = (orig_mkdir_t)dlsym(RTLD_NEXT, "mkdir"); | 499 | orig_mkdir = (orig_mkdir_t)dlsym(RTLD_NEXT, "mkdir"); |
500 | if (!blacklist_loaded) | 500 | if (!blacklist_loaded) |
501 | load_blacklist(); | 501 | load_blacklist(); |
502 | 502 | ||
503 | if (storage_find(pathname)) | 503 | if (storage_find(pathname)) |
504 | sendlog(name(), __FUNCTION__, pathname); | 504 | sendlog(name(), __FUNCTION__, pathname); |
505 | int rv = orig_mkdir(pathname, mode); | 505 | int rv = orig_mkdir(pathname, mode); |
@@ -516,7 +516,7 @@ int mkdirat(int dirfd, const char *pathname, mode_t mode) { | |||
516 | orig_mkdirat = (orig_mkdirat_t)dlsym(RTLD_NEXT, "mkdirat"); | 516 | orig_mkdirat = (orig_mkdirat_t)dlsym(RTLD_NEXT, "mkdirat"); |
517 | if (!blacklist_loaded) | 517 | if (!blacklist_loaded) |
518 | load_blacklist(); | 518 | load_blacklist(); |
519 | 519 | ||
520 | if (storage_find(pathname)) | 520 | if (storage_find(pathname)) |
521 | sendlog(name(), __FUNCTION__, pathname); | 521 | sendlog(name(), __FUNCTION__, pathname); |
522 | int rv = orig_mkdirat(dirfd, pathname, mode); | 522 | int rv = orig_mkdirat(dirfd, pathname, mode); |
@@ -533,7 +533,7 @@ int rmdir(const char *pathname) { | |||
533 | orig_rmdir = (orig_rmdir_t)dlsym(RTLD_NEXT, "rmdir"); | 533 | orig_rmdir = (orig_rmdir_t)dlsym(RTLD_NEXT, "rmdir"); |
534 | if (!blacklist_loaded) | 534 | if (!blacklist_loaded) |
535 | load_blacklist(); | 535 | load_blacklist(); |
536 | 536 | ||
537 | if (storage_find(pathname)) | 537 | if (storage_find(pathname)) |
538 | sendlog(name(), __FUNCTION__, pathname); | 538 | sendlog(name(), __FUNCTION__, pathname); |
539 | int rv = orig_rmdir(pathname); | 539 | int rv = orig_rmdir(pathname); |
@@ -551,7 +551,7 @@ int stat(const char *pathname, struct stat *buf) { | |||
551 | orig_stat = (orig_stat_t)dlsym(RTLD_NEXT, "stat"); | 551 | orig_stat = (orig_stat_t)dlsym(RTLD_NEXT, "stat"); |
552 | if (!blacklist_loaded) | 552 | if (!blacklist_loaded) |
553 | load_blacklist(); | 553 | load_blacklist(); |
554 | 554 | ||
555 | if (storage_find(pathname)) | 555 | if (storage_find(pathname)) |
556 | sendlog(name(), __FUNCTION__, pathname); | 556 | sendlog(name(), __FUNCTION__, pathname); |
557 | int rv = orig_stat(pathname, buf); | 557 | int rv = orig_stat(pathname, buf); |
@@ -569,7 +569,7 @@ int stat64(const char *pathname, struct stat64 *buf) { | |||
569 | orig_stat64 = (orig_stat64_t)dlsym(RTLD_NEXT, "stat64"); | 569 | orig_stat64 = (orig_stat64_t)dlsym(RTLD_NEXT, "stat64"); |
570 | if (!blacklist_loaded) | 570 | if (!blacklist_loaded) |
571 | load_blacklist(); | 571 | load_blacklist(); |
572 | 572 | ||
573 | if (storage_find(pathname)) | 573 | if (storage_find(pathname)) |
574 | sendlog(name(), __FUNCTION__, pathname); | 574 | sendlog(name(), __FUNCTION__, pathname); |
575 | int rv = orig_stat64(pathname, buf); | 575 | int rv = orig_stat64(pathname, buf); |
@@ -587,7 +587,7 @@ int lstat(const char *pathname, struct stat *buf) { | |||
587 | orig_lstat = (orig_lstat_t)dlsym(RTLD_NEXT, "lstat"); | 587 | orig_lstat = (orig_lstat_t)dlsym(RTLD_NEXT, "lstat"); |
588 | if (!blacklist_loaded) | 588 | if (!blacklist_loaded) |
589 | load_blacklist(); | 589 | load_blacklist(); |
590 | 590 | ||
591 | if (storage_find(pathname)) | 591 | if (storage_find(pathname)) |
592 | sendlog(name(), __FUNCTION__, pathname); | 592 | sendlog(name(), __FUNCTION__, pathname); |
593 | int rv = orig_lstat(pathname, buf); | 593 | int rv = orig_lstat(pathname, buf); |
@@ -605,7 +605,7 @@ int lstat64(const char *pathname, struct stat64 *buf) { | |||
605 | orig_lstat64 = (orig_lstat64_t)dlsym(RTLD_NEXT, "lstat64"); | 605 | orig_lstat64 = (orig_lstat64_t)dlsym(RTLD_NEXT, "lstat64"); |
606 | if (!blacklist_loaded) | 606 | if (!blacklist_loaded) |
607 | load_blacklist(); | 607 | load_blacklist(); |
608 | 608 | ||
609 | if (storage_find(pathname)) | 609 | if (storage_find(pathname)) |
610 | sendlog(name(), __FUNCTION__, pathname); | 610 | sendlog(name(), __FUNCTION__, pathname); |
611 | int rv = orig_lstat64(pathname, buf); | 611 | int rv = orig_lstat64(pathname, buf); |
@@ -624,7 +624,7 @@ int access(const char *pathname, int mode) { | |||
624 | orig_access = (orig_access_t)dlsym(RTLD_NEXT, "access"); | 624 | orig_access = (orig_access_t)dlsym(RTLD_NEXT, "access"); |
625 | if (!blacklist_loaded) | 625 | if (!blacklist_loaded) |
626 | load_blacklist(); | 626 | load_blacklist(); |
627 | 627 | ||
628 | if (storage_find(pathname)) | 628 | if (storage_find(pathname)) |
629 | sendlog(name(), __FUNCTION__, pathname); | 629 | sendlog(name(), __FUNCTION__, pathname); |
630 | int rv = orig_access(pathname, mode); | 630 | int rv = orig_access(pathname, mode); |
@@ -642,7 +642,7 @@ DIR *opendir(const char *pathname) { | |||
642 | orig_opendir = (orig_opendir_t)dlsym(RTLD_NEXT, "opendir"); | 642 | orig_opendir = (orig_opendir_t)dlsym(RTLD_NEXT, "opendir"); |
643 | if (!blacklist_loaded) | 643 | if (!blacklist_loaded) |
644 | load_blacklist(); | 644 | load_blacklist(); |
645 | 645 | ||
646 | if (storage_find(pathname)) | 646 | if (storage_find(pathname)) |
647 | sendlog(name(), __FUNCTION__, pathname); | 647 | sendlog(name(), __FUNCTION__, pathname); |
648 | DIR *rv = orig_opendir(pathname); | 648 | DIR *rv = orig_opendir(pathname); |