svn commit: r357727 - head/sys/compat/linux
Edward Tomasz Napierala
trasz at FreeBSD.org
Mon Feb 10 13:24:15 UTC 2020
Author: trasz
Date: Mon Feb 10 13:24:14 2020
New Revision: 357727
URL: https://svnweb.freebsd.org/changeset/base/357727
Log:
Make linux(4) use kern_socketpair(9) instead of going through
sys_socketpair(). It's a cleanup; no functional changes.
Reviewed by: kib
MFC after: 2 weeks
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D22814
Modified:
head/sys/compat/linux/linux_socket.c
Modified: head/sys/compat/linux/linux_socket.c
==============================================================================
--- head/sys/compat/linux/linux_socket.c Mon Feb 10 11:09:56 2020 (r357726)
+++ head/sys/compat/linux/linux_socket.c Mon Feb 10 13:24:14 2020 (r357727)
@@ -753,25 +753,19 @@ linux_getpeername(struct thread *td, struct linux_getp
int
linux_socketpair(struct thread *td, struct linux_socketpair_args *args)
{
- struct socketpair_args /* {
- int domain;
- int type;
- int protocol;
- int *rsv;
- } */ bsd_args;
- int error;
+ int domain, error, sv[2], type;
- bsd_args.domain = linux_to_bsd_domain(args->domain);
- if (bsd_args.domain != PF_LOCAL)
+ domain = linux_to_bsd_domain(args->domain);
+ if (domain != PF_LOCAL)
return (EAFNOSUPPORT);
- bsd_args.type = args->type & LINUX_SOCK_TYPE_MASK;
- if (bsd_args.type < 0 || bsd_args.type > LINUX_SOCK_MAX)
+ type = args->type & LINUX_SOCK_TYPE_MASK;
+ if (type < 0 || type > LINUX_SOCK_MAX)
return (EINVAL);
error = linux_set_socket_flags(args->type & ~LINUX_SOCK_TYPE_MASK,
- &bsd_args.type);
+ &type);
if (error != 0)
return (error);
- if (args->protocol != 0 && args->protocol != PF_UNIX)
+ if (args->protocol != 0 && args->protocol != PF_UNIX) {
/*
* Use of PF_UNIX as protocol argument is not right,
@@ -780,10 +774,16 @@ linux_socketpair(struct thread *td, struct linux_socke
* to FreeBSD one.
*/
return (EPROTONOSUPPORT);
- else
- bsd_args.protocol = 0;
- bsd_args.rsv = (int *)PTRIN(args->rsv);
- return (sys_socketpair(td, &bsd_args));
+ }
+ error = kern_socketpair(td, domain, type, 0, sv);
+ if (error != 0)
+ return (error);
+ error = copyout(sv, PTRIN(args->rsv), 2 * sizeof(int));
+ if (error != 0) {
+ (void)kern_close(td, sv[0]);
+ (void)kern_close(td, sv[1]);
+ }
+ return (error);
}
#if defined(__i386__) || (defined(__amd64__) && defined(COMPAT_LINUX32))
More information about the svn-src-head
mailing list