Author: markj
Date: Tue Jan  8 17:21:59 2019
New Revision: 342864
URL: https://svnweb.freebsd.org/changeset/base/342864

Log:
  Specify the correct option level when emulating SO_PEERCRED.
  
  Our equivalent to SO_PEERCRED, LOCAL_PEERCRED, is implemented at
  socket option level 0, not SOL_SOCKET.
  
  PR:           234722
  Submitted by: Dániel Bakai <[email protected]>
  MFC after:    2 weeks

Modified:
  head/sys/compat/linux/linux_socket.c

Modified: head/sys/compat/linux/linux_socket.c
==============================================================================
--- head/sys/compat/linux/linux_socket.c        Tue Jan  8 17:08:10 2019        
(r342863)
+++ head/sys/compat/linux/linux_socket.c        Tue Jan  8 17:21:59 2019        
(r342864)
@@ -1633,6 +1633,11 @@ linux_getsockopt(struct thread *td, struct linux_getso
                case LOCAL_PEERCRED:
                        if (args->optlen < sizeof(lxu))
                                return (EINVAL);
+                       /*
+                        * LOCAL_PEERCRED is not served at the SOL_SOCKET level,
+                        * but by the Unix socket's level 0.
+                        */
+                       bsd_args.level = 0;
                        xulen = sizeof(xu);
                        error = kern_getsockopt(td, args->s, bsd_args.level,
                            name, &xu, UIO_SYSSPACE, &xulen);
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to