Page MenuHomeFreeBSD

D25392.id74058.diff
No OneTemporary

D25392.id74058.diff

Index: sys/compat/linux/linux_socket.c
===================================================================
--- sys/compat/linux/linux_socket.c
+++ sys/compat/linux/linux_socket.c
@@ -1196,11 +1196,14 @@
if (error != 0)
return (error);
- if (msg->msg_name) {
+ if (msg->msg_name != NULL && msg->msg_namelen > 0) {
+ msg->msg_namelen = min(msg->msg_namelen, SOCK_MAXADDRLEN);
sa = malloc(msg->msg_namelen, M_SONAME, M_WAITOK);
msg->msg_name = sa;
- } else
+ } else {
sa = NULL;
+ msg->msg_name = NULL;
+ }
uiov = msg->msg_iov;
msg->msg_iov = iov;
@@ -1210,7 +1213,10 @@
if (error != 0)
goto bad;
- if (msg->msg_name) {
+ /*
+ * Note that kern_recvit() updates msg->msg_namelen.
+ */
+ 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)

File Metadata

Mime Type
text/plain
Expires
Fri, Nov 14, 12:27 AM (8 h, 57 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25270559
Default Alt Text
D25392.id74058.diff (899 B)

Event Timeline