aboutsummaryrefslogtreecommitdiff
path: root/sys/netgraph/ng_ksocket.c
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2023-11-30 16:30:55 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2023-11-30 16:31:10 +0000
commit0fac350c54d0a72f5341e15021efcde63eb58a4b (patch)
tree6b4229e6fe419e850c04226390fbe5396569aba6 /sys/netgraph/ng_ksocket.c
parentcfb1e92912b4cf75360b7fbe86197cc29bc212c1 (diff)
Diffstat (limited to 'sys/netgraph/ng_ksocket.c')
-rw-r--r--sys/netgraph/ng_ksocket.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/sys/netgraph/ng_ksocket.c b/sys/netgraph/ng_ksocket.c
index 23a53528833f..98eb19ab485b 100644
--- a/sys/netgraph/ng_ksocket.c
+++ b/sys/netgraph/ng_ksocket.c
@@ -771,9 +771,8 @@ ng_ksocket_rcvmsg(node_p node, item_p item, hook_p lasthook)
case NGM_KSOCKET_GETNAME:
case NGM_KSOCKET_GETPEERNAME:
{
- int (*func)(struct socket *so, struct sockaddr **nam);
- struct sockaddr *sa = NULL;
- int len;
+ int (*func)(struct socket *so, struct sockaddr *sa);
+ struct sockaddr_storage ss = { .ss_len = sizeof(ss) };
/* Sanity check */
if (msg->header.arglen != 0)
@@ -786,27 +785,22 @@ ng_ksocket_rcvmsg(node_p node, item_p item, hook_p lasthook)
if ((so->so_state
& (SS_ISCONNECTED|SS_ISCONFIRMING)) == 0)
ERROUT(ENOTCONN);
- func = so->so_proto->pr_peeraddr;
+ func = sopeeraddr;
} else
- func = so->so_proto->pr_sockaddr;
+ func = sosockaddr;
/* Get local or peer address */
- if ((error = (*func)(so, &sa)) != 0)
- goto bail;
- len = (sa == NULL) ? 0 : sa->sa_len;
+ error = (*func)(so, (struct sockaddr *)&ss);
+ if (error)
+ break;
/* Send it back in a response */
- NG_MKRESPONSE(resp, msg, len, M_NOWAIT);
- if (resp == NULL) {
+ NG_MKRESPONSE(resp, msg, ss.ss_len, M_NOWAIT);
+ if (resp != NULL)
+ bcopy(&ss, resp->data, ss.ss_len);
+ else
error = ENOMEM;
- goto bail;
- }
- bcopy(sa, resp->data, len);
- bail:
- /* Cleanup */
- if (sa != NULL)
- free(sa, M_SONAME);
break;
}