Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp1831509imm; Mon, 3 Sep 2018 10:33:37 -0700 (PDT) X-Google-Smtp-Source: ANB0VdbnPkE4X0uzidGNvy1MVkStZQ4JJ4WX3vHaAL+3e3tUrda813cqjKU3zoIXXlDGdA2vIomB X-Received: by 2002:a62:c082:: with SMTP id g2-v6mr30595645pfk.72.1535996017626; Mon, 03 Sep 2018 10:33:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535996017; cv=none; d=google.com; s=arc-20160816; b=vv9IEExVmXwd1jBrQ57Lg1o7gXDkEe9+67ZQ+FVsOWrzciC8Jj3Hhu6yC9yOuFyuNR +Vy+ps8lJjEIMQ0k5rjKWiQ9/LohFsHEpfpasQS7G3yu1LFCSsHSrwzmvqMEWk50m/cx OhA4eIW7sBmfZkClypn/gXt5pGGBVPj2XBfyTWjr3T3dHT/GjO7qCIhGx1ScAG1KxfoI gri8HWZfiXSmDfxqMH6tPUuIeXwfpw/MRu43ksA+MTlVDFmj8mXKLiJjYvgxet8fW421 aUZYaOgmEHmFZU7TUrX1jUSaXuH0HsuBOY5tet8wa9uaDnfOg0kPHMhPP5MuaUAWHwrk WzvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=miZwuCqEEB3XWNfLJzQyWH7+2TzthbKvOMY2UsioIkI=; b=Z1uNt11GliuBZDiMtssh3Enz0Ty4fqJJ/p0RC338dmxeZ+VKY4ndqgPxw/uBcy2kcl HoKeGZJKU4+YHLRRYgcAUH124AsjvldJCce6m+bbCqozF8Z4Ai/5czEqq2/3hGzLpTOm qL3RU52F6SmqNhMIOsc7RqlRNbqd2wKYWQgPzNbfnviMtKA88gb9AUzeitCsi8Fjzut3 3Wdb3OOqlHIxrrZYGePTO1pxldlbAUzDRxoVCRgt5oQTQrpn9PHcqhFWf8GgpaHJDGAF Y15VrQ63k/aWFz02hrPzOF77xiUUPfaefBhBkeS7D4nE0wkhjKhNuLJwzLtz18p8JAoS ej+A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c17-v6si18924714pgm.15.2018.09.03.10.33.22; Mon, 03 Sep 2018 10:33:37 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730890AbeICVww (ORCPT + 99 others); Mon, 3 Sep 2018 17:52:52 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:47250 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728303AbeICVwv (ORCPT ); Mon, 3 Sep 2018 17:52:51 -0400 Received: from localhost (ip-213-127-74-90.ip.prioritytelecom.net [213.127.74.90]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id DF6CED18; Mon, 3 Sep 2018 17:31:41 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Steve French , Aurelien Aptel Subject: [PATCH 4.18 014/123] smb3: fill in statfs fsid and correct namelen Date: Mon, 3 Sep 2018 18:55:58 +0200 Message-Id: <20180903165720.091480695@linuxfoundation.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180903165719.499675257@linuxfoundation.org> References: <20180903165719.499675257@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.18-stable review patch. If anyone has any objections, please let me know. ------------------ From: Steve French commit 21ba3845b59c733a79ed4fe1c4f3732e7ece9df7 upstream. Fil in the correct namelen (typically 255 not 4096) in the statfs response and also fill in a reasonably unique fsid (in this case taken from the volume id, and the creation time of the volume). In the case of the POSIX statfs all fields are now filled in, and in the case of non-POSIX mounts, all fields are filled in which can be. Signed-off-by: Steve French CC: Stable Reviewed-by: Aurelien Aptel Signed-off-by: Greg Kroah-Hartman --- fs/cifs/cifsfs.c | 18 ++++++++++-------- fs/cifs/smb2ops.c | 2 ++ fs/cifs/smb2pdu.c | 8 ++++++++ fs/cifs/smb2pdu.h | 11 +++++++++++ 4 files changed, 31 insertions(+), 8 deletions(-) --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c @@ -209,14 +209,16 @@ cifs_statfs(struct dentry *dentry, struc xid = get_xid(); - /* - * PATH_MAX may be too long - it would presumably be total path, - * but note that some servers (includinng Samba 3) have a shorter - * maximum path. - * - * Instead could get the real value via SMB_QUERY_FS_ATTRIBUTE_INFO. - */ - buf->f_namelen = PATH_MAX; + if (le32_to_cpu(tcon->fsAttrInfo.MaxPathNameComponentLength) > 0) + buf->f_namelen = + le32_to_cpu(tcon->fsAttrInfo.MaxPathNameComponentLength); + else + buf->f_namelen = PATH_MAX; + + buf->f_fsid.val[0] = tcon->vol_serial_number; + /* are using part of create time for more randomness, see man statfs */ + buf->f_fsid.val[1] = (int)le64_to_cpu(tcon->vol_create_time); + buf->f_files = 0; /* undefined */ buf->f_ffree = 0; /* unlimited */ --- a/fs/cifs/smb2ops.c +++ b/fs/cifs/smb2ops.c @@ -567,6 +567,8 @@ smb3_qfs_tcon(const unsigned int xid, st SMB2_QFS_attr(xid, tcon, fid.persistent_fid, fid.volatile_fid, FS_DEVICE_INFORMATION); SMB2_QFS_attr(xid, tcon, fid.persistent_fid, fid.volatile_fid, + FS_VOLUME_INFORMATION); + SMB2_QFS_attr(xid, tcon, fid.persistent_fid, fid.volatile_fid, FS_SECTOR_SIZE_INFORMATION); /* SMB3 specific */ if (no_cached_open) SMB2_close(xid, tcon, fid.persistent_fid, fid.volatile_fid); --- a/fs/cifs/smb2pdu.c +++ b/fs/cifs/smb2pdu.c @@ -4046,6 +4046,9 @@ SMB2_QFS_attr(const unsigned int xid, st } else if (level == FS_SECTOR_SIZE_INFORMATION) { max_len = sizeof(struct smb3_fs_ss_info); min_len = sizeof(struct smb3_fs_ss_info); + } else if (level == FS_VOLUME_INFORMATION) { + max_len = sizeof(struct smb3_fs_vol_info) + MAX_VOL_LABEL_LEN; + min_len = sizeof(struct smb3_fs_vol_info); } else { cifs_dbg(FYI, "Invalid qfsinfo level %d\n", level); return -EINVAL; @@ -4090,6 +4093,11 @@ SMB2_QFS_attr(const unsigned int xid, st tcon->ss_flags = le32_to_cpu(ss_info->Flags); tcon->perf_sector_size = le32_to_cpu(ss_info->PhysicalBytesPerSectorForPerf); + } else if (level == FS_VOLUME_INFORMATION) { + struct smb3_fs_vol_info *vol_info = (struct smb3_fs_vol_info *) + (offset + (char *)rsp); + tcon->vol_serial_number = vol_info->VolumeSerialNumber; + tcon->vol_create_time = vol_info->VolumeCreationTime; } qfsattr_exit: --- a/fs/cifs/smb2pdu.h +++ b/fs/cifs/smb2pdu.h @@ -1248,6 +1248,17 @@ struct smb3_fs_ss_info { __le32 ByteOffsetForPartitionAlignment; } __packed; +/* volume info struct - see MS-FSCC 2.5.9 */ +#define MAX_VOL_LABEL_LEN 32 +struct smb3_fs_vol_info { + __le64 VolumeCreationTime; + __u32 VolumeSerialNumber; + __le32 VolumeLabelLength; /* includes trailing null */ + __u8 SupportsObjects; /* True if eg like NTFS, supports objects */ + __u8 Reserved; + __u8 VolumeLabel[0]; /* variable len */ +} __packed; + /* partial list of QUERY INFO levels */ #define FILE_DIRECTORY_INFORMATION 1 #define FILE_FULL_DIRECTORY_INFORMATION 2