From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DB9F4C282D7 for ; Thu, 31 Jan 2019 00:08:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9540A20823 for ; Thu, 31 Jan 2019 00:08:03 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="d8TJFQ2g" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726087AbfAaAID (ORCPT ); Wed, 30 Jan 2019 19:08:03 -0500 Received: from mail-pf1-f193.google.com ([209.85.210.193]:46405 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725768AbfAaAID (ORCPT ); Wed, 30 Jan 2019 19:08:03 -0500 Received: by mail-pf1-f193.google.com with SMTP id c73so577586pfe.13 for ; Wed, 30 Jan 2019 16:08:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=qWZFofTWk3LSA/HICLAT4NijQYSJ86tMKvkgZvcVt4g=; b=d8TJFQ2g7HTCeihDgbS0/iz/e4pRVJUFV30R8yZQKhnCWDct44U6rqyeG0Mg51TK3+ jwGemmfVeum2WeFMUH1c3ZVhBB7fCETj382cen0GwFjgR9T/y4hrDOCDhA4EQGlLLSuX 94ygBO97pb1dxmVslZdzkPvDWqqgeChtjR01NJEf19POJJKBsHxT/Z4iLRHoT3BCol1l nLi6ic9gIBF0ocIVyp8WwXAIgsPEy7tCrof83lGDgBQKZG1RanAGjXOBFgP6J6UE+0N7 y/VHCWnxsQHJND+1V+ocbxa1BEwi27RvR7cM4GBrStCOSeVd6xJ9CClXTzi4QTQbJYTG 9HyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=qWZFofTWk3LSA/HICLAT4NijQYSJ86tMKvkgZvcVt4g=; b=bE/xHVW0qul1hlUelKi+QY7JO+nR6UJHKMsEI91sFJEzs35PInCl0rTz8DJiX2EDfd 5ZfnXD95uUUZe5pSTpvlvXjybvcX9/fsUYxlSrSTLi/U48poXLDJtlJEF+bBpgleEZWx p99v3zW4056vdc68IDPWKd3WiDcLyB+bXpR6IlY07HiX5jCXzqXRFNdm0unNcCNc2eH0 Q3RWaEx+U53wi5SUrqP2MWyWSeuh9jCPH5KlOHO3gdqKclb/bt7DX3vV+z75y9ECYToy r5TwFcNLuRexOVVq97Qf4t2tgz2+UsKN5cxF020P2xROELL7bc+eHjgKfQr/yCvXbLeG EkNw== X-Gm-Message-State: AJcUukeQZ7pv8KAze+19Hj9rngJO3an7rpKLzQo6HJXOXGi7BxN0oN3N m0ld8DZVNOrtjBGg6ovZ0TF6Mic= X-Google-Smtp-Source: ALg8bN4oC1znUIU5IexbP9Dx4OGfvXcxuVML5l/KIDd21xa8Lhz2Kk/Nxrbb3cIlF2b9P7EfLF/WjQ== X-Received: by 2002:a62:83ce:: with SMTP id h197mr32405313pfe.187.1548893281543; Wed, 30 Jan 2019 16:08:01 -0800 (PST) Received: from ubuntu-vm.corp.microsoft.com ([2001:4898:80e8:f:a17f:4e9f:6b7c:507d]) by smtp.gmail.com with ESMTPSA id 12sm4300004pgt.33.2019.01.30.16.08.00 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 30 Jan 2019 16:08:00 -0800 (PST) From: Pavel Shilovsky X-Google-Original-From: Pavel Shilovsky To: stable@vger.kernel.org Subject: [PATCH] cifs: Always resolve hostname before reconnecting Date: Wed, 30 Jan 2019 16:07:30 -0800 Message-Id: <1548893250-48583-1-git-send-email-pshilov@microsoft.com> X-Mailer: git-send-email 2.7.4 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org Commit 28eb24ff75c5 ("cifs: Always resolve hostname before reconnecting"). In case a hostname resolves to a different IP address (e.g. long running mounts), make sure to resolve it every time prior to calling generic_ip_connect() in reconnect. This patch needs user space changes of cifs.upcall that set a timeout value for the "dns_resolver" key. Suggested-by: Steve French Signed-off-by: Paulo Alcantara Signed-off-by: Steve French Signed-off-by: Pavel Shilovsky --- fs/cifs/connect.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 6f24f12..2229182 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -50,6 +50,7 @@ #include "cifs_unicode.h" #include "cifs_debug.h" #include "cifs_fs_sb.h" +#include "dns_resolve.h" #include "ntlmssp.h" #include "nterr.h" #include "rfc1002pdu.h" @@ -319,6 +320,53 @@ static int cifs_setup_volume_info(struct smb_vol *volume_info, char *mount_data, const char *devname, bool is_smb3); /* + * Resolve hostname and set ip addr in tcp ses. Useful for hostnames that may + * get their ip addresses changed at some point. + * + * This should be called with server->srv_mutex held. + */ +#ifdef CONFIG_CIFS_DFS_UPCALL +static int reconn_set_ipaddr(struct TCP_Server_Info *server) +{ + int rc; + int len; + char *unc, *ipaddr = NULL; + + if (!server->hostname) + return -EINVAL; + + len = strlen(server->hostname) + 3; + + unc = kmalloc(len, GFP_KERNEL); + if (!unc) { + cifs_dbg(FYI, "%s: failed to create UNC path\n", __func__); + return -ENOMEM; + } + snprintf(unc, len, "\\\\%s", server->hostname); + + rc = dns_resolve_server_name_to_ip(unc, &ipaddr); + kfree(unc); + + if (rc < 0) { + cifs_dbg(FYI, "%s: failed to resolve server part of %s to IP: %d\n", + __func__, server->hostname, rc); + return rc; + } + + rc = cifs_convert_address((struct sockaddr *)&server->dstaddr, ipaddr, + strlen(ipaddr)); + kfree(ipaddr); + + return !rc ? -1 : 0; +} +#else +static inline int reconn_set_ipaddr(struct TCP_Server_Info *server) +{ + return 0; +} +#endif + +/* * cifs tcp session reconnection * * mark tcp session as reconnecting so temporarily locked @@ -418,6 +466,11 @@ cifs_reconnect(struct TCP_Server_Info *server) rc = generic_ip_connect(server); if (rc) { cifs_dbg(FYI, "reconnect error %d\n", rc); + rc = reconn_set_ipaddr(server); + if (rc) { + cifs_dbg(FYI, "%s: failed to resolve hostname: %d\n", + __func__, rc); + } mutex_unlock(&server->srv_mutex); msleep(3000); } else { -- 2.7.4