svn commit: r191871 - head/sys/compat/linux

Dmitry Chagin dchagin at FreeBSD.org
Thu May 7 03:23:23 UTC 2009


Author: dchagin
Date: Thu May  7 03:23:22 2009
New Revision: 191871
URL: http://svn.freebsd.org/changeset/base/191871

Log:
  Rework r191742.
  Use the protocol family constants for the domain argument validation.
  
  Return EAFNOSUPPORT in case when the incorrect domain argument
  is specified.
  
  Return EPROTONOSUPPORT instead of passing values that are not 0
  to the BSD layer.
  
  Suggested by:   rwatson
  
  Approved by:	kib (mentor)
  MFC after:	1 month

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

Modified: head/sys/compat/linux/linux_socket.c
==============================================================================
--- head/sys/compat/linux/linux_socket.c	Thu May  7 02:17:09 2009	(r191870)
+++ head/sys/compat/linux/linux_socket.c	Thu May  7 03:23:22 2009	(r191871)
@@ -855,14 +855,21 @@ linux_socketpair(struct thread *td, stru
 	} */ bsd_args;
 
 	bsd_args.domain = linux_to_bsd_domain(args->domain);
-	if (bsd_args.domain == -1)
-		return (EINVAL);
+	if (bsd_args.domain != PF_LOCAL)
+		return (EAFNOSUPPORT);
 
 	bsd_args.type = args->type;
-	if (bsd_args.domain == AF_LOCAL && args->protocol == PF_UNIX)
-		bsd_args.protocol = 0;
+	if (args->protocol != 0 && args->protocol != PF_UNIX)
+
+		/*
+		 * Use of PF_UNIX as protocol argument is not right,
+		 * but Linux does it.
+		 * Do not map PF_UNIX as its Linux value is identical
+		 * to FreeBSD one.
+		 */
+		return (EPROTONOSUPPORT);
 	else
-		bsd_args.protocol = args->protocol;
+		bsd_args.protocol = 0;
 	bsd_args.rsv = (int *)PTRIN(args->rsv);
 	return (socketpair(td, &bsd_args));
 }


More information about the svn-src-all mailing list