From patchwork Mon Jan 2 19:41:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Selva Nair X-Patchwork-Id: 2968 Return-Path: Delivered-To: patchwork@openvpn.net Received: by 2002:a05:7300:c95:b0:82:e4b3:40a0 with SMTP id p21csp6539493dyk; Mon, 2 Jan 2023 11:43:28 -0800 (PST) X-Google-Smtp-Source: AMrXdXs4B41tzAIhBuI9ffSQQo8vZfsY+6u6Z8LRsn8o77NK/j4Er9YV621F0xsdscSFbRUzaaNt X-Received: by 2002:a17:903:54d:b0:189:81a2:d616 with SMTP id jo13-20020a170903054d00b0018981a2d616mr42150324plb.16.1672688607983; Mon, 02 Jan 2023 11:43:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1672688607; cv=none; d=google.com; s=arc-20160816; b=tErFSTxqV1quIpa1MHEPfQYwMYY13mCyyhLogRAxLv2Vk6MZfsSxWOu6lTDQvcI9gY XpUIHKFFL9GBi2XJdIFI+x51wsE/Jnf+WNAcxzIk2eswGF7Ynz/rOt4lIoKv//tsI+7c OF6K0MA5yGmTtqm48TFEAi+ujF1wuSNEwUOKtHq5/+okYNkXekuq1qsFS1uoGyM8LYtI RZDKR08HgohyjNhn0IvdAxrfbwm9HCKhUBtQY5ym6PrajT+L41KgEcvzpvillmhA/96F F+Lzei5NY0jEu//CjE2IoeAA6eo9CmvZsIQywPBD6RrtV0l3MoWOAJ2XlStXP1TAOzBM htYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:content-transfer-encoding:list-subscribe:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence:subject :mime-version:references:in-reply-to:message-id:date:to:from :dkim-signature:dkim-signature:dkim-signature; bh=TQ/S2bkE2DYTS9ikCPobDxtjtJ3dwTDSy4LUdgZqgyg=; b=bYs+TQCKhqA+0dSfPj+MOBXb4mFYdMGd1HwiD4khz34F4DmzEiP49gme/UHpAXh73E vavUGbEABf9+XqDW2EOVe8s6n7J3q/BKCwsTyo3vfJYlX2u2gpSRoBDg34WcFdx+RkM9 Kv5nz7YoZl+cFRjyGkW3vVc0mrP63kxK3QAjreEe5fvyhVPrV/gEyvIAEsbLbJha4e9W w4x0XnB2Ol+i612c/NZPw99RhU6c3O4L1tgiraukez7AbO4kONOxoHDSI8jbx0haUDW1 pGAzbQnvbqN6vJI5orHHxh9Nl86eCc3pwlOkTRImhEQk30LYICLS9hXjOXdd9KRg8zqj NGHw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=WeyEdMMv; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=lYUocvaK; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=ZSF3rmS0; spf=pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) smtp.mailfrom=openvpn-devel-bounces@lists.sourceforge.net; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from lists.sourceforge.net (lists.sourceforge.net. [216.105.38.7]) by mx.google.com with ESMTPS id 5-20020a170902e9c500b00192b19d0910si8944607plk.432.2023.01.02.11.43.27 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Jan 2023 11:43:27 -0800 (PST) Received-SPF: pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) client-ip=216.105.38.7; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=WeyEdMMv; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=lYUocvaK; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=ZSF3rmS0; spf=pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) smtp.mailfrom=openvpn-devel-bounces@lists.sourceforge.net; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.0.1] (helo=sfs-ml-2.v29.lw.sourceforge.com) by sfs-ml-2.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1pCQhW-00020P-Gr; Mon, 02 Jan 2023 19:42:26 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-2.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1pCQhM-00020E-JF for openvpn-devel@lists.sourceforge.net; Mon, 02 Jan 2023 19:42:16 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=KDZb1WRjp7xDvpwsTnzllQhLI1vltBMG3NOoY0BToUU=; b=WeyEdMMvNF17AJUNiUZxlHM6nj qA6yBgZ4JKWHi7MJqKCKNPBpPTAp6mrPnGGq6J87KRondwu4sLPB2fx4VlVilpf8J8WECVRq/K2LL RWZCIATaUi5zu9v4FfExPaxxUPzP/ZnlRPcPP4q0qS4jZgui++2AciA76+JnDumCHn8o=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-Id: Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=KDZb1WRjp7xDvpwsTnzllQhLI1vltBMG3NOoY0BToUU=; b=lYUocvaKPK91u64OHUpMMR0MOJ Ymx7MXli6ZM0swpgS2oJPUwssjcorv13Fx3yDRz/16okamO3qq4GN+Y7Y90kFpfXbjjlqvh2/pai/ 2rfkbWFq1JQb3vAF5Z+nK0PsbJF4bW0CHcU2d+QNB28vLLa5zJz5rYk3wS0Awv5KOY7s=; Received: from mail-il1-f181.google.com ([209.85.166.181]) by sfi-mx-1.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.95) id 1pCQhF-002WA1-MO for openvpn-devel@lists.sourceforge.net; Mon, 02 Jan 2023 19:42:13 +0000 Received: by mail-il1-f181.google.com with SMTP id d10so16993411ilc.12 for ; Mon, 02 Jan 2023 11:42:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KDZb1WRjp7xDvpwsTnzllQhLI1vltBMG3NOoY0BToUU=; b=ZSF3rmS0DruLHv3ApXT8vsmeIMiY2m+Gw02QMVjUTrUBp8cVVOY7xCvA2mkTqhEJIy 05E4doNVJXAVYzscnGnHWIUNq2wDDqt1Ibd1YRtVVW8E+oyeasxQtm1MBqnQrrUPrbTs FN/4K0lJjuJ8jcUB++5gZe5SxMjsMb4anO61aI991l/0vaeD9m1SVGNxBVKEWHgZaUtn TRwgwM15Ym21gtw4SJUr/mIWVa+rXolUKRSxVgbrBRHsGYZ9BUjfeqRu6eccEO4vruFv qE4vqEQSMfAqZN7FSuKUWu/rdxAfITE92NWzjVUExjqwQzvjEF4VMAQxXq5Y00EsgTuj RNEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KDZb1WRjp7xDvpwsTnzllQhLI1vltBMG3NOoY0BToUU=; b=7kibSZUIBC4ICWfCuo2ZR2xuaBJdr1mL9aoctHJBg4kPK+82vtI/D6lM+OkVDS5FMJ L6+jvMCSYClf4PWxCIAKk9IN8Zs3NqnvpliyrAVYdTiDqVBxp0jZTA8UuCkrJfViN1Wc ciRxzG/0zqetwxUgdSD88oLbPQdC1bCU+d8o4jGE0nlKvtVP7+/FpiFfvmTGiLBHXfhN jL7gfSGaQzEUHheAUtZBHQ4NYiibOubmF9wHawRMj3VHSLZVTfpjU2somAmkSiflpAnE RGWcLUX7Puzt7SAoh92U0xVQ9LD0A6hljAS+oDk7TdkKA+hmADOCHOzSrfj8vn5UK/UG ivgQ== X-Gm-Message-State: AFqh2kpdZG07LzdWjHpYD+fbw7u1uuCT2m5J14ifqfU+bfeJpcn3I+nZ K2+LzzAJiO0pk4LQn3tfn8TdOVwSyAMcZg== X-Received: by 2002:a05:6e02:13e1:b0:30c:276b:af80 with SMTP id w1-20020a056e0213e100b0030c276baf80mr2235469ilj.0.1672688523587; Mon, 02 Jan 2023 11:42:03 -0800 (PST) Received: from uranus.sansel.ca (bras-vprn-tnhlon4053w-lp130-01-70-51-222-66.dsl.bell.ca. [70.51.222.66]) by smtp.gmail.com with ESMTPSA id z65-20020a0293c7000000b00374fe4f0bc3sm9269943jah.158.2023.01.02.11.42.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Jan 2023 11:42:03 -0800 (PST) From: selva.nair@gmail.com To: openvpn-devel@lists.sourceforge.net Date: Mon, 2 Jan 2023 14:41:56 -0500 Message-Id: <20230102194156.1560195-1-selva.nair@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230101215109.1521549-5-selva.nair@gmail.com> References: <20230101215109.1521549-5-selva.nair@gmail.com> MIME-Version: 1.0 X-Spam-Score: -0.2 (/) X-Spam-Report: Spam detection software, running on the system "util-spamd-2.v13.lw.sourceforge.com", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: From: Selva Nair - In win32_signal_get() re-order the check so that Windows signals are picked up even if signal_received is non-zero - When management is not active, management_sleep() becomes sleep() but it is not interruptible by signals on Windows. Fix this by periodically checking for signal. Content analysis details: (-0.2 points, 6.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.166.181 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [selva.nair[at]gmail.com] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [209.85.166.181 listed in wl.mailspike.net] 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain X-Headers-End: 1pCQhF-002WA1-MO Subject: [Openvpn-devel] [PATCH v2 4/5] Fix signal handling on Windows X-BeenThere: openvpn-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox X-GMAIL-THRID: =?utf-8?q?1753858675529086307?= X-GMAIL-MSGID: =?utf-8?q?1753941129710975250?= From: Selva Nair - In win32_signal_get() re-order the check so that Windows signals are picked up even if signal_received is non-zero - When management is not active, management_sleep() becomes sleep() but it is not interruptible by signals on Windows. Fix this by periodically checking for signal. Fixes Trac #311 #639 (windows specific part) Github: Fixes OpenVPN/openvpn#205 (windows specific part) Note: if stuck in address resolution, press ctrl-C and wait for getaddrinfo() to timeout. v2: WIN32 --> _WIN32 add a chunk in management_sleep that was missed by sloppy conflict-resolution Signed-off-by: Selva Nair --- src/openvpn/manage.c | 16 +++++++- src/openvpn/win32.c | 98 +++++++++++++++++++++++++++++--------------- src/openvpn/win32.h | 3 ++ 3 files changed, 81 insertions(+), 36 deletions(-) diff --git a/src/openvpn/manage.c b/src/openvpn/manage.c index 5465b7e9..9bd5ef4e 100644 --- a/src/openvpn/manage.c +++ b/src/openvpn/manage.c @@ -4045,9 +4045,16 @@ management_sleep(const int n) { management_event_loop_n_seconds(management, n); } - else if (n > 0) + else { - sleep(n); +#ifdef _WIN32 + win32_sleep(n); +#else + if (n > 0) + { + sleep(n); + } +#endif } } @@ -4088,13 +4095,18 @@ man_persist_client_stats(struct management *man, struct context *c) #else /* ifdef ENABLE_MANAGEMENT */ +#include "win32.h" void management_sleep(const int n) { +#ifdef _WIN32 + win32_sleep(n); +#else if (n > 0) { sleep(n); } +#endif /* ifdef _WIN32 */ } #endif /* ENABLE_MANAGEMENT */ diff --git a/src/openvpn/win32.c b/src/openvpn/win32.c index c3520bca..e16d5461 100644 --- a/src/openvpn/win32.c +++ b/src/openvpn/win32.c @@ -642,50 +642,44 @@ int win32_signal_get(struct win32_signal *ws) { int ret = 0; - if (siginfo_static.signal_received) - { - ret = siginfo_static.signal_received; - } - else + + if (ws->mode == WSO_MODE_SERVICE) { - if (ws->mode == WSO_MODE_SERVICE) + if (win32_service_interrupt(ws)) { - if (win32_service_interrupt(ws)) - { - ret = SIGTERM; - } + ret = SIGTERM; } - else if (ws->mode == WSO_MODE_CONSOLE) + } + else if (ws->mode == WSO_MODE_CONSOLE) + { + switch (win32_keyboard_get(ws)) { - switch (win32_keyboard_get(ws)) - { - case 0x3B: /* F1 -> USR1 */ - ret = SIGUSR1; - break; + case 0x3B: /* F1 -> USR1 */ + ret = SIGUSR1; + break; - case 0x3C: /* F2 -> USR2 */ - ret = SIGUSR2; - break; + case 0x3C: /* F2 -> USR2 */ + ret = SIGUSR2; + break; - case 0x3D: /* F3 -> HUP */ - ret = SIGHUP; - break; + case 0x3D: /* F3 -> HUP */ + ret = SIGHUP; + break; - case 0x3E: /* F4 -> TERM */ - ret = SIGTERM; - break; + case 0x3E: /* F4 -> TERM */ + ret = SIGTERM; + break; - case 0x03: /* CTRL-C -> TERM */ - ret = SIGTERM; - break; - } - } - if (ret) - { - throw_signal(ret); /* this will update signinfo_static.signal received */ + case 0x03: /* CTRL-C -> TERM */ + ret = SIGTERM; + break; } } - return ret; + if (ret) + { + throw_signal(ret); /* this will update signinfo_static.signal received */ + } + return (siginfo_static.signal_received); } void @@ -1603,4 +1597,40 @@ set_openssl_env_vars() } } +void +win32_sleep(const int n) +{ + if (n < 0) + { + return; + } + + /* Sleep() is not interruptible. Use a WAIT_OBJECT to catch signal */ + if (HANDLE_DEFINED(win32_signal.in.read)) + { + time_t expire = 0; + update_time(); + expire = now + n; + while (expire >= now) + { + DWORD status = WaitForSingleObject(win32_signal.in.read, (expire - now)*1000); + if (win32_signal_get(&win32_signal) || status == WAIT_TIMEOUT) + { + return; + } + + update_time(); + + if (status == WAIT_FAILED && expire > now) + { + Sleep((expire-now)*1000); + return; + } + } + } + else + { + Sleep(n*1000); + } +} #endif /* ifdef _WIN32 */ diff --git a/src/openvpn/win32.h b/src/openvpn/win32.h index b1371999..26d5ef8f 100644 --- a/src/openvpn/win32.h +++ b/src/openvpn/win32.h @@ -330,5 +330,8 @@ openvpn_execve(const struct argv *a, const struct env_set *es, const unsigned in bool openvpn_swprintf(wchar_t *const str, const size_t size, const wchar_t *const format, ...); +/* Sleep that can be interrupted by signals and exit event */ +void win32_sleep(const int n); + #endif /* ifndef OPENVPN_WIN32_H */ #endif /* ifdef _WIN32 */