Index | Thread | Search

From:
"Omar Polo" <op@omarpolo.com>
Subject:
smtpd: less casting around m_get_sockaddr()
To:
tech@openbsd.org
Date:
Thu, 29 Oct 2026 09:37:19 +0100

Download raw body.

Thread
m_get_sockaddr() gets a sockaddr, but all callers are actually passing a
sockaddr_storage.  maybe we can have less casting.

ok?

diff -s /usr/src
path + /usr/src (staged changes)
commit - d284dec97d37a05b69b78bc296868cbd8b92870e
blob - 449f38e79c4d2648bf39e791a3b32f2534abe820
blob + 2a40d0d5f285db19139eec7358cc2f02c172d8a4
--- usr.sbin/smtpd/lka.c
+++ usr.sbin/smtpd/lka.c
@@ -131,7 +131,7 @@ lka_imsg(struct mproc *p, struct imsg *imsg)
 		m_msg(&m, imsg);
 		m_get_id(&m, &reqid);
 		m_get_string(&m, &tablename);
-		m_get_sockaddr(&m, (struct sockaddr *)&ss);
+		m_get_sockaddr(&m, &ss);
 		m_end(&m);
 
 		ret = lka_addrname(tablename, (struct sockaddr*)&ss,
@@ -238,7 +238,7 @@ lka_imsg(struct mproc *p, struct imsg *imsg)
 		m_msg(&m, imsg);
 		m_get_id(&m, &reqid);
 		m_get_string(&m, &tablename);
-		m_get_sockaddr(&m, (struct sockaddr *)&ss);
+		m_get_sockaddr(&m, &ss);
 		m_end(&m);
 
 		ret = lka_addrname(tablename, (struct sockaddr*)&ss,
@@ -376,8 +376,8 @@ lka_imsg(struct mproc *p, struct imsg *imsg)
 		m_get_id(&m, &reqid);
 		m_get_string(&m, &rdns);
 		m_get_int(&m, &fcrdns);
-		m_get_sockaddr(&m, (struct sockaddr *)&ss_src);
-		m_get_sockaddr(&m, (struct sockaddr *)&ss_dest);
+		m_get_sockaddr(&m, &ss_src);
+		m_get_sockaddr(&m, &ss_dest);
 		m_end(&m);
 
 		lka_report_smtp_link_connect(direction, &tv, reqid, rdns, fcrdns, &ss_src, &ss_dest);
commit - d284dec97d37a05b69b78bc296868cbd8b92870e
blob - 5e3da81e2c685552761c7f538b49893b1b6fef45
blob + 116a4d22ca578b7e0f9cfd836959795f1947d83e
--- usr.sbin/smtpd/mproc.c
+++ usr.sbin/smtpd/mproc.c
@@ -584,14 +584,14 @@ m_get_id(struct msg *m, uint64_t *id)
 }
 
 void
-m_get_sockaddr(struct msg *m, struct sockaddr *sa)
+m_get_sockaddr(struct msg *m, struct sockaddr_storage *ss)
 {
 	size_t len;
 
 	m_get_size(m, &len);
-	if (len > sizeof(struct sockaddr_storage))
+	if (len > sizeof(*ss))
 		m_error("sockaddr size too large");
-	m_get(m, sa, len);
+	m_get(m, ss, len);
 }
 
 void
commit - d284dec97d37a05b69b78bc296868cbd8b92870e
blob - ecc38f8959113f82cbc6c1dbd29097773b6333aa
blob + 06a81d1fc69ec2591abe93f685bacacf86029595
--- usr.sbin/smtpd/mta.c
+++ usr.sbin/smtpd/mta.c
@@ -220,7 +220,7 @@ mta_imsg(struct mproc *p, struct imsg *imsg)
 		m_get_id(&m, &reqid);
 		m_get_int(&m, &status);
 		if (status == LKA_OK)
-			m_get_sockaddr(&m, (struct sockaddr*)&ss);
+			m_get_sockaddr(&m, &ss);
 		m_end(&m);
 
 		relay = tree_xpop(&wait_source, reqid);
@@ -249,7 +249,7 @@ mta_imsg(struct mproc *p, struct imsg *imsg)
 		m_msg(&m, imsg);
 		m_get_id(&m, &reqid);
 		m_get_string(&m, &hostname);
-		m_get_sockaddr(&m, (struct sockaddr*)&ss);
+		m_get_sockaddr(&m, &ss);
 		m_get_int(&m, &preference);
 		m_end(&m);
 		domain = tree_xget(&wait_mx, reqid);
@@ -405,7 +405,7 @@ mta_imsg(struct mproc *p, struct imsg *imsg)
 
 	case IMSG_CTL_MTA_BLOCK:
 		m_msg(&m, imsg);
-		m_get_sockaddr(&m, (struct sockaddr*)&ss);
+		m_get_sockaddr(&m, &ss);
 		m_get_string(&m, &dom);
 		m_end(&m);
 		source = mta_source((struct sockaddr*)&ss);
@@ -422,7 +422,7 @@ mta_imsg(struct mproc *p, struct imsg *imsg)
 
 	case IMSG_CTL_MTA_UNBLOCK:
 		m_msg(&m, imsg);
-		m_get_sockaddr(&m, (struct sockaddr*)&ss);
+		m_get_sockaddr(&m, &ss);
 		m_get_string(&m, &dom);
 		m_end(&m);
 		source = mta_source((struct sockaddr*)&ss);
commit - d284dec97d37a05b69b78bc296868cbd8b92870e
blob - 4d12f443a33330b29f09ab67a1737b55a721ad00
blob + aaabb175b4e839fb0885d001354171c24c4a2b81
--- usr.sbin/smtpd/resolver.c
+++ usr.sbin/smtpd/resolver.c
@@ -199,7 +199,7 @@ resolver_dispatch_request(struct mproc *proc, struct i
 
 	case IMSG_GETNAMEINFO:
 		sa = (struct sockaddr*)&ss;
-		m_get_sockaddr(&m, sa);
+		m_get_sockaddr(&m, &ss);
 		m_get_int(&m, &flags);
 		m_end(&m);
 
@@ -323,7 +323,7 @@ resolver_dispatch_result(struct mproc *proc, struct im
 		m_get_int(&m, &tai.ai_family);
 		m_get_int(&m, &tai.ai_socktype);
 		m_get_int(&m, &tai.ai_protocol);
-		m_get_sockaddr(&m, (struct sockaddr *)&ss);
+		m_get_sockaddr(&m, &ss);
 		m_get_string(&m, &cname);
 		m_end(&m);
 
commit - d284dec97d37a05b69b78bc296868cbd8b92870e
blob - f11b6872b7f4b066b19e37802ac0c899cda68495
blob + 2ccc416fcfa40d6f5bb28a9fa6dcb3aa5c30fccb
--- usr.sbin/smtpd/smtpd.h
+++ usr.sbin/smtpd/smtpd.h
@@ -1488,7 +1488,7 @@ void m_get_data(struct msg *, const void **, size_t *)
 void m_get_evpid(struct msg *, uint64_t *);
 void m_get_msgid(struct msg *, uint32_t *);
 void m_get_id(struct msg *, uint64_t *);
-void m_get_sockaddr(struct msg *, struct sockaddr *);
+void m_get_sockaddr(struct msg *, struct sockaddr_storage *);
 void m_get_mailaddr(struct msg *, struct mailaddr *);
 void m_get_envelope(struct msg *, struct envelope *);
 void m_get_params(struct msg *, struct dict *);