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