aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLibravatar Thomas Jarosch <thomas.jarosch@intra2net.com>2016-07-30 23:40:55 +0200
committerLibravatar Thomas Jarosch <thomas.jarosch@intra2net.com>2016-07-31 00:06:19 +0200
commita733a5092b404276af646b522430466df19a1612 (patch)
treeeda9925b1e9b5ed5a1913e4360e4e2ebe4e264db /src
parentfixes (diff)
downloadfirejail-a733a5092b404276af646b522430466df19a1612.tar.gz
firejail-a733a5092b404276af646b522430466df19a1612.tar.zst
firejail-a733a5092b404276af646b522430466df19a1612.zip
Fix wrong pointer variable in stat64 wrapper
If a program would have called stat() and then stat64(), the traced program probably would crash with a NULL pointer access on orig_stat64. I've checked for similiar glitches in the other wrappers -> they looked ok.
Diffstat (limited to 'src')
-rw-r--r--src/libtrace/libtrace.c4
-rw-r--r--src/libtracelog/libtracelog.c4
2 files changed, 4 insertions, 4 deletions
diff --git a/src/libtrace/libtrace.c b/src/libtrace/libtrace.c
index a3d1571f7..9f2622c00 100644
--- a/src/libtrace/libtrace.c
+++ b/src/libtrace/libtrace.c
@@ -423,11 +423,11 @@ int stat(const char *pathname, struct stat *buf) {
423typedef int (*orig_stat64_t)(const char *pathname, struct stat64 *buf); 423typedef int (*orig_stat64_t)(const char *pathname, struct stat64 *buf);
424static orig_stat64_t orig_stat64 = NULL; 424static orig_stat64_t orig_stat64 = NULL;
425int stat64(const char *pathname, struct stat64 *buf) { 425int stat64(const char *pathname, struct stat64 *buf) {
426 if (!orig_stat) 426 if (!orig_stat64)
427 orig_stat64 = (orig_stat64_t)dlsym(RTLD_NEXT, "stat64"); 427 orig_stat64 = (orig_stat64_t)dlsym(RTLD_NEXT, "stat64");
428 428
429 int rv = orig_stat64(pathname, buf); 429 int rv = orig_stat64(pathname, buf);
430 printf("%u:%s:stat %s:%d\n", pid(), name(), pathname, rv); 430 printf("%u:%s:stat64 %s:%d\n", pid(), name(), pathname, rv);
431 return rv; 431 return rv;
432} 432}
433#endif /* __GLIBC__ */ 433#endif /* __GLIBC__ */
diff --git a/src/libtracelog/libtracelog.c b/src/libtracelog/libtracelog.c
index 3e65587c4..dedba5513 100644
--- a/src/libtracelog/libtracelog.c
+++ b/src/libtracelog/libtracelog.c
@@ -562,7 +562,7 @@ int stat64(const char *pathname, struct stat64 *buf) {
562#ifdef DEBUG 562#ifdef DEBUG
563 printf("%s %s\n", __FUNCTION__, pathname); 563 printf("%s %s\n", __FUNCTION__, pathname);
564#endif 564#endif
565 if (!orig_stat) 565 if (!orig_stat64)
566 orig_stat64 = (orig_stat64_t)dlsym(RTLD_NEXT, "stat64"); 566 orig_stat64 = (orig_stat64_t)dlsym(RTLD_NEXT, "stat64");
567 if (!blacklist_loaded) 567 if (!blacklist_loaded)
568 load_blacklist(); 568 load_blacklist();
@@ -598,7 +598,7 @@ int lstat64(const char *pathname, struct stat64 *buf) {
598#ifdef DEBUG 598#ifdef DEBUG
599 printf("%s %s\n", __FUNCTION__, pathname); 599 printf("%s %s\n", __FUNCTION__, pathname);
600#endif 600#endif
601 if (!orig_lstat) 601 if (!orig_lstat64)
602 orig_lstat64 = (orig_lstat64_t)dlsym(RTLD_NEXT, "lstat64"); 602 orig_lstat64 = (orig_lstat64_t)dlsym(RTLD_NEXT, "lstat64");
603 if (!blacklist_loaded) 603 if (!blacklist_loaded)
604 load_blacklist(); 604 load_blacklist();