Re: [PATCH] x86: prevent binaries from making system calls using the wrong syscall interface

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Mikael Pettersson
Date: Thursday, August 7, 2008 - 12:50 am

Michael Davidson writes:
 > Prevent binaries from making system calls using other than one
 > of the "normal" system call interfaces for that binary type.
 > 
 > Currently there is nothing to prevent 64 bit binaries from
 > attempting to make system calls using the 32 bit system call
 > interfaces and vice versa.
 > 
 > Since the 32 bit and 64 bit system call numbers are different
 > this means that a binary could attempt to obfuscate which system
 > calls it was actually making by using the "wrong" system call
 > interface. In particular, the call to audit_syscall_entry()
 > relies on checking the TIF_IA32 flag to determine whether it is
 > dealing with a 32 or 64 bit system call without regard to the
 > actual type of system call that was made.While this specific issue
 > could be addressed by checking the TS_COMPAT flag in threadinfo_status
 > it seems preferable to simply disallow this situation altogether.

I asked Andi whether 64-bit processes are allowed to make 32-bit
syscalls on May 4 2007, and he stated that yes it's both allowed
and supposed to work. (The thread was cc:d to discuss@x86-64.org.)

 > --- linux-2.6.26.2.orig/arch/x86/ia32/ia32entry.S	2008-08-06 09:19:01.000000000 -0700
 > +++ linux-2.6.26.2/arch/x86/ia32/ia32entry.S	2008-08-06 13:34:54.566992000 -0700
 > @@ -123,6 +123,8 @@
 >   	.quad 1b,ia32_badarg
 >   	.previous	
 >  	GET_THREAD_INFO(%r10)
 > +	testl  $_TIF_IA32,threadinfo_flags(%r10)
 > +	jz     ia32_bad_abi
 >  	orl    $TS_COMPAT,threadinfo_status(%r10)
 >  	testl  $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10)
 >  	CFI_REMEMBER_STATE
 > @@ -230,6 +232,8 @@
 >  	.quad 1b,ia32_badarg
 >  	.previous	
 >  	GET_THREAD_INFO(%r10)
 > +	testl $_TIF_IA32,threadinfo_flags(%r10)
 > +	jz    ia32_bad_abi
 >  	orl   $TS_COMPAT,threadinfo_status(%r10)
 >  	testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10)
 >  	CFI_REMEMBER_STATE
 > @@ -324,6 +328,8 @@
 >  	   this could be a problem. */
 >  	SAVE_ARGS 0,0,1
 >  	GET_THREAD_INFO(%r10)
 > +	testl $_TIF_IA32,threadinfo_flags(%r10)
 > +	jz    ia32_bad_abi
 >  	orl   $TS_COMPAT,threadinfo_status(%r10)
 >  	testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10)
 >  	jnz ia32_tracesys

Your patch slows down all compat-mode syscalls.

/Mikael
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
Re: [PATCH] x86: prevent binaries from making system calls ..., Mikael Pettersson, (Thu Aug 7, 12:50 am)
Re: [PATCH] x86: prevent binaries from making system calls ..., Jeremy Fitzhardinge, (Thu Aug 7, 11:29 pm)