diff mbox

[04/16] linux-user: support SO_PASSSEC setsockopt option

Message ID 1402849113-11402-5-git-send-email-paul@archlinuxmips.org
State New
Headers show

Commit Message

Paul Burton June 15, 2014, 4:18 p.m. UTC
Translate the SO_PASSSEC option to setsockopt to the host value &
perform the syscall as expected, allowing use of the option by target
programs.

Signed-off-by: Paul Burton <paul@archlinuxmips.org>
---
 linux-user/socket.h  | 2 ++
 linux-user/syscall.c | 3 +++
 2 files changed, 5 insertions(+)

Comments

Riku Voipio June 21, 2014, 10:59 a.m. UTC | #1
On Sun, Jun 15, 2014 at 05:18:21PM +0100, Paul Burton wrote:
> Translate the SO_PASSSEC option to setsockopt to the host value &
> perform the syscall as expected, allowing use of the option by target
> programs.

Another file that is a total mess in linux-user tree.. This should be
split out to arch specific header files - but that's for another patch.
For this patch - the value for sparc SO_PASSEC should be set, since
it's different from others:

http://lxr.free-electrons.com/source/arch/sparc/include/uapi/asm/socket.h#L51

> Signed-off-by: Paul Burton <paul@archlinuxmips.org>
> ---
>  linux-user/socket.h  | 2 ++
>  linux-user/syscall.c | 3 +++
>  2 files changed, 5 insertions(+)
> 
> diff --git a/linux-user/socket.h b/linux-user/socket.h
> index ae17959..289c6ac 100644
> --- a/linux-user/socket.h
> +++ b/linux-user/socket.h
> @@ -63,6 +63,7 @@
>      #define TARGET_SO_PEERSEC              30
>      #define TARGET_SO_SNDBUFFORCE          31
>      #define TARGET_SO_RCVBUFFORCE          33
> +    #define TARGET_SO_PASSSEC              34
>  
>      /** sock_type - Socket types
>       *
> @@ -298,6 +299,7 @@
>      #define TARGET_SO_ACCEPTCONN           30
>  
>      #define TARGET_SO_PEERSEC              31
> +    #define TARGET_SO_PASSSEC              34
>  
>  #endif
>  
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index 679d165..b507f81 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -1529,6 +1529,9 @@ set_timeout:
>          case TARGET_SO_PASSCRED:
>  		optname = SO_PASSCRED;
>  		break;
> +        case TARGET_SO_PASSSEC:
> +		optname = SO_PASSSEC;
> +		break;
>          case TARGET_SO_TIMESTAMP:
>  		optname = SO_TIMESTAMP;
>  		break;
> -- 
> 2.0.0
>
Paul Burton June 21, 2014, 5:46 p.m. UTC | #2
On Sat, Jun 21, 2014 at 01:59:33PM +0300, Riku Voipio wrote:
> On Sun, Jun 15, 2014 at 05:18:21PM +0100, Paul Burton wrote:
> > Translate the SO_PASSSEC option to setsockopt to the host value &
> > perform the syscall as expected, allowing use of the option by target
> > programs.
> 
> Another file that is a total mess in linux-user tree.. This should be
> split out to arch specific header files - but that's for another patch.
> For this patch - the value for sparc SO_PASSEC should be set, since
> it's different from others:
> 
> http://lxr.free-electrons.com/source/arch/sparc/include/uapi/asm/socket.h#L51

Good catch, and it looks like the same is true of some other already
incorrect options for sparc (SO_PEERSEC, SO_BINDTODEVICE at least at a
glance).

Paul

> 
> > Signed-off-by: Paul Burton <paul@archlinuxmips.org>
> > ---
> >  linux-user/socket.h  | 2 ++
> >  linux-user/syscall.c | 3 +++
> >  2 files changed, 5 insertions(+)
> > 
> > diff --git a/linux-user/socket.h b/linux-user/socket.h
> > index ae17959..289c6ac 100644
> > --- a/linux-user/socket.h
> > +++ b/linux-user/socket.h
> > @@ -63,6 +63,7 @@
> >      #define TARGET_SO_PEERSEC              30
> >      #define TARGET_SO_SNDBUFFORCE          31
> >      #define TARGET_SO_RCVBUFFORCE          33
> > +    #define TARGET_SO_PASSSEC              34
> >  
> >      /** sock_type - Socket types
> >       *
> > @@ -298,6 +299,7 @@
> >      #define TARGET_SO_ACCEPTCONN           30
> >  
> >      #define TARGET_SO_PEERSEC              31
> > +    #define TARGET_SO_PASSSEC              34
> >  
> >  #endif
> >  
> > diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> > index 679d165..b507f81 100644
> > --- a/linux-user/syscall.c
> > +++ b/linux-user/syscall.c
> > @@ -1529,6 +1529,9 @@ set_timeout:
> >          case TARGET_SO_PASSCRED:
> >  		optname = SO_PASSCRED;
> >  		break;
> > +        case TARGET_SO_PASSSEC:
> > +		optname = SO_PASSSEC;
> > +		break;
> >          case TARGET_SO_TIMESTAMP:
> >  		optname = SO_TIMESTAMP;
> >  		break;
> > -- 
> > 2.0.0
> >
diff mbox

Patch

diff --git a/linux-user/socket.h b/linux-user/socket.h
index ae17959..289c6ac 100644
--- a/linux-user/socket.h
+++ b/linux-user/socket.h
@@ -63,6 +63,7 @@ 
     #define TARGET_SO_PEERSEC              30
     #define TARGET_SO_SNDBUFFORCE          31
     #define TARGET_SO_RCVBUFFORCE          33
+    #define TARGET_SO_PASSSEC              34
 
     /** sock_type - Socket types
      *
@@ -298,6 +299,7 @@ 
     #define TARGET_SO_ACCEPTCONN           30
 
     #define TARGET_SO_PEERSEC              31
+    #define TARGET_SO_PASSSEC              34
 
 #endif
 
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 679d165..b507f81 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -1529,6 +1529,9 @@  set_timeout:
         case TARGET_SO_PASSCRED:
 		optname = SO_PASSCRED;
 		break;
+        case TARGET_SO_PASSSEC:
+		optname = SO_PASSSEC;
+		break;
         case TARGET_SO_TIMESTAMP:
 		optname = SO_TIMESTAMP;
 		break;