mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-20 11:11:24 +00:00
Implement a variation of the accept_common() which takes
a flags argument. Do not preserve td_retval before kern_fcntl(F_SETFL) as it does not changed. Approved by: kib (mentor) MFC after: 1 month
This commit is contained in:
parent
c8f37d612d
commit
93e694c9df
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=193263
@ -772,7 +772,10 @@ linux_accept_common(struct thread *td, int s, l_uintptr_t addr,
|
||||
struct sockaddr * __restrict name;
|
||||
socklen_t * __restrict anamelen;
|
||||
} */ bsd_args;
|
||||
int error, fd;
|
||||
int error;
|
||||
|
||||
if (flags & ~(LINUX_SOCK_CLOEXEC | LINUX_SOCK_NONBLOCK))
|
||||
return (EINVAL);
|
||||
|
||||
bsd_args.s = s;
|
||||
/* XXX: */
|
||||
@ -785,23 +788,27 @@ linux_accept_common(struct thread *td, int s, l_uintptr_t addr,
|
||||
return (EINVAL);
|
||||
return (error);
|
||||
}
|
||||
if (addr) {
|
||||
error = linux_sa_put(PTRIN(addr));
|
||||
if (error) {
|
||||
(void)kern_close(td, td->td_retval[0]);
|
||||
return (error);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* linux appears not to copy flags from the parent socket to the
|
||||
* accepted one, so we must clear the flags in the new descriptor.
|
||||
* Ignore any errors, because we already have an open fd.
|
||||
* accepted one, so we must clear the flags in the new descriptor
|
||||
* and apply the requested flags.
|
||||
*/
|
||||
fd = td->td_retval[0];
|
||||
(void)kern_fcntl(td, fd, F_SETFL, 0);
|
||||
td->td_retval[0] = fd;
|
||||
return (0);
|
||||
error = kern_fcntl(td, td->td_retval[0], F_SETFL, 0);
|
||||
if (error)
|
||||
goto out;
|
||||
error = linux_set_socket_flags(td, td->td_retval[0], flags);
|
||||
if (error)
|
||||
goto out;
|
||||
if (addr)
|
||||
error = linux_sa_put(PTRIN(addr));
|
||||
|
||||
out:
|
||||
if (error) {
|
||||
(void)kern_close(td, td->td_retval[0]);
|
||||
td->td_retval[0] = 0;
|
||||
}
|
||||
return (error);
|
||||
}
|
||||
|
||||
struct linux_accept_args {
|
||||
|
Loading…
Reference in New Issue
Block a user