[PATCH] x32: update {g,s}etsockopt syscall numbers

Dmitry V. Levin ldv at altlinux.org
Fri Aug 24 12:41:00 UTC 2012

On Wed, Aug 22, 2012 at 02:51:33PM -0400, Mike Frysinger wrote:
> On Wednesday 22 August 2012 12:56:36 Dmitry V. Levin wrote:
> > On Wed, Aug 22, 2012 at 11:56:15AM -0400, Mike Frysinger wrote:
> > > Starting with linux 3.6 (and backported to earlier kernels), these two
> > > syscalls have changed numbers (moving from native to compat entry
> > > points). Update the strace syscall list accordingly.
> > 
> > What will happen with applications using old syscall numbers (if any)?
> > Will they get ENOSYS?
> the 64bit and x32 syscall tables are shared.  so you can call any of the 64bit 
> syscalls from an x32 app, and vice versa.  there are a few additional entry 
> points which are really there just to map the x86 compat entry points which 
> the x32 ABI uses (for when types are different sizes like pointers).
> for example, if we look at the rt_sigaction syscall, we see:
> 	64bit's unisted.h sets the NR to 13
> 	x32's unistd.h sets the NR to 512
> nothing is stopping you from doing syscall(13) in an x32 app, or syscall(512) 
> in a 64bit app.  in either case, you won't get ENOSYS because they're both 
> valid syscall entry points.  but in most cases, the call won't "work" because 
> the types being passed are wrong (which is why we've had to change the NRs 
> here in the first place).

OK, I've pushed this commit as is.

> > > * linux/x32/syscallent.h: Move setsockopt from 54 to 541, and move
> > > getsockopt from 55 to 542.
> > > 
> > > Signed-off-by: Mike Frysinger <vapier at gentoo.org>
> > > ---
> > > Note: I'm not sure about the old entry points.  Should they get relabeled
> > > 	as "old" ?  Or just leave them as is ?
> > 
> > From one side, the rule is to stick to __NR_* names as close as possible.
> > From another side, it's desirable to decode syscalls on older kernels
> > properly.  So maybe we should rather leave old entry points for
> > compatibility.
> should we fill out the entire table then ?  with the rt_sigaction example above 
> (which isn't the only one -- if you look at the x32 syscallent.h, pretty much 
> every {} entry is in the same boat), we could label it as "64bit:rt_sigaction" 
> or something similarly obvious that the x32 app is most likely doing something 
> wrong.  the other problem here is that we can't really decode these syscalls 
> properly -- is the app passing up x32 structures (so the syscall will most 
> likely fail anyways), or has it manually crafted a 64bit compatible structure 
> and passing that up (which would be crazy and generally make no sense) ?

If there is a real chance to see these 64bit syscalls used by x32 apps (no
matter how crazy such apps are), would it be better to show syscall names
(e.g. with "64bit:" prefix) rather than their "syscall_*" names, even
without detailed decoding of these syscalls?  What about setting
appropriate sys_flags in these syscall entries so that traditional syscall
filtering would work for them as well?

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.strace.io/pipermail/strace-devel/attachments/20120824/018b5a03/attachment.bin>

More information about the Strace-devel mailing list