sync code with last improvements from OpenBSD

This commit is contained in:
purplerain 2023-09-04 03:58:35 +00:00
parent e70dd78b1d
commit eac5cf1f87
Signed by: purplerain
GPG Key ID: F42C07F07E2E35B7
11 changed files with 95 additions and 72 deletions

View File

@ -92,6 +92,7 @@
./usr/libdata/perl5/amd64-secbsd/CORE/scope.h ./usr/libdata/perl5/amd64-secbsd/CORE/scope.h
./usr/libdata/perl5/amd64-secbsd/CORE/sv.h ./usr/libdata/perl5/amd64-secbsd/CORE/sv.h
./usr/libdata/perl5/amd64-secbsd/CORE/sv_inline.h ./usr/libdata/perl5/amd64-secbsd/CORE/sv_inline.h
./usr/libdata/perl5/amd64-secbsd/CORE/syscall_emulator.h
./usr/libdata/perl5/amd64-secbsd/CORE/thread.h ./usr/libdata/perl5/amd64-secbsd/CORE/thread.h
./usr/libdata/perl5/amd64-secbsd/CORE/time64.h ./usr/libdata/perl5/amd64-secbsd/CORE/time64.h
./usr/libdata/perl5/amd64-secbsd/CORE/time64_config.h ./usr/libdata/perl5/amd64-secbsd/CORE/time64_config.h
@ -468,4 +469,4 @@
./usr/share/misc/pcvtfonts/vt220l.808 ./usr/share/misc/pcvtfonts/vt220l.808
./usr/share/misc/pcvtfonts/vt220l.810 ./usr/share/misc/pcvtfonts/vt220l.810
./usr/share/misc/pcvtfonts/vt220l.814 ./usr/share/misc/pcvtfonts/vt220l.814
./usr/share/misc/pcvtfonts/vt220l.816 ./usr/share/misc/pcvtfonts/vt220l.816

View File

@ -87,6 +87,7 @@
./usr/libdata/perl5/aarch64-secbsd/CORE/scope.h ./usr/libdata/perl5/aarch64-secbsd/CORE/scope.h
./usr/libdata/perl5/aarch64-secbsd/CORE/sv.h ./usr/libdata/perl5/aarch64-secbsd/CORE/sv.h
./usr/libdata/perl5/aarch64-secbsd/CORE/sv_inline.h ./usr/libdata/perl5/aarch64-secbsd/CORE/sv_inline.h
./usr/libdata/perl5/aarch64-secbsd/CORE/syscall_emulator.h
./usr/libdata/perl5/aarch64-secbsd/CORE/thread.h ./usr/libdata/perl5/aarch64-secbsd/CORE/thread.h
./usr/libdata/perl5/aarch64-secbsd/CORE/time64.h ./usr/libdata/perl5/aarch64-secbsd/CORE/time64.h
./usr/libdata/perl5/aarch64-secbsd/CORE/time64_config.h ./usr/libdata/perl5/aarch64-secbsd/CORE/time64_config.h
@ -430,4 +431,4 @@
./usr/sbin/wsconscfg ./usr/sbin/wsconscfg
./usr/sbin/wsfontload ./usr/sbin/wsfontload
./usr/sbin/wsmoused ./usr/sbin/wsmoused
./usr/sbin/zzz ./usr/sbin/zzz

View File

@ -87,6 +87,7 @@
./usr/libdata/perl5/arm-secbsd/CORE/scope.h ./usr/libdata/perl5/arm-secbsd/CORE/scope.h
./usr/libdata/perl5/arm-secbsd/CORE/sv.h ./usr/libdata/perl5/arm-secbsd/CORE/sv.h
./usr/libdata/perl5/arm-secbsd/CORE/sv_inline.h ./usr/libdata/perl5/arm-secbsd/CORE/sv_inline.h
./usr/libdata/perl5/arm-secbsd/CORE/syscall_emulator.h
./usr/libdata/perl5/arm-secbsd/CORE/thread.h ./usr/libdata/perl5/arm-secbsd/CORE/thread.h
./usr/libdata/perl5/arm-secbsd/CORE/time64.h ./usr/libdata/perl5/arm-secbsd/CORE/time64.h
./usr/libdata/perl5/arm-secbsd/CORE/time64_config.h ./usr/libdata/perl5/arm-secbsd/CORE/time64_config.h
@ -425,4 +426,4 @@
./usr/sbin/pcidump ./usr/sbin/pcidump
./usr/sbin/wsconscfg ./usr/sbin/wsconscfg
./usr/sbin/wsfontload ./usr/sbin/wsfontload
./usr/sbin/wsmoused ./usr/sbin/wsmoused

View File

@ -94,6 +94,7 @@
./usr/libdata/perl5/i386-secbsd/CORE/scope.h ./usr/libdata/perl5/i386-secbsd/CORE/scope.h
./usr/libdata/perl5/i386-secbsd/CORE/sv.h ./usr/libdata/perl5/i386-secbsd/CORE/sv.h
./usr/libdata/perl5/i386-secbsd/CORE/sv_inline.h ./usr/libdata/perl5/i386-secbsd/CORE/sv_inline.h
./usr/libdata/perl5/i386-secbsd/CORE/syscall_emulator.h
./usr/libdata/perl5/i386-secbsd/CORE/thread.h ./usr/libdata/perl5/i386-secbsd/CORE/thread.h
./usr/libdata/perl5/i386-secbsd/CORE/time64.h ./usr/libdata/perl5/i386-secbsd/CORE/time64.h
./usr/libdata/perl5/i386-secbsd/CORE/time64_config.h ./usr/libdata/perl5/i386-secbsd/CORE/time64_config.h
@ -466,4 +467,4 @@
./usr/share/misc/pcvtfonts/vt220l.808 ./usr/share/misc/pcvtfonts/vt220l.808
./usr/share/misc/pcvtfonts/vt220l.810 ./usr/share/misc/pcvtfonts/vt220l.810
./usr/share/misc/pcvtfonts/vt220l.814 ./usr/share/misc/pcvtfonts/vt220l.814
./usr/share/misc/pcvtfonts/vt220l.816 ./usr/share/misc/pcvtfonts/vt220l.816

View File

@ -1,4 +1,4 @@
/* $OpenBSD: tcp_input.c,v 1.390 2023/08/28 14:50:01 bluhm Exp $ */ /* $OpenBSD: tcp_input.c,v 1.391 2023/09/03 21:37:17 bluhm Exp $ */
/* $NetBSD: tcp_input.c,v 1.23 1996/02/13 23:43:44 christos Exp $ */ /* $NetBSD: tcp_input.c,v 1.23 1996/02/13 23:43:44 christos Exp $ */
/* /*
@ -3159,19 +3159,6 @@ syn_cache_put(struct syn_cache *sc)
pool_put(&syn_cache_pool, sc); pool_put(&syn_cache_pool, sc);
} }
/*
* We don't estimate RTT with SYNs, so each packet starts with the default
* RTT and each timer step has a fixed timeout value.
*/
#define SYN_CACHE_TIMER_ARM(sc) \
do { \
TCPT_RANGESET((sc)->sc_rxtcur, \
TCPTV_SRTTDFLT * tcp_backoff[(sc)->sc_rxtshift], TCPTV_MIN, \
TCPTV_REXMTMAX); \
if (timeout_add_msec(&(sc)->sc_timer, (sc)->sc_rxtcur)) \
refcnt_take(&(sc)->sc_refcnt); \
} while (/*CONSTCOND*/0)
void void
syn_cache_init(void) syn_cache_init(void)
{ {
@ -3300,11 +3287,17 @@ syn_cache_insert(struct syn_cache *sc, struct tcpcb *tp)
} }
/* /*
* Initialize the entry's timer. * Initialize the entry's timer. We don't estimate RTT
* with SYNs, so each packet starts with the default RTT
* and each timer step has a fixed timeout value.
*/ */
sc->sc_rxttot = 0; sc->sc_rxttot = 0;
sc->sc_rxtshift = 0; sc->sc_rxtshift = 0;
SYN_CACHE_TIMER_ARM(sc); TCPT_RANGESET(sc->sc_rxtcur,
TCPTV_SRTTDFLT * tcp_backoff[sc->sc_rxtshift], TCPTV_MIN,
TCPTV_REXMTMAX);
if (timeout_add_msec(&sc->sc_timer, sc->sc_rxtcur))
refcnt_take(&sc->sc_refcnt);
/* Link it from tcpcb entry */ /* Link it from tcpcb entry */
refcnt_take(&sc->sc_refcnt); refcnt_take(&sc->sc_refcnt);
@ -3365,15 +3358,12 @@ syn_cache_timer(void *arg)
/* Advance the timer back-off. */ /* Advance the timer back-off. */
sc->sc_rxtshift++; sc->sc_rxtshift++;
SYN_CACHE_TIMER_ARM(sc); TCPT_RANGESET(sc->sc_rxtcur,
TCPTV_SRTTDFLT * tcp_backoff[sc->sc_rxtshift], TCPTV_MIN,
TCPTV_REXMTMAX);
if (!timeout_add_msec(&sc->sc_timer, sc->sc_rxtcur))
syn_cache_put(sc);
/*
* Decrement reference of this timer. We know there is another timer
* as we just added it. So just deref, free is not necessary.
*/
lastref = refcnt_rele(&sc->sc_refcnt);
KASSERT(lastref == 0);
(void)lastref;
NET_UNLOCK(); NET_UNLOCK();
return; return;

View File

@ -1,4 +1,4 @@
/* $OpenBSD: channels.c,v 1.432 2023/07/04 03:59:21 dlg Exp $ */ /* $OpenBSD: channels.c,v 1.433 2023/09/04 00:01:46 djm Exp $ */
/* /*
* Author: Tatu Ylonen <ylo@cs.hut.fi> * Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@ -2848,8 +2848,9 @@ channel_after_poll(struct ssh *ssh, struct pollfd *pfd, u_int npfd)
/* /*
* Enqueue data for channels with open or draining c->input. * Enqueue data for channels with open or draining c->input.
* Returns non-zero if a packet was enqueued.
*/ */
static void static int
channel_output_poll_input_open(struct ssh *ssh, Channel *c) channel_output_poll_input_open(struct ssh *ssh, Channel *c)
{ {
size_t len, plen; size_t len, plen;
@ -2872,7 +2873,7 @@ channel_output_poll_input_open(struct ssh *ssh, Channel *c)
else else
chan_ibuf_empty(ssh, c); chan_ibuf_empty(ssh, c);
} }
return; return 0;
} }
if (!c->have_remote_id) if (!c->have_remote_id)
@ -2889,7 +2890,7 @@ channel_output_poll_input_open(struct ssh *ssh, Channel *c)
*/ */
if (plen > c->remote_window || plen > c->remote_maxpacket) { if (plen > c->remote_window || plen > c->remote_maxpacket) {
debug("channel %d: datagram too big", c->self); debug("channel %d: datagram too big", c->self);
return; return 0;
} }
/* Enqueue it */ /* Enqueue it */
if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_DATA)) != 0 || if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_DATA)) != 0 ||
@ -2898,7 +2899,7 @@ channel_output_poll_input_open(struct ssh *ssh, Channel *c)
(r = sshpkt_send(ssh)) != 0) (r = sshpkt_send(ssh)) != 0)
fatal_fr(r, "channel %i: send datagram", c->self); fatal_fr(r, "channel %i: send datagram", c->self);
c->remote_window -= plen; c->remote_window -= plen;
return; return 1;
} }
/* Enqueue packet for buffered data. */ /* Enqueue packet for buffered data. */
@ -2907,7 +2908,7 @@ channel_output_poll_input_open(struct ssh *ssh, Channel *c)
if (len > c->remote_maxpacket) if (len > c->remote_maxpacket)
len = c->remote_maxpacket; len = c->remote_maxpacket;
if (len == 0) if (len == 0)
return; return 0;
if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_DATA)) != 0 || if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_DATA)) != 0 ||
(r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 ||
(r = sshpkt_put_string(ssh, sshbuf_ptr(c->input), len)) != 0 || (r = sshpkt_put_string(ssh, sshbuf_ptr(c->input), len)) != 0 ||
@ -2916,19 +2917,21 @@ channel_output_poll_input_open(struct ssh *ssh, Channel *c)
if ((r = sshbuf_consume(c->input, len)) != 0) if ((r = sshbuf_consume(c->input, len)) != 0)
fatal_fr(r, "channel %i: consume", c->self); fatal_fr(r, "channel %i: consume", c->self);
c->remote_window -= len; c->remote_window -= len;
return 1;
} }
/* /*
* Enqueue data for channels with open c->extended in read mode. * Enqueue data for channels with open c->extended in read mode.
* Returns non-zero if a packet was enqueued.
*/ */
static void static int
channel_output_poll_extended_read(struct ssh *ssh, Channel *c) channel_output_poll_extended_read(struct ssh *ssh, Channel *c)
{ {
size_t len; size_t len;
int r; int r;
if ((len = sshbuf_len(c->extended)) == 0) if ((len = sshbuf_len(c->extended)) == 0)
return; return 0;
debug2("channel %d: rwin %u elen %zu euse %d", c->self, debug2("channel %d: rwin %u elen %zu euse %d", c->self,
c->remote_window, sshbuf_len(c->extended), c->extended_usage); c->remote_window, sshbuf_len(c->extended), c->extended_usage);
@ -2937,7 +2940,7 @@ channel_output_poll_extended_read(struct ssh *ssh, Channel *c)
if (len > c->remote_maxpacket) if (len > c->remote_maxpacket)
len = c->remote_maxpacket; len = c->remote_maxpacket;
if (len == 0) if (len == 0)
return; return 0;
if (!c->have_remote_id) if (!c->have_remote_id)
fatal_f("channel %d: no remote id", c->self); fatal_f("channel %d: no remote id", c->self);
if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_EXTENDED_DATA)) != 0 || if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_EXTENDED_DATA)) != 0 ||
@ -2950,15 +2953,20 @@ channel_output_poll_extended_read(struct ssh *ssh, Channel *c)
fatal_fr(r, "channel %i: consume", c->self); fatal_fr(r, "channel %i: consume", c->self);
c->remote_window -= len; c->remote_window -= len;
debug2("channel %d: sent ext data %zu", c->self, len); debug2("channel %d: sent ext data %zu", c->self, len);
return 1;
} }
/* If there is data to send to the connection, enqueue some of it now. */ /*
void * If there is data to send to the connection, enqueue some of it now.
* Returns non-zero if data was enqueued.
*/
int
channel_output_poll(struct ssh *ssh) channel_output_poll(struct ssh *ssh)
{ {
struct ssh_channels *sc = ssh->chanctxt; struct ssh_channels *sc = ssh->chanctxt;
Channel *c; Channel *c;
u_int i; u_int i;
int ret = 0;
for (i = 0; i < sc->channels_alloc; i++) { for (i = 0; i < sc->channels_alloc; i++) {
c = sc->channels[i]; c = sc->channels[i];
@ -2981,12 +2989,13 @@ channel_output_poll(struct ssh *ssh)
/* Get the amount of buffered data for this channel. */ /* Get the amount of buffered data for this channel. */
if (c->istate == CHAN_INPUT_OPEN || if (c->istate == CHAN_INPUT_OPEN ||
c->istate == CHAN_INPUT_WAIT_DRAIN) c->istate == CHAN_INPUT_WAIT_DRAIN)
channel_output_poll_input_open(ssh, c); ret |= channel_output_poll_input_open(ssh, c);
/* Send extended data, i.e. stderr */ /* Send extended data, i.e. stderr */
if (!(c->flags & CHAN_EOF_SENT) && if (!(c->flags & CHAN_EOF_SENT) &&
c->extended_usage == CHAN_EXTENDED_READ) c->extended_usage == CHAN_EXTENDED_READ)
channel_output_poll_extended_read(ssh, c); ret |= channel_output_poll_extended_read(ssh, c);
} }
return ret;
} }
/* -- mux proxy support */ /* -- mux proxy support */

View File

@ -1,4 +1,4 @@
/* $OpenBSD: channels.h,v 1.151 2023/07/04 03:59:21 dlg Exp $ */ /* $OpenBSD: channels.h,v 1.152 2023/09/04 00:01:46 djm Exp $ */
/* /*
* Author: Tatu Ylonen <ylo@cs.hut.fi> * Author: Tatu Ylonen <ylo@cs.hut.fi>
@ -332,7 +332,7 @@ struct timespec;
void channel_prepare_poll(struct ssh *, struct pollfd **, void channel_prepare_poll(struct ssh *, struct pollfd **,
u_int *, u_int *, u_int, struct timespec *); u_int *, u_int *, u_int, struct timespec *);
void channel_after_poll(struct ssh *, struct pollfd *, u_int); void channel_after_poll(struct ssh *, struct pollfd *, u_int);
void channel_output_poll(struct ssh *); int channel_output_poll(struct ssh *);
int channel_not_very_much_buffered_data(struct ssh *); int channel_not_very_much_buffered_data(struct ssh *);
void channel_close_all(struct ssh *); void channel_close_all(struct ssh *);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: clientloop.c,v 1.394 2023/08/28 04:06:52 djm Exp $ */ /* $OpenBSD: clientloop.c,v 1.396 2023/09/04 00:08:14 djm Exp $ */
/* /*
* Author: Tatu Ylonen <ylo@cs.hut.fi> * Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@ -524,7 +524,8 @@ send_chaff(struct ssh *ssh)
* output fd should be polled. * output fd should be polled.
*/ */
static int static int
obfuscate_keystroke_timing(struct ssh *ssh, struct timespec *timeout) obfuscate_keystroke_timing(struct ssh *ssh, struct timespec *timeout,
int channel_did_enqueue)
{ {
static int active; static int active;
static struct timespec next_interval, chaff_until; static struct timespec next_interval, chaff_until;
@ -549,7 +550,8 @@ obfuscate_keystroke_timing(struct ssh *ssh, struct timespec *timeout)
ssh_packet_have_data_to_write(ssh)) { ssh_packet_have_data_to_write(ssh)) {
/* Stop if the output buffer has more than a few keystrokes */ /* Stop if the output buffer has more than a few keystrokes */
stop_reason = "output buffer filling"; stop_reason = "output buffer filling";
} else if (active && ssh_packet_have_data_to_write(ssh)) { } else if (active && channel_did_enqueue &&
ssh_packet_have_data_to_write(ssh)) {
/* Still in active mode and have a keystroke queued. */ /* Still in active mode and have a keystroke queued. */
had_keystroke = 1; had_keystroke = 1;
} else if (active) { } else if (active) {
@ -564,9 +566,11 @@ obfuscate_keystroke_timing(struct ssh *ssh, struct timespec *timeout)
} }
if (stop_reason != NULL) { if (stop_reason != NULL) {
active = 0; if (active) {
debug3_f("stopping: %s (%llu chaff packets sent)", debug3_f("stopping: %s (%llu chaff packets sent)",
stop_reason, nchaff); stop_reason, nchaff);
active = 0;
}
return 1; return 1;
} }
@ -576,7 +580,8 @@ obfuscate_keystroke_timing(struct ssh *ssh, struct timespec *timeout)
* interactively. In this case, start quantising outbound packets to * interactively. In this case, start quantising outbound packets to
* fixed time intervals to hide inter-keystroke timing. * fixed time intervals to hide inter-keystroke timing.
*/ */
if (!active && ssh_packet_interactive_data_to_write(ssh)) { if (!active && ssh_packet_interactive_data_to_write(ssh) &&
channel_did_enqueue && ssh_packet_have_data_to_write(ssh)) {
debug3_f("starting: interval %d", debug3_f("starting: interval %d",
options.obscure_keystroke_timing_interval); options.obscure_keystroke_timing_interval);
just_started = had_keystroke = active = 1; just_started = had_keystroke = active = 1;
@ -626,7 +631,7 @@ obfuscate_keystroke_timing(struct ssh *ssh, struct timespec *timeout)
*/ */
static void static void
client_wait_until_can_do_something(struct ssh *ssh, struct pollfd **pfdp, client_wait_until_can_do_something(struct ssh *ssh, struct pollfd **pfdp,
u_int *npfd_allocp, u_int *npfd_activep, int rekeying, u_int *npfd_allocp, u_int *npfd_activep, int channel_did_enqueue,
int *conn_in_readyp, int *conn_out_readyp) int *conn_in_readyp, int *conn_out_readyp)
{ {
struct timespec timeout; struct timespec timeout;
@ -650,7 +655,7 @@ client_wait_until_can_do_something(struct ssh *ssh, struct pollfd **pfdp,
return; return;
} }
oready = obfuscate_keystroke_timing(ssh, &timeout); oready = obfuscate_keystroke_timing(ssh, &timeout, channel_did_enqueue);
/* Monitor server connection on reserved pollfd entries */ /* Monitor server connection on reserved pollfd entries */
(*pfdp)[0].fd = connection_in; (*pfdp)[0].fd = connection_in;
@ -669,7 +674,7 @@ client_wait_until_can_do_something(struct ssh *ssh, struct pollfd **pfdp,
ptimeout_deadline_monotime(&timeout, control_persist_exit_time); ptimeout_deadline_monotime(&timeout, control_persist_exit_time);
if (options.server_alive_interval > 0) if (options.server_alive_interval > 0)
ptimeout_deadline_monotime(&timeout, server_alive_time); ptimeout_deadline_monotime(&timeout, server_alive_time);
if (options.rekey_interval > 0 && !rekeying) { if (options.rekey_interval > 0 && !ssh_packet_is_rekeying(ssh)) {
ptimeout_deadline_sec(&timeout, ptimeout_deadline_sec(&timeout,
ssh_packet_get_rekey_timeout(ssh)); ssh_packet_get_rekey_timeout(ssh));
} }
@ -1391,7 +1396,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg,
struct pollfd *pfd = NULL; struct pollfd *pfd = NULL;
u_int npfd_alloc = 0, npfd_active = 0; u_int npfd_alloc = 0, npfd_active = 0;
double start_time, total_time; double start_time, total_time;
int r, len; int channel_did_enqueue = 0, r, len;
u_int64_t ibytes, obytes; u_int64_t ibytes, obytes;
int conn_in_ready, conn_out_ready; int conn_in_ready, conn_out_ready;
@ -1481,6 +1486,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg,
/* Main loop of the client for the interactive session mode. */ /* Main loop of the client for the interactive session mode. */
while (!quit_pending) { while (!quit_pending) {
channel_did_enqueue = 0;
/* Process buffered packets sent by the server. */ /* Process buffered packets sent by the server. */
client_process_buffered_input_packets(ssh); client_process_buffered_input_packets(ssh);
@ -1502,7 +1508,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg,
* enqueue them for sending to the server. * enqueue them for sending to the server.
*/ */
if (ssh_packet_not_very_much_data_to_write(ssh)) if (ssh_packet_not_very_much_data_to_write(ssh))
channel_output_poll(ssh); channel_did_enqueue = channel_output_poll(ssh);
/* /*
* Check if the window size has changed, and buffer a * Check if the window size has changed, and buffer a
@ -1518,7 +1524,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg,
* available on one of the descriptors). * available on one of the descriptors).
*/ */
client_wait_until_can_do_something(ssh, &pfd, &npfd_alloc, client_wait_until_can_do_something(ssh, &pfd, &npfd_alloc,
&npfd_active, ssh_packet_is_rekeying(ssh), &npfd_active, channel_did_enqueue,
&conn_in_ready, &conn_out_ready); &conn_in_ready, &conn_out_ready);
if (quit_pending) if (quit_pending)

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ssh.c,v 1.593 2023/07/26 23:06:00 djm Exp $ */ /* $OpenBSD: ssh.c,v 1.594 2023/09/03 23:59:32 djm Exp $ */
/* /*
* Author: Tatu Ylonen <ylo@cs.hut.fi> * Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@ -2119,7 +2119,7 @@ ssh_session2_open(struct ssh *ssh)
static int static int
ssh_session2(struct ssh *ssh, const struct ssh_conn_info *cinfo) ssh_session2(struct ssh *ssh, const struct ssh_conn_info *cinfo)
{ {
int r, id = -1; int r, interactive, id = -1;
char *cp, *tun_fwd_ifname = NULL; char *cp, *tun_fwd_ifname = NULL;
/* XXX should be pre-session */ /* XXX should be pre-session */
@ -2176,8 +2176,11 @@ ssh_session2(struct ssh *ssh, const struct ssh_conn_info *cinfo)
if (options.session_type != SESSION_TYPE_NONE) if (options.session_type != SESSION_TYPE_NONE)
id = ssh_session2_open(ssh); id = ssh_session2_open(ssh);
else { else {
ssh_packet_set_interactive(ssh, interactive = options.control_master == SSHCTL_MASTER_NO;
options.control_master == SSHCTL_MASTER_NO, /* ControlPersist may have clobbered ControlMaster, so check */
if (need_controlpersist_detach)
interactive = otty_flag != 0;
ssh_packet_set_interactive(ssh, interactive,
options.ip_qos_interactive, options.ip_qos_bulk); options.ip_qos_interactive, options.ip_qos_bulk);
} }

View File

@ -1,4 +1,4 @@
.\" $OpenBSD: dhcpd.8,v 1.31 2023/03/02 17:09:54 jmc Exp $ .\" $OpenBSD: dhcpd.8,v 1.32 2023/09/03 20:19:13 stsp Exp $
.\" .\"
.\" Copyright (c) 1995, 1996 The Internet Software Consortium. .\" Copyright (c) 1995, 1996 The Internet Software Consortium.
.\" All rights reserved. .\" All rights reserved.
@ -36,7 +36,7 @@
.\" see ``http://www.isc.org/''. To learn more about Vixie .\" see ``http://www.isc.org/''. To learn more about Vixie
.\" Enterprises, see ``http://www.vix.com''. .\" Enterprises, see ``http://www.vix.com''.
.\" .\"
.Dd $Mdocdate: March 2 2023 $ .Dd $Mdocdate: September 3 2023 $
.Dt DHCPD 8 .Dt DHCPD 8
.Os .Os
.Sh NAME .Sh NAME
@ -145,17 +145,27 @@ which a newly booted client would not be able to grasp.
The names of the network interfaces on which The names of the network interfaces on which
.Nm .Nm
should listen for broadcasts may be specified on the command line. should listen for broadcasts may be specified on the command line.
This should be done on systems where Listing interfaces on the command line is usually optional but is required
for running
.Nm .Nm
is unable to identify non-broadcast interfaces, in an
but should not be required on other systems. .Xr rdomain 4
other than 0, or on systems where
.Nm
is unable to identify non-broadcast interfaces.
All specified interfaces must share the same routing domain and
.Nm
will set its own routing domain accordingly.
.Pp
If no interface names are specified on the command line, If no interface names are specified on the command line,
and the
.Fl u
option is not given,
.Nm .Nm
will identify all network interfaces which are up, eliminating non-broadcast will run in routing domain 0, and if the
interfaces if possible, and listen for DHCP broadcasts on each interface. .Fl u
option is not given
.Nm
will identify all network interfaces in all routing domains,
eliminating non-broadcast interfaces if possible,
and listen for DHCP broadcasts on each interface.
.Pp .Pp
The options are as follows: The options are as follows:
.Bl -tag -width Ds .Bl -tag -width Ds
@ -464,6 +474,7 @@ DHCPD lease file.
.El .El
.Sh SEE ALSO .Sh SEE ALSO
.Xr pf 4 , .Xr pf 4 ,
.Xr rdomain 4 ,
.Xr dhcpd.conf 5 , .Xr dhcpd.conf 5 ,
.Xr dhcpd.leases 5 , .Xr dhcpd.leases 5 ,
.Xr dhclient 8 , .Xr dhclient 8 ,

View File

@ -1,4 +1,4 @@
/* $OpenBSD: inetd.c,v 1.164 2023/04/19 12:58:16 jsg Exp $ */ /* $OpenBSD: inetd.c,v 1.165 2023/09/03 22:01:00 bluhm Exp $ */
/* /*
* Copyright (c) 1983,1991 The Regents of the University of California. * Copyright (c) 1983,1991 The Regents of the University of California.
@ -444,7 +444,7 @@ dg_badinput(struct sockaddr *sa)
if (IN_MULTICAST(in.s_addr)) if (IN_MULTICAST(in.s_addr))
goto bad; goto bad;
switch ((in.s_addr & 0xff000000) >> 24) { switch ((in.s_addr & 0xff000000) >> 24) {
case 0: case 127: case 255: case 0: case 255:
goto bad; goto bad;
} }
if (dg_broadcast(&in)) if (dg_broadcast(&in))