mirror of
https://git.freebsd.org/ports.git
synced 2025-07-18 01:39:16 -04:00
- bsd-user: fix sendmsg(2) emulation w/o ancillary data.
- Bump PORTREVISION.
Submitted by: sbruno
Obtained from: ad92220df3
This commit is contained in:
parent
01c0b8c01c
commit
90a40bb73b
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=369997
2 changed files with 61 additions and 1 deletions
|
@ -3,7 +3,7 @@
|
|||
|
||||
PORTNAME= qemu
|
||||
PORTVERSION= 2.0.2
|
||||
PORTREVISION= 3
|
||||
PORTREVISION= 4
|
||||
CATEGORIES= emulators
|
||||
MASTER_SITES= http://wiki.qemu.org/download/:release \
|
||||
LOCAL/nox:snapshot
|
||||
|
@ -79,6 +79,7 @@ EXTRA_PATCHES+= ${FILESDIR}/extra-patch-21927cffcc7bcacbb953155f778200846df9f60e
|
|||
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-bsd-user-freebsd-os-sys.c
|
||||
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-sysctl-hw-physmem
|
||||
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-max-arg-pages
|
||||
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-ad92220df37d1ab3120316fcc436071c78817561
|
||||
.endif
|
||||
|
||||
CONFIGURE_ARGS+= --extra-ldflags=-L${LOCALBASE}/lib
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
From ad92220df37d1ab3120316fcc436071c78817561 Mon Sep 17 00:00:00 2001
|
||||
From: Sean Bruno <sbruno@chips.ysv.freebsd.org>
|
||||
Date: Sat, 4 Oct 2014 20:36:32 +0000
|
||||
Subject: [PATCH] Ancillary data in the msghdr struct is optional, not
|
||||
mandatory.
|
||||
|
||||
If it doesn't exist, that's ok sendmsg() anyway. Fixes pkg repo
|
||||
issues now that pkg uses sendmsg.
|
||||
---
|
||||
bsd-user/freebsd/os-socket.h | 22 +++++++++++++++++-----
|
||||
1 file changed, 17 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/bsd-user/freebsd/os-socket.h b/bsd-user/freebsd/os-socket.h
|
||||
index 9339ffb..a5f5ca7 100644
|
||||
--- a/bsd-user/freebsd/os-socket.h
|
||||
+++ b/bsd-user/freebsd/os-socket.h
|
||||
@@ -54,9 +54,15 @@ static inline abi_long do_freebsd_sendmsg(int fd, abi_ulong target_msg,
|
||||
msg.msg_name = NULL;
|
||||
msg.msg_namelen = 0;
|
||||
}
|
||||
- msg.msg_controllen = 2 * tswapal(msgp->msg_controllen);
|
||||
- msg.msg_control = alloca(msg.msg_controllen);
|
||||
- msg.msg_flags = tswap32(msgp->msg_flags);
|
||||
+ if (tswapal(msgp->msg_controllen) > 0) {
|
||||
+ msg.msg_controllen = 2 * tswapal(msgp->msg_controllen);
|
||||
+ msg.msg_control = alloca(msg.msg_controllen);
|
||||
+ msg.msg_flags = tswap32(msgp->msg_flags);
|
||||
+ } else {
|
||||
+ msg.msg_controllen = 0;
|
||||
+ msg.msg_control = NULL;
|
||||
+ msg.msg_flags = 0;
|
||||
+ }
|
||||
|
||||
count = tswapal(msgp->msg_iovlen);
|
||||
vec = alloca(count * sizeof(struct iovec));
|
||||
@@ -65,7 +71,10 @@ static inline abi_long do_freebsd_sendmsg(int fd, abi_ulong target_msg,
|
||||
msg.msg_iovlen = count;
|
||||
msg.msg_iov = vec;
|
||||
|
||||
- ret = t2h_freebsd_cmsg(&msg, msgp);
|
||||
+ if (msg.msg_controllen > 0)
|
||||
+ ret = t2h_freebsd_cmsg(&msg, msgp);
|
||||
+ else /* no ancillary data */
|
||||
+ ret = 0;
|
||||
if (!is_error(ret)) {
|
||||
ret = get_errno(sendmsg(fd, &msg, flags));
|
||||
}
|
||||
@@ -116,7 +125,10 @@ static inline abi_long do_freebsd_recvmsg(int fd, abi_ulong target_msg,
|
||||
ret = get_errno(recvmsg(fd, &msg, flags));
|
||||
if (!is_error(ret)) {
|
||||
len = ret;
|
||||
- ret = h2t_freebsd_cmsg(msgp, &msg);
|
||||
+ if (msg.msg_controllen > 0)
|
||||
+ ret = h2t_freebsd_cmsg(msgp, &msg);
|
||||
+ else /* no ancillary data */
|
||||
+ ret = 0;
|
||||
if (!is_error(ret)) {
|
||||
msgp->msg_namelen = tswap32(msg.msg_namelen);
|
||||
if (msg.msg_name != NULL) {
|
Loading…
Add table
Reference in a new issue