From nobody Mon Nov 02 12:38:03 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4jJB7b4tdnz6yGkM for ; Mon, 02 Nov 2026 12:38:03 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4jJB7b0s58z3C9P for ; Mon, 02 Nov 2026 12:38:03 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793623083; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=LCuRz0pgdnV5W3phch6bSnJEn2RrEvJJ7B0bp/l0Jdw=; b=CcisNg6uMOvUsmz6kJl7IZ3I35ausVszFAVV8SW/FZjCV+eDa/HDGesZOxp2a8O4mWPR9I i/aVhRi10tKnGpGEQ3aqmtzef+/qPvTroPxcpl/Y0HqKf9OeENkJqc7VJs/R0JRD2uZZA7 BfXgQVBuJD4cNYwNWwiD2jVcF7s4Mu8C6h6pw5SRs6cNC3m+seIz3uXR0jiWM44c11RUaC Z2mGzPLsAQmyqBMcgnPCNK9cYe735JzlWp+tUmae1/MPEg5VQTHn7hXq23NYqSsJ9zsv5i YVYduHSWOd9GrsJ7nHa1OjWRF/rAay1Ks7o3l+cttsGxR6/Y2gmjgETl5avW1w== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1793623083; b=XZ7NYrqLSBmlZxvKSPz4e+C+C6h7YHw0Q59JULdJAxs6rIiSxhIZJ+my6UNKue4pqos7Qd UahEyhvvj5giTDkcuK76gdNvBZaQ2q9a7UbqtxIoM1dViQojVHelUghu2kpsY/d8faNqsH gyjo51rrM8Vp3JbbBxJ0mCU82Es0dFFuMeYEfuzzWK5j/43f4j1u76LPlhPydYfYgy2Brt r5hPy3CShU8RAI0HrODZYuq4kXoiEBSimLKkYjXtc63ikdlkgks+/Tgwvl4mSA01K+GVsE /+YSCuDunpbvo6xz5o0CpTP9AHifZAgfT0nyYrPP02jLpZHd20BNpAzJ+p9T5g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793623083; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=LCuRz0pgdnV5W3phch6bSnJEn2RrEvJJ7B0bp/l0Jdw=; b=sKqbZYFo30l5yqLt1YTo/bi/G4w0oTdFu/6KmObgJGehyHv9OCZ2HthcOFQaZMCYvY/kgI NLlUxtDdR+t93koG58T1IwXriJUdSjBWLzhzPWCHpUau/Wya63Ba5GFBok4MOQVjqwjPSO Ntux0E3V4Y7j9Z+0GR34JcqUWe1CIhmfFdchzOPIK+u2q/uadvlPJU2+sk9pLBwLRMAthl QKVJ63rUGxLUx+kO7EBx9ZEwx03WRazXah+uftR3d9Uyw1ebBfdKf4uX419PqfLy3u5RFu SaM48pY8qTqd+/Vkenf2XNwuk4VJsNT8lFZIr9MyszkpvZ6paZcI1ncLgo3tLA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4jJB7b038mzmPv for ; Mon, 02 Nov 2026 12:38:03 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 30edf by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 02 Nov 2026 12:38:03 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: d6678851308d - main - libfetch: Apply timeout to SSL handshake List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: Commit messages for all branches of the src repository List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d6678851308d3cec767f07b0712a429cdc5895de Auto-Submitted: auto-generated Date: Mon, 02 Nov 2026 12:38:03 +0000 Message-Id: <6ae8842b.30edf.79b278c9@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=d6678851308d3cec767f07b0712a429cdc5895de commit d6678851308d3cec767f07b0712a429cdc5895de Author: Dag-Erling Smørgrav AuthorDate: 2026-11-02 12:27:53 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-11-02 12:28:39 +0000 libfetch: Apply timeout to SSL handshake When the SSL handshake cannot proceed because the server is slow to respond, poll() with a timeout instead of spinning. MFC after: 1 week PR: 298962 Event: Oslo Hackathon 2026 Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D60975 --- lib/libfetch/common.c | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/lib/libfetch/common.c b/lib/libfetch/common.c index da0ea6f8aaeb..c15b22a41603 100644 --- a/lib/libfetch/common.c +++ b/lib/libfetch/common.c @@ -1219,7 +1219,9 @@ int fetch_ssl(conn_t *conn, const struct url *URL, int verbose) { #ifdef WITH_SSL - int ret, ssl_err; + struct timeval now, timeout, delta; + struct pollfd pfd; + int deltams, ret, ssl_err; X509_NAME *name; char *str; @@ -1251,13 +1253,47 @@ fetch_ssl(conn_t *conn, const struct url *URL, int verbose) return (-1); } #endif + if (fetchTimeout > 0) { + gettimeofday(&timeout, NULL); + timeout.tv_sec += fetchTimeout; + } + deltams = INFTIM; + pfd.fd = conn->sd; while ((ret = SSL_connect(conn->ssl)) == -1) { ssl_err = SSL_get_error(conn->ssl, ret); - if (ssl_err != SSL_ERROR_WANT_READ && - ssl_err != SSL_ERROR_WANT_WRITE) { + switch (ssl_err) { + case SSL_ERROR_WANT_READ: + pfd.events = POLLIN; + break; + case SSL_ERROR_WANT_WRITE: + pfd.events = POLLOUT; + break; + default: ERR_print_errors_fp(stderr); return (-1); } + /* check what's left of our timeout */ + if (fetchTimeout > 0) { + gettimeofday(&now, NULL); + if (!timercmp(&timeout, &now, >)) { + errno = ETIMEDOUT; + fetch_syserr(); + return (-1); + } + timersub(&timeout, &now, &delta); + deltams = delta.tv_sec * 1000 + + delta.tv_usec / 1000; + } + ret = poll(&pfd, 1, deltams); + if (ret == 0) { + fetch_info("SSL handshake timed out"); + return (-1); + } + if (ret < 0) { + if (errno == EINTR && fetchRestartCalls) + continue; + return (-1); + } } conn->ssl_cert = SSL_get_peer_certificate(conn->ssl);