summaryrefslogtreecommitdiffstats
path: root/sys/compat
diff options
context:
space:
mode:
authordchagin <dchagin@FreeBSD.org>2009-05-07 03:23:22 +0000
committerdchagin <dchagin@FreeBSD.org>2009-05-07 03:23:22 +0000
commit9f1df514229a703d7db011676bd5a157cb106ddc (patch)
tree785a91aae2ba245bb87905df48ddf5d4fe932f96 /sys/compat
parent0d6358f7957671afd7e5aa8708481d1246ad8f81 (diff)
downloadFreeBSD-src-9f1df514229a703d7db011676bd5a157cb106ddc.zip
FreeBSD-src-9f1df514229a703d7db011676bd5a157cb106ddc.tar.gz
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
Diffstat (limited to 'sys/compat')
-rw-r--r--sys/compat/linux/linux_socket.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c
index c92fd12..91a1a46 100644
--- a/sys/compat/linux/linux_socket.c
+++ b/sys/compat/linux/linux_socket.c
@@ -855,14 +855,21 @@ linux_socketpair(struct thread *td, struct linux_socketpair_args *args)
} */ 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));
}
OpenPOWER on IntegriCloud