git: b9fa99600a78 - main - bsnmpd: fix unix/stream socket operation
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 25 Jul 2025 20:12:04 UTC
The branch main has been updated by glebius:
URL: https://cgit.FreeBSD.org/src/commit/?id=b9fa99600a78c66dce9040595f04bfe2ba25652c
commit b9fa99600a78c66dce9040595f04bfe2ba25652c
Author: Gleb Smirnoff <glebius@FreeBSD.org>
AuthorDate: 2025-07-25 20:09:59 +0000
Commit: Gleb Smirnoff <glebius@FreeBSD.org>
CommitDate: 2025-07-25 20:09:59 +0000
bsnmpd: fix unix/stream socket operation
With new send method, that gives us directly port_input pointer, we know
the correct file descriptor right away, no matter are we in SOCK_DGRAM or
in SOCK_STREAM mode. Previously, the function tried to search for the
socket, and that was totally wrong. With several simultaneous connections
this end up with sending a reply to incorrect socket.
Reviewed by: harti
Differential Revision: https://reviews.freebsd.org/D51361
---
contrib/bsnmp/snmpd/trans_lsock.c | 23 ++---------------------
1 file changed, 2 insertions(+), 21 deletions(-)
diff --git a/contrib/bsnmp/snmpd/trans_lsock.c b/contrib/bsnmp/snmpd/trans_lsock.c
index 4a850d434d7c..01beb01927ec 100644
--- a/contrib/bsnmp/snmpd/trans_lsock.c
+++ b/contrib/bsnmp/snmpd/trans_lsock.c
@@ -395,29 +395,10 @@ lsock_init_port(struct tport *tp)
* Send something
*/
static ssize_t
-lsock_send(struct tport *tp, const u_char *buf, size_t len,
+lsock_send(struct tport *tp __unused, const u_char *buf, size_t len,
struct port_input *pi)
{
- struct lsock_port *p = __containerof(tp, struct lsock_port, tport);
- struct lsock_peer *peer;
-
- if (p->type == LOCP_DGRAM_PRIV || p->type == LOCP_DGRAM_UNPRIV) {
- peer = LIST_FIRST(&p->peers);
-
- } else {
- /* search for the peer */
- LIST_FOREACH(peer, &p->peers, link)
- if (peer->input.peerlen == pi->peerlen &&
- memcmp(peer->input.peer, pi->peer, pi->peerlen) == 0)
- break;
- if (peer == NULL) {
- errno = ENOTCONN;
- return (-1);
- }
- }
-
- return (sendto(peer->input.fd, buf, len, MSG_NOSIGNAL, pi->peer,
- pi->peerlen));
+ return (sendto(pi->fd, buf, len, MSG_NOSIGNAL, pi->peer, pi->peerlen));
}
static void