From patchwork Sun Aug 14 11:53:03 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lev Stipakov X-Patchwork-Id: 2679 Return-Path: Delivered-To: patchwork@openvpn.net Delivered-To: patchwork@openvpn.net Received: from director8.mail.ord1d.rsapps.net ([172.28.255.1]) by backend30.mail.ord1d.rsapps.net with LMTP id AMQUE1S8+mK4UgAAIUCqbw (envelope-from ) for ; Mon, 15 Aug 2022 17:36:20 -0400 Received: from proxy6.mail.ord1c.rsapps.net ([172.28.255.1]) by director8.mail.ord1d.rsapps.net with LMTP id gEbgElS8+mKBSwAAfY0hYg (envelope-from ) for ; Mon, 15 Aug 2022 17:36:20 -0400 Received: from smtp22.gate.ord1c ([172.28.255.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) by proxy6.mail.ord1c.rsapps.net with LMTPS id iEGwElS8+mI/JQAA9sKXow (envelope-from ) for ; Mon, 15 Aug 2022 17:36:20 -0400 X-Spam-Threshold: 95 X-Spam-Score: 0 X-Spam-Flag: NO X-Virus-Scanned: OK X-Orig-To: openvpnslackdevel@openvpn.net X-Originating-Ip: [216.105.38.7] Authentication-Results: smtp22.gate.ord1c.rsapps.net; iprev=pass policy.iprev="216.105.38.7"; spf=pass smtp.mailfrom="openvpn-devel-bounces@lists.sourceforge.net" smtp.helo="lists.sourceforge.net"; dkim=fail (signature verification failed) header.d=sourceforge.net; dkim=fail (signature verification failed) header.d=sf.net; dkim=fail (signature verification failed) header.d=gmail.com; dmarc=fail (p=none; dis=none) header.from=gmail.com X-Suspicious-Flag: YES X-Classification-ID: 4cc81b46-1ce2-11ed-94af-a0369f0d84d2-1-1 Received: from [216.105.38.7] ([216.105.38.7:48836] helo=lists.sourceforge.net) by smtp22.gate.ord1c.rsapps.net (envelope-from ) (ecelerity 4.2.38.62370 r(:)) with ESMTPS (cipher=DHE-RSA-AES256-GCM-SHA384) id 1B/37-23938-35CBAF26; Mon, 15 Aug 2022 17:36:20 -0400 Received: from [127.0.0.1] (helo=sfs-ml-1.v29.lw.sourceforge.com) by sfs-ml-1.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1oNhjx-0007Nd-Ok; Mon, 15 Aug 2022 21:35:17 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-1.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1oNhjx-0007NX-Ax for openvpn-devel@lists.sourceforge.net; Mon, 15 Aug 2022 21:35:17 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Sender:Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding: 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=EKIk4gQCCap8QUHUdCCTq5M7iJg7f0lFl8rVairnRl8=; b=jTPSpc0Qo4OaPJd8MPfrlv9Qsx ew2QgkUQfuKz2lB70c2pXKpIRepZVIfhv6xCzm7taPzRUxU1arzd+E08d7aPiRHYZg97CPSkqQmDe TkeydqoC5IRT6erB+gG8Zg9cwt55I4oWWq0KJyUNT36bAjBKM6BYS6zSEYgXkILtUYfE=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To :MIME-Version:Content-Type:Content-Transfer-Encoding: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=EKIk4gQCCap8QUHUdCCTq5M7iJg7f0lFl8rVairnRl8=; b=HPNKzTuQdUdfScAhd3vAoO/8XO KKMLPf+I7fk4rBd79MKwGT8zcTyP+q+SpsBrgWM+JmKK9MAL+9RcjqwdK/3L8uh3wyJ6j180gu55g mNlPiQO7KrnyG51sSg1oSzg7YhLqAJYJzRkg3H7VKAWHk5NRakpI9FC9Z4qhMTjagbO8=; Received: from mail-lj1-f176.google.com ([209.85.208.176]) by sfi-mx-1.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.95) id 1oNhjs-003ayW-Qt for openvpn-devel@lists.sourceforge.net; Mon, 15 Aug 2022 21:35:13 +0000 Received: by mail-lj1-f176.google.com with SMTP id s9so8844233ljs.6 for ; Mon, 15 Aug 2022 14:35:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc; bh=EKIk4gQCCap8QUHUdCCTq5M7iJg7f0lFl8rVairnRl8=; b=H/n+ri+Dyt3nW8vABCkNPtf4yZMYLBswNTyBW6/o7tYvZ0tF4Fe1LE47LRuNzHF99t V7fD4QVIl943SjV37UNy3USarTU9iTPE2YML7XkZ5u9Q3RiLLyFcaiYV39CV5W2JhnY7 /EOE/l6/ccW9VuvnfCDvuruUlJXWvKyiSxmMsgI+wXxuaNoXEenLmsIIDWCC0OTHGmJX QKbwcvp11NdFHvuZTRwFm31S5meA7O6uHsVQCmciEQFGEm3/0RF4MJnTgVWQy24yzR/3 rewGhytqWvGWCLLbuk0pzh3z+H5ao3Ny6ihJRG7oqSQmtxMlEsdmOt8DvKCb4N4IR4dc RJjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc; bh=EKIk4gQCCap8QUHUdCCTq5M7iJg7f0lFl8rVairnRl8=; b=zwPBHngn1UAXw6uYi8RKYEqEKmSdexPdoPmy3Pajqf/GoUjhCd390zoGtGmglnvvGZ 29x3FAUa6c/Ba2AbG2CskoegxOipPzAv1J61br9Qv5wnPJsV0syDGFNJwPPkWSRVJvC9 XtxnZprubz+aYcMNKGNOwPZ5w8Evr46/uz+2HaXuH6zceOvqnyoZXu7H79zh1+66qHwN 9mqOIq6F8ozG975KiKnhhG9sCNtjUM0bAWOPtDIFnwWseymHTr4ACgxY9Xa8AXb8qB1i /Q3U91YgcBjFvDEn+xSHmg0UE++s9yN5Gu6qsemRIYyLU0Ppr1xZ+Jor9X0WV4U0mWfc lwTg== X-Gm-Message-State: ACgBeo10Nh9BRQAB0Wzy38wrvD1bHGp9K1PlPsq8Cag007XObUhJV8VN u+sQyYiTS6Hzv7yMqwncz39IDl+pmFBqfA== X-Google-Smtp-Source: AA6agR6cncJ4lptu6T9Ihzeq07c2XLkwFHf6L6ok7crpeV0dKPtZFfrwNcRY0Yy6dbP5XviVp//ZOg== X-Received: by 2002:a05:651c:c98:b0:25e:6894:650 with SMTP id bz24-20020a05651c0c9800b0025e68940650mr5610349ljb.487.1660599303400; Mon, 15 Aug 2022 14:35:03 -0700 (PDT) Received: from LAPTOP-4L3N7KFS.localdomain (148122135023.sia.telenor.net. [148.122.135.23]) by smtp.gmail.com with ESMTPSA id 25-20020ac25f59000000b0048b05882c28sm1196913lfz.271.2022.08.15.14.35.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Aug 2022 14:35:02 -0700 (PDT) From: Lev Stipakov To: openvpn-devel@lists.sourceforge.net Date: Sun, 14 Aug 2022 23:53:03 +0200 Message-Id: <20220814215303.305-1-lstipakov@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220811084330.187-1-lstipakov@gmail.com> References: <20220811084330.187-1-lstipakov@gmail.com> X-Spam-Report: Spam detection software, running on the system "util-spamd-1.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: Lev Stipakov Device interface is a path which is used by userspace to access device. A driver can create one or more device interfaces and specify "reference string", so that userspace could enumerate all device i [...] Content analysis details: (0.6 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.208.176 listed in list.dnswl.org] 0.8 DATE_IN_PAST_12_24 Date: is 12 to 24 hours before Received: date 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [lstipakov[at]gmail.com] -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [209.85.208.176 listed in wl.mailspike.net] -0.0 SPF_PASS SPF: sender matches SPF record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain X-Headers-End: 1oNhjs-003ayW-Qt Subject: [Openvpn-devel] [PATCH] tun: properly handle device interface list 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: , Cc: Lev Stipakov MIME-Version: 1.0 Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox From: Lev Stipakov Device interface is a path which is used by userspace to access device. A driver can create one or more device interfaces and specify "reference string", so that userspace could enumerate all device interfaces in the list and pick the corrct one which ends with reference string. Before our code had an assumption that either driver creates only one device interface or the "right" interface is alwways first in the list. As it turned out, that assumtion does not always hold, so here we iterate through all device interfaces in the list. In follow-up dco-win patch we pick the device interface from the list which ends with specific reference string. Signed-off-by: Lev Stipakov Acked-by: Antonio Quartulli --- v3: use gc_malloc() and "char *" instead of buffer and improve commit message v2: uncrustify src/openvpn/tun.c | 40 +++++++++++++++++++++++----------------- src/openvpn/tun.h | 2 +- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c index 11025267..50193939 100644 --- a/src/openvpn/tun.c +++ b/src/openvpn/tun.c @@ -3722,7 +3722,6 @@ get_device_instance_id_interface(struct gc_arena *gc) LONG status; ULONG dev_interface_list_size; CONFIGRET cr; - struct buffer dev_interface_list; ZeroMemory(&device_info_data, sizeof(SP_DEVINFO_DATA)); device_info_data.cbSize = sizeof(SP_DEVINFO_DATA); @@ -3775,9 +3774,9 @@ get_device_instance_id_interface(struct gc_arena *gc) goto next; } - dev_interface_list = alloc_buf_gc(dev_interface_list_size, gc); + char *dev_interface_list = gc_malloc(dev_interface_list_size, false, gc); cr = CM_Get_Device_Interface_List((LPGUID)&GUID_DEVINTERFACE_NET, device_instance_id, - BSTR(&dev_interface_list), + dev_interface_list, dev_interface_list_size, CM_GET_DEVICE_INTERFACE_LIST_PRESENT); if (cr != CR_SUCCESS) @@ -3785,21 +3784,29 @@ get_device_instance_id_interface(struct gc_arena *gc) goto next; } - struct device_instance_id_interface *dev_if; - ALLOC_OBJ_CLEAR_GC(dev_if, struct device_instance_id_interface, gc); - dev_if->net_cfg_instance_id = (unsigned char *)string_alloc((char *)net_cfg_instance_id, gc); - dev_if->device_interface_list = string_alloc(BSTR(&dev_interface_list), gc); + char *dev_if = dev_interface_list; - /* link into return list */ - if (!first) + /* device interface list ends with empty string */ + while (strlen(dev_if) > 0) { - first = dev_if; - } - if (last) - { - last->next = dev_if; + struct device_instance_id_interface *dev_iif; + ALLOC_OBJ_CLEAR_GC(dev_iif, struct device_instance_id_interface, gc); + dev_iif->net_cfg_instance_id = (unsigned char *)string_alloc((char *)net_cfg_instance_id, gc); + dev_iif->device_interface = string_alloc(dev_if, gc); + + /* link into return list */ + if (!first) + { + first = dev_iif; + } + if (last) + { + last->next = dev_iif; + } + last = dev_iif; + + dev_if += strlen(dev_if) + 1; } - last = dev_if; next: RegCloseKey(dev_key); @@ -6475,12 +6482,11 @@ tun_try_open_device(struct tuntap *tt, const char *device_guid, const struct dev { const struct device_instance_id_interface *dev_if; - /* Open Wintun adapter */ for (dev_if = device_instance_id_interface; dev_if != NULL; dev_if = dev_if->next) { if (strcmp((const char *)dev_if->net_cfg_instance_id, device_guid) == 0) { - path = dev_if->device_interface_list; + path = dev_if->device_interface; break; } } diff --git a/src/openvpn/tun.h b/src/openvpn/tun.h index ea4946e9..661e4d01 100644 --- a/src/openvpn/tun.h +++ b/src/openvpn/tun.h @@ -388,7 +388,7 @@ struct panel_reg struct device_instance_id_interface { LPBYTE net_cfg_instance_id; - const char *device_interface_list; + const char *device_interface; struct device_instance_id_interface *next; };