From patchwork Tue Nov 9 15:19:27 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tim Gardner X-Patchwork-Id: 1553029 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=canonical.com header.i=@canonical.com header.a=rsa-sha256 header.s=20210705 header.b=vok3tqft; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4HpWqs4bCBz9sCD for ; Wed, 10 Nov 2021 02:19:53 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1mkSuW-0006vx-IN; Tue, 09 Nov 2021 15:19:44 +0000 Received: from smtp-relay-internal-0.internal ([10.131.114.225] helo=smtp-relay-internal-0.canonical.com) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1mkSuT-0006v3-TX for kernel-team@lists.ubuntu.com; Tue, 09 Nov 2021 15:19:41 +0000 Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-0.canonical.com (Postfix) with ESMTPS id 36A603F1B9 for ; Tue, 9 Nov 2021 15:19:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1636471181; bh=iDjK5zWc5hje2sQfn5SQxm2wGHNDmvsskH7jrWx7kl8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=vok3tqft2KVznopey8ZQf2wLYQBgRNT/NktZh4ByCB0533aUPt5HUxCKhN1bZ59ly wlu8JvSHC0X5Lv1zGZCTQaYwCLe9EKx+VQsNOe+gAoTFH2icIwBPrJZF1CInKyudy5 pZf90Qy/D6eEdK5VSpbWUigqfmQZhUw7Es/Y+VKUvrq4KD+gi0UXl6pMfLa9AjP/dY 7SbQ/6l2Ofe4i/KaM5rJOQ3T9mHmdad/8JDigSyVVVCPhUmazoh0YpyponhbkrG4o3 qWOwHal1xIc74qGZt5nFeOyhJxyUY4nOS3r+sINKf5Y+QaQRJtE8fgUmJP2Q/TJPav 2+r4Ppcw7Dccg== Received: by mail-pg1-f198.google.com with SMTP id o1-20020a635d41000000b002bd97c0a03dso12606364pgm.4 for ; Tue, 09 Nov 2021 07:19:41 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=iDjK5zWc5hje2sQfn5SQxm2wGHNDmvsskH7jrWx7kl8=; b=RzE8+oHYKAbK9sVRVrRRbVhKZKWRuoq88OUnsB/Ubm8tRTfws+98oXQWLg5HgkhB43 aKMgT4fnqPM8Z0XNgXBQJSztCkzlptEcrKNSaYxi55YW2msCSk4dso3Gm0EeQ2DZQBfL 1c/RurO5BKzDrpjp3lnGwpBlQepXU+He5JnnQMAG8Sk77+p5xQR/Sbbu6sfzv2oOSuZJ nY086naP0mfcmLCTgykNjnAn6liNqChZ6Ym23DDYIyGA9vt9rOiXRVWO8530D9IatZUL h9Ifs+zbKy6C5dsPA0JCy6/mQeIeE55jZpkpVa1U/gH73WAowMN79XRafoj3bCA5phqa 2mUg== X-Gm-Message-State: AOAM531MaUJTtYITmu+GBDFabdCg0oRxMzyQHJvldZ6azt+v4cRy1J72 L5+wzOFN8yhBI1+ROHaHdQmO+fOkC5e9Fih/weNFbxLe9+k1H6nX1r6VaFqACsf4VhvWS0IE2yr DvRSUeVyo3JtkbK/WiHB7CfQ4PD08A/BqiguAlrP9Lg== X-Received: by 2002:a17:90b:4f85:: with SMTP id qe5mr7962092pjb.167.1636471178810; Tue, 09 Nov 2021 07:19:38 -0800 (PST) X-Google-Smtp-Source: ABdhPJx4Y3wXqchzjvsgneDIbSTEoPuY4sW8Fd/1wYecjtxEtu0q3JqQAOp98R5j1pPqWi+XELInEg== X-Received: by 2002:a17:90b:4f85:: with SMTP id qe5mr7962046pjb.167.1636471178445; Tue, 09 Nov 2021 07:19:38 -0800 (PST) Received: from localhost.localdomain ([69.163.84.166]) by smtp.gmail.com with ESMTPSA id z30sm9446679pfg.30.2021.11.09.07.19.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Nov 2021 07:19:38 -0800 (PST) From: Tim Gardner To: kernel-team@lists.ubuntu.com Subject: [PATCH 1/2] cifs: To match file servers, make sure the server hostname matches Date: Tue, 9 Nov 2021 08:19:27 -0700 Message-Id: <20211109151928.31268-2-tim.gardner@canonical.com> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211109151928.31268-1-tim.gardner@canonical.com> References: <20211109151928.31268-1-tim.gardner@canonical.com> MIME-Version: 1.0 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Shyam Prasad N BugLink: https://bugs.launchpad.net/bugs/1950336 We generally rely on a bunch of factors to differentiate between servers. For example, IP address, port etc. For certain server types (like Azure), it is important to make sure that the server hostname matches too, even if the both hostnames currently resolve to the same IP address. Signed-off-by: Shyam Prasad N Cc: stable@vger.kernel.org Signed-off-by: Steve French (cherry picked from commit 7be3248f313930ff3d3436d4e9ddbe9fccc1f541) Signed-off-by: Tim Gardner --- fs/cifs/connect.c | 19 +++++++++++-------- fs/cifs/fs_context.c | 8 ++++++++ fs/cifs/fs_context.h | 1 + 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 3912040b89ad..3635724c13dd 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -794,7 +794,6 @@ static void clean_demultiplex_info(struct TCP_Server_Info *server) */ } - kfree(server->hostname); kfree(server); length = atomic_dec_return(&tcpSesAllocCount); @@ -1235,6 +1234,9 @@ static int match_server(struct TCP_Server_Info *server, struct smb3_fs_context * if (!net_eq(cifs_net_ns(server), current->nsproxy->net_ns)) return 0; + if (strcasecmp(server->hostname, ctx->server_hostname)) + return 0; + if (!match_address(server, addr, (struct sockaddr *)&ctx->srcaddr)) return 0; @@ -1336,6 +1338,7 @@ cifs_put_tcp_session(struct TCP_Server_Info *server, int from_reconnect) kfree(server->session_key.response); server->session_key.response = NULL; server->session_key.len = 0; + kfree(server->hostname); task = xchg(&server->tsk, NULL); if (task) @@ -1361,14 +1364,15 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx) goto out_err; } + tcp_ses->hostname = kstrdup(ctx->server_hostname, GFP_KERNEL); + if (!tcp_ses->hostname) { + rc = -ENOMEM; + goto out_err; + } + tcp_ses->ops = ctx->ops; tcp_ses->vals = ctx->vals; cifs_set_net_ns(tcp_ses, get_net(current->nsproxy->net_ns)); - tcp_ses->hostname = extract_hostname(ctx->UNC); - if (IS_ERR(tcp_ses->hostname)) { - rc = PTR_ERR(tcp_ses->hostname); - goto out_err_crypto_release; - } tcp_ses->conn_id = atomic_inc_return(&tcpSesNextId); tcp_ses->noblockcnt = ctx->rootfs; @@ -1497,8 +1501,7 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx) out_err: if (tcp_ses) { - if (!IS_ERR(tcp_ses->hostname)) - kfree(tcp_ses->hostname); + kfree(tcp_ses->hostname); if (tcp_ses->ssocket) sock_release(tcp_ses->ssocket); kfree(tcp_ses); diff --git a/fs/cifs/fs_context.c b/fs/cifs/fs_context.c index 727c8835b222..05aa0a238e99 100644 --- a/fs/cifs/fs_context.c +++ b/fs/cifs/fs_context.c @@ -332,6 +332,7 @@ smb3_fs_context_dup(struct smb3_fs_context *new_ctx, struct smb3_fs_context *ctx DUP_CTX_STR(mount_options); DUP_CTX_STR(username); DUP_CTX_STR(password); + DUP_CTX_STR(server_hostname); DUP_CTX_STR(UNC); DUP_CTX_STR(source); DUP_CTX_STR(domainname); @@ -470,6 +471,11 @@ smb3_parse_devname(const char *devname, struct smb3_fs_context *ctx) if (!pos) return -EINVAL; + /* record the server hostname */ + ctx->server_hostname = kstrndup(devname + 2, pos - devname - 2, GFP_KERNEL); + if (!ctx->server_hostname) + return -ENOMEM; + /* skip past delimiter */ ++pos; @@ -1510,6 +1516,8 @@ smb3_cleanup_fs_context_contents(struct smb3_fs_context *ctx) ctx->username = NULL; kfree_sensitive(ctx->password); ctx->password = NULL; + kfree(ctx->server_hostname); + ctx->server_hostname = NULL; kfree(ctx->UNC); ctx->UNC = NULL; kfree(ctx->source); diff --git a/fs/cifs/fs_context.h b/fs/cifs/fs_context.h index b6243972edf3..ac4b631d8ce3 100644 --- a/fs/cifs/fs_context.h +++ b/fs/cifs/fs_context.h @@ -169,6 +169,7 @@ struct smb3_fs_context { char *password; char *domainname; char *source; + char *server_hostname; char *UNC; char *nodename; char *iocharset; /* local code page for mapping to and from Unicode */ From patchwork Tue Nov 9 15:19:28 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tim Gardner X-Patchwork-Id: 1553030 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=canonical.com header.i=@canonical.com header.a=rsa-sha256 header.s=20210705 header.b=I7u5yNr7; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4HpWqt07Fcz9sRR for ; Wed, 10 Nov 2021 02:19:54 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1mkSuX-0006x5-VL; Tue, 09 Nov 2021 15:19:45 +0000 Received: from smtp-relay-internal-0.internal ([10.131.114.225] helo=smtp-relay-internal-0.canonical.com) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1mkSuU-0006vB-Hk for kernel-team@lists.ubuntu.com; Tue, 09 Nov 2021 15:19:42 +0000 Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-0.canonical.com (Postfix) with ESMTPS id 3893F3F1BF for ; Tue, 9 Nov 2021 15:19:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1636471182; bh=fb/GsSHrHlbIMfl1zW109TxX5uNwWq7P1hSlsQ2ZOxU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=I7u5yNr7C+ooeIdzUBoyk7CdAb3uYEKxQAyqo7HIBXP8aWg+8SRQw4PeMmYMI96FT pC9Xu4/yWzsQFHU4brf/JXwys08bvLD8tLln2ugRZccrbC1UUb/Q5S5/yzGGW2wQ/1 vGvN0+tSCX5N6de+17lyOVBZTcs7i78bEVqAj6hnT/pOUrgPNVS4nc5ZMxfIihP6jT N2sbNMR/vr6VkLdwFPUelGrz+HDHCJtWOWcof+S6niYcey70jkRYYXbdFyVEWZOqvr SStr+zRpLfRU9nZXwKx8g5WawXvZkBEWFzEUMT1II8oDRbisBjQtPSLDXEA15aOaQT kTJaBISJphfJQ== Received: by mail-pl1-f199.google.com with SMTP id k9-20020a170902ba8900b00141f601d5c8so9069750pls.1 for ; Tue, 09 Nov 2021 07:19:42 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fb/GsSHrHlbIMfl1zW109TxX5uNwWq7P1hSlsQ2ZOxU=; b=fl0ANftdF6a0u7hXkLRrbAIBMNChYYgx4tuYbPvAbk9GQSCRpYya6hD7xBjOSDHC4v mD1Ts7wLt5ijDAhz4p0lM4bTQDGxDYojfWFmFKX/APSerM7wWhM5Dxd7oTTr9TTkSFdf GBwfk1zKx6jHvHqDBl0b/qsq7UcDDJMkVQ12BAnR+O7p+Zb/mZY81exOEblVxunlt+lH oqj2VtHLyYtKbl122rJaN5DO4sDO8j2Ncl1L/cKKcMmbnKbW/QtW5wkuiYK9A4ckU74e b1RI+FFdS34oXz4Q/HZQMSM8N/7vYjUBuo5PqHX79fyS1RbIMKLkCeF85xUVAkHB2tFF bsPQ== X-Gm-Message-State: AOAM530Z6VHydgwjE9BJATKNdfXxuR7/TaTFsslkvXEM3FRwL+Maimkr iYceR5Oyt7jOGYkzmnNDQVdqeDxHgDWXyaY9ubww8j/MpQrW9pFs0q4qOa2hcUQrskJ95Cy80R3 LdorXY+xzn7c/Uq+rt+vL+uMl451heS0asAAjKXMzKQ== X-Received: by 2002:a17:903:120e:b0:138:d732:3b01 with SMTP id l14-20020a170903120e00b00138d7323b01mr7558504plh.21.1636471180164; Tue, 09 Nov 2021 07:19:40 -0800 (PST) X-Google-Smtp-Source: ABdhPJyG2o04fSCvpRfsHnNst9rPZX9HjS40bLK25MhLBtCvvo2AbMSrTvFF00/vYGi5XCFtlxDEOg== X-Received: by 2002:a17:903:120e:b0:138:d732:3b01 with SMTP id l14-20020a170903120e00b00138d7323b01mr7558469plh.21.1636471179882; Tue, 09 Nov 2021 07:19:39 -0800 (PST) Received: from localhost.localdomain ([69.163.84.166]) by smtp.gmail.com with ESMTPSA id z30sm9446679pfg.30.2021.11.09.07.19.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Nov 2021 07:19:38 -0800 (PST) From: Tim Gardner To: kernel-team@lists.ubuntu.com Subject: [PATCH 2/2] cifs: add mount parameter tcpnodelay Date: Tue, 9 Nov 2021 08:19:28 -0700 Message-Id: <20211109151928.31268-3-tim.gardner@canonical.com> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211109151928.31268-1-tim.gardner@canonical.com> References: <20211109151928.31268-1-tim.gardner@canonical.com> MIME-Version: 1.0 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Steve French BugLink: https://bugs.launchpad.net/bugs/1950336 Although corking and uncorking the socket (which cifs.ko already does) should usually have the desired benefit, using the new tcpnodelay mount option causes tcp_sock_set_nodelay() to be set on the socket which may be useful in order to ensure that we don't ever have cases where the network stack is waiting on sending an SMB request until multiple SMB requests have been added to the send queue (since this could lead to long latencies). To enable it simply append "tcpnodelay" it to the mount options Reviewed-by: Paulo Alcantara (SUSE) Signed-off-by: Steve French (cherry picked from commit 7ae5e588b0a53a72819e661106cbe99dde83b41d) Signed-off-by: Tim Gardner --- fs/cifs/fs_context.c | 8 ++++++++ fs/cifs/fs_context.h | 1 + 2 files changed, 9 insertions(+) diff --git a/fs/cifs/fs_context.c b/fs/cifs/fs_context.c index 05aa0a238e99..e0a1f7dd7b5d 100644 --- a/fs/cifs/fs_context.c +++ b/fs/cifs/fs_context.c @@ -119,6 +119,7 @@ const struct fs_parameter_spec smb3_fs_parameters[] = { fsparam_flag("nosharesock", Opt_nosharesock), fsparam_flag_no("persistenthandles", Opt_persistent), fsparam_flag_no("resilienthandles", Opt_resilient), + fsparam_flag_no("tcpnodelay", Opt_tcp_nodelay), fsparam_flag("domainauto", Opt_domainauto), fsparam_flag("rdma", Opt_rdma), fsparam_flag("modesid", Opt_modesid), @@ -1403,6 +1404,13 @@ static int smb3_fs_context_parse_param(struct fs_context *fc, } } break; + case Opt_tcp_nodelay: + /* tcp nodelay should not usually be needed since we CORK/UNCORK the socket */ + if (result.negated) + ctx->sockopt_tcp_nodelay = false; + else + ctx->sockopt_tcp_nodelay = true; + break; case Opt_domainauto: ctx->domainauto = true; break; diff --git a/fs/cifs/fs_context.h b/fs/cifs/fs_context.h index ac4b631d8ce3..f6f2cf0f5b45 100644 --- a/fs/cifs/fs_context.h +++ b/fs/cifs/fs_context.h @@ -101,6 +101,7 @@ enum cifs_param { Opt_nosharesock, Opt_persistent, Opt_resilient, + Opt_tcp_nodelay, Opt_domainauto, Opt_rdma, Opt_modesid,