untrusted comment: verify with openbsd-71-base.pub
RWR2eHwZTOEiTWM/33Xm16jI5aUA39RftbJHCAj5QCd7hGjClCJlGYAbshlU/LBcZFHELpT3Di5cxQgQnZud+b8QFl9R5XVsUQI=
OpenBSD 7.1 errata 011, September 26, 2022:
In smtpd(8), possible use-after-free if TLS handshake fails for
outbound connections.
Apply by doing:
signify -Vep /etc/signify/openbsd-71-base.pub -x 011_smtpd.patch.sig \
-m - | (cd /usr/src && patch -p0)
And then rebuild and install smtpd:
cd /usr/src/usr.sbin/smtpd
make obj
make
make install
Index: usr.sbin/smtpd/mta_session.c
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/mta_session.c,v
retrieving revision 1.146
diff -u -p -r1.146 mta_session.c
--- usr.sbin/smtpd/mta_session.c 18 Feb 2022 17:02:06 -0000 1.146
+++ usr.sbin/smtpd/mta_session.c 22 Sep 2022 20:44:35 -0000
@@ -1212,6 +1212,8 @@ mta_io(struct io *io, int evt, void *arg
if (s->use_smtps) {
io_set_write(io);
mta_tls_init(s);
+ if (s->flags & MTA_FREE)
+ mta_free(s);
}
else {
mta_enter_state(s, MTA_BANNER);
@@ -1568,7 +1570,7 @@ mta_tls_init(struct mta_session *s)
if ((tls = tls_client()) == NULL) {
log_info("%016"PRIx64" mta closing reason=tls-failure", s->id);
- mta_free(s);
+ s->flags |= MTA_FREE;
return;
}
@@ -1582,14 +1584,14 @@ mta_tls_init(struct mta_session *s)
if (tls_configure(tls, remote->tls_config) == -1) {
log_info("%016"PRIx64" mta closing reason=tls-failure", s->id);
tls_free(tls);
- mta_free(s);
+ s->flags |= MTA_FREE;
return;
}
if (io_connect_tls(s->io, tls, s->mxname) == -1) {
log_info("%016"PRIx64" mta closing reason=tls-connect-failed", s->id);
tls_free(tls);
- mta_free(s);
+ s->flags |= MTA_FREE;
}
}