[tor-dev] Torsocks 2.x issue - Need eyes on that

Lunar lunar at torproject.org
Wed Oct 30 11:28:19 UTC 2013


Lunar:
> David Goulet:
> > Now the issue was detected with firefox which uses a custom malloc hook
> > meaning that it handles its own memory allocation. This hook uses mmap()
> > that firefox redefines to be a direct syscall(__NR_mmap, ...) and
> > remember that this symbol is hijacked by torsocks.
> > […]
> > It's a bit of a catch 22 because torsocks is basically looking for the
> > libc syscall symbol but then it gets call inside that lookup code
> > path...
> 
> Wouldn't one way out be to also hook malloc to use a
> static buffer until dlsym() is done? The code snippet in the following
> answer is doing just that:
> <http://stackoverflow.com/a/10008252>

Meh… scratch that. It looks like defining calloc() in libtorsocks.so is
not enough to have our own function called. Not sure why.

With the attached patch, at least we panic cleanly.

-- 
Lunar                                             <lunar at torproject.org>
-------------- next part --------------
diff --git a/src/lib/syscall.c b/src/lib/syscall.c
index 0edd460..d520c0a 100644
--- a/src/lib/syscall.c
+++ b/src/lib/syscall.c
@@ -17,6 +17,8 @@
 
 #include <assert.h>
 #include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
 
 #include <common/log.h>
 
@@ -112,6 +114,19 @@ LIBC_SYSCALL_DECL
 	LIBC_SYSCALL_RET_TYPE ret;
 	va_list args;
 
+#if defined(SYS_mmap) || defined(SYS_mmap2)
+	if (NULL == tsocks_libc_syscall) {
+		switch (__number) {
+		case SYS_mmap:
+#ifdef SYS_mmap2
+		case SYS_mmap2:
+#endif
+			fprintf(stderr, "Panic! mmap has been called before we had our hands on the real syscall()\n");
+			exit(EXIT_FAILURE);
+			break;
+		}
+	}
+#endif
 	/* Find symbol if not already set. Exit if not found. */
 	tsocks_libc_syscall = tsocks_find_libc_symbol(LIBC_SYSCALL_NAME_STR,
 			TSOCKS_SYM_EXIT_NOT_FOUND);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.torproject.org/pipermail/tor-dev/attachments/20131030/716758dc/attachment.sig>


More information about the tor-dev mailing list