Page MenuHomeFreeBSD

D25804.diff
No OneTemporary

D25804.diff

Index: head/sys/compat/linux/linux_socket.c
===================================================================
--- head/sys/compat/linux/linux_socket.c
+++ head/sys/compat/linux/linux_socket.c
@@ -394,6 +394,22 @@
}
static int
+linux_copyout_sockaddr(const struct sockaddr *sa, void *uaddr, size_t len)
+{
+ struct l_sockaddr *lsa;
+ int error;
+
+ error = bsd_to_linux_sockaddr(sa, &lsa, len);
+ if (error != 0)
+ return (error);
+
+ error = copyout(lsa, uaddr, len);
+ free(lsa, M_SONAME);
+
+ return (error);
+}
+
+static int
linux_sendit(struct thread *td, int s, struct msghdr *mp, int flags,
struct mbuf *control, enum uio_seg segflg)
{
@@ -609,7 +625,6 @@
linux_accept_common(struct thread *td, int s, l_uintptr_t addr,
l_uintptr_t namelen, int flags)
{
- struct l_sockaddr *lsa;
struct sockaddr *sa;
struct file *fp, *fp1;
int bflags, len;
@@ -665,10 +680,7 @@
}
if (len != 0) {
- error = bsd_to_linux_sockaddr(sa, &lsa, len);
- if (error == 0)
- error = copyout(lsa, PTRIN(addr), len);
- free(lsa, M_SONAME);
+ error = linux_copyout_sockaddr(sa, PTRIN(addr), len);
/*
* XXX: We should also copyout the len, shouldn't we?
@@ -704,7 +716,6 @@
int
linux_getsockname(struct thread *td, struct linux_getsockname_args *args)
{
- struct l_sockaddr *lsa;
struct sockaddr *sa;
int len, error;
@@ -716,13 +727,8 @@
if (error != 0)
return (error);
- if (len != 0) {
- error = bsd_to_linux_sockaddr(sa, &lsa, len);
- if (error == 0)
- error = copyout(lsa, PTRIN(args->addr),
- len);
- free(lsa, M_SONAME);
- }
+ if (len != 0)
+ error = linux_copyout_sockaddr(sa, PTRIN(args->addr), len);
free(sa, M_SONAME);
if (error == 0)
@@ -733,7 +739,6 @@
int
linux_getpeername(struct thread *td, struct linux_getpeername_args *args)
{
- struct l_sockaddr *lsa;
struct sockaddr *sa;
int len, error;
@@ -747,13 +752,8 @@
if (error != 0)
return (error);
- if (len != 0) {
- error = bsd_to_linux_sockaddr(sa, &lsa, len);
- if (error == 0)
- error = copyout(lsa, PTRIN(args->addr),
- len);
- free(lsa, M_SONAME);
- }
+ if (len != 0)
+ error = linux_copyout_sockaddr(sa, PTRIN(args->addr), len);
free(sa, M_SONAME);
if (error == 0)
@@ -895,7 +895,6 @@
int
linux_recvfrom(struct thread *td, struct linux_recvfrom_args *args)
{
- struct l_sockaddr *lsa;
struct sockaddr *sa;
struct msghdr msg;
struct iovec aiov;
@@ -927,13 +926,8 @@
if (error != 0)
goto out;
- if (PTRIN(args->from) != NULL) {
- error = bsd_to_linux_sockaddr(sa, &lsa, msg.msg_namelen);
- if (error == 0)
- error = copyout(lsa, PTRIN(args->from),
- msg.msg_namelen);
- free(lsa, M_SONAME);
- }
+ if (PTRIN(args->from) != NULL)
+ error = linux_copyout_sockaddr(sa, PTRIN(args->from), msg.msg_namelen);
if (error == 0 && PTRIN(args->fromlen) != NULL)
error = copyout(&msg.msg_namelen, PTRIN(args->fromlen),
@@ -1170,7 +1164,6 @@
struct mbuf *control = NULL;
struct mbuf **controlp;
struct timeval *ftmvl;
- struct l_sockaddr *lsa;
struct sockaddr *sa;
l_timeval ltmvl;
caddr_t outbuf;
@@ -1216,11 +1209,8 @@
*/
if (msg->msg_name != NULL && msg->msg_namelen > 0) {
msg->msg_name = PTRIN(linux_msghdr.msg_name);
- error = bsd_to_linux_sockaddr(sa, &lsa, msg->msg_namelen);
- if (error == 0)
- error = copyout(lsa, PTRIN(msg->msg_name),
- msg->msg_namelen);
- free(lsa, M_SONAME);
+ error = linux_copyout_sockaddr(sa,
+ PTRIN(msg->msg_name), msg->msg_namelen);
if (error != 0)
goto bad;
}
@@ -1505,7 +1495,6 @@
l_timeval linux_tv;
struct timeval tv;
socklen_t tv_len, xulen, len;
- struct l_sockaddr *lsa;
struct sockaddr *sa;
struct xucred xu;
struct l_ucred lxu;
@@ -1591,10 +1580,7 @@
if (error != 0)
goto out;
- error = bsd_to_linux_sockaddr(sa, &lsa, len);
- if (error == 0)
- error = copyout(lsa, PTRIN(args->optval), len);
- free(lsa, M_SONAME);
+ error = linux_copyout_sockaddr(sa, PTRIN(args->optval), len);
if (error == 0)
error = copyout(&len, PTRIN(args->optlen),
sizeof(len));

File Metadata

Mime Type
text/plain
Expires
Sat, May 16, 6:36 PM (22 h, 17 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33144970
Default Alt Text
D25804.diff (3 KB)

Event Timeline