From nobody Tue Dec 16 16:35:19 2025 Received: from out-178.mta0.migadu.com (out-178.mta0.migadu.com [91.218.175.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9BD67244685 for ; Thu, 11 Dec 2025 14:33:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765463628; cv=none; b=DKFjcU9XaulOvm/XBBjF+I18nMNtkO0EnzlB4WX5wtyoKY1SI8gdY3MADLEzdSrymntgfIfYmWkDONXT2xZA/Udco69EdjpMQXEwKCZfW0An+eHMm0HQt6TG3YvQUpvzq6Kz5Ls/1RKiXQunSdPzScYCBWn/NCVhwMOoxQHa+xM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765463628; c=relaxed/simple; bh=V1dQNpvB8QULXgKO1a90mjb19MSMVIDA9UVK+sU17i0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=t9eJZ5F45nA6ura3tdUIH/1ou4iIw6N691cBudhcOdSrn+b6XRhSgyvZCel3jW4unjMc77PE9dAW7w6cKxiqrfymqUjMWG29Ivmobe1mhU/SiVrlGVxm5oXfaQ0GuDKj/RIQZ1jwA31aR7rSOb3up9ALy23h4Q9Ux/SA2cvuqxQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=A/ohpxx4; arc=none smtp.client-ip=91.218.175.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="A/ohpxx4" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1765463624; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3jRLKjrZkWjztC29/ONl+he+kaGJLo7VeXksJ1WZvJA=; b=A/ohpxx4Bwf8k3bRXSjnxYRw/jWiZDo294s7+HQDSsC83w5CK6Y7A1+hHYo4UhhFZKGHuh hPEquXKLv+MmkAu1NUUwzg+FBOmoH1M8Pz7+IjvbuvcvbY7vFcMgg2Cqy7K5jDbbSb3a0I ASdSPPPs3LPmR3eN357c+fNfgu1Jb4A= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ChenXiaoSong , Steve French Subject: [PATCH v2 1/7] smb: move File Attributes definitions into common/fscc.h Date: Thu, 11 Dec 2025 22:32:22 +0800 Message-ID: <20251211143228.172470-2-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251211143228.172470-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251211143228.172470-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ChenXiaoSong These definitions are specified in MS-FSCC 2.6, so move them into fscc.h. Modify the following places: - FILE_ATTRIBUTE__MASK -> FILE_ATTRIBUTE_MASK - Update FILE_ATTRIBUTE_MASK value - cpu_to_le32(constant) -> cpu_to_le32(MACRO DEFINITION) Signed-off-by: ChenXiaoSong Signed-off-by: Steve French --- fs/smb/common/fscc.h | 45 +++++++++++++++++++++++++++++++++++++++++ fs/smb/common/smb2pdu.h | 35 -------------------------------- 2 files changed, 45 insertions(+), 35 deletions(-) diff --git a/fs/smb/common/fscc.h b/fs/smb/common/fscc.h index b8e7bb5ddfdd..0123f34db1e8 100644 --- a/fs/smb/common/fscc.h +++ b/fs/smb/common/fscc.h @@ -144,6 +144,51 @@ typedef struct { __le32 DeviceCharacteristics; } __packed FILE_SYSTEM_DEVICE_INFO; /* device info level 0x104 */ =20 +/* + * File Attributes + * See MS-FSCC 2.6 + */ +#define FILE_ATTRIBUTE_READONLY 0x00000001 +#define FILE_ATTRIBUTE_HIDDEN 0x00000002 +#define FILE_ATTRIBUTE_SYSTEM 0x00000004 +#define FILE_ATTRIBUTE_DIRECTORY 0x00000010 +#define FILE_ATTRIBUTE_ARCHIVE 0x00000020 +#define FILE_ATTRIBUTE_NORMAL 0x00000080 +#define FILE_ATTRIBUTE_TEMPORARY 0x00000100 +#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 +#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 +#define FILE_ATTRIBUTE_COMPRESSED 0x00000800 +#define FILE_ATTRIBUTE_OFFLINE 0x00001000 +#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 +#define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 +#define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000 +#define FILE_ATTRIBUTE_NO_SCRUB_DATA 0x00020000 +#define FILE_ATTRIBUTE_MASK (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDD= EN | \ + FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_DIRECTORY | \ + FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_NORMAL | \ + FILE_ATTRIBUTE_TEMPORARY | FILE_ATTRIBUTE_SPARSE_FILE | \ + FILE_ATTRIBUTE_REPARSE_POINT | FILE_ATTRIBUTE_COMPRESSED | \ + FILE_ATTRIBUTE_OFFLINE | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED | \ + FILE_ATTRIBUTE_ENCRYPTED | FILE_ATTRIBUTE_INTEGRITY_STREAM | \ + FILE_ATTRIBUTE_NO_SCRUB_DATA) + +#define FILE_ATTRIBUTE_READONLY_LE cpu_to_le32(FILE_ATTRIBUTE_READONLY) +#define FILE_ATTRIBUTE_HIDDEN_LE cpu_to_le32(FILE_ATTRIBUTE_HIDDEN) +#define FILE_ATTRIBUTE_SYSTEM_LE cpu_to_le32(FILE_ATTRIBUTE_SYSTEM) +#define FILE_ATTRIBUTE_DIRECTORY_LE cpu_to_le32(FILE_ATTRIBUTE_DIRECTORY) +#define FILE_ATTRIBUTE_ARCHIVE_LE cpu_to_le32(FILE_ATTRIBUTE_ARCHIVE) +#define FILE_ATTRIBUTE_NORMAL_LE cpu_to_le32(FILE_ATTRIBUTE_NORMAL) +#define FILE_ATTRIBUTE_TEMPORARY_LE cpu_to_le32(FILE_ATTRIBUTE_TEMPORARY) +#define FILE_ATTRIBUTE_SPARSE_FILE_LE cpu_to_le32(FILE_ATTRIBUTE_SPARSE_F= ILE) +#define FILE_ATTRIBUTE_REPARSE_POINT_LE cpu_to_le32(FILE_ATTRIBUTE_REPARS= E_POINT) +#define FILE_ATTRIBUTE_COMPRESSED_LE cpu_to_le32(FILE_ATTRIBUTE_COMPRESSE= D) +#define FILE_ATTRIBUTE_OFFLINE_LE cpu_to_le32(FILE_ATTRIBUTE_OFFLINE) +#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED_LE cpu_to_le32(FILE_ATTRIBUTE_N= OT_CONTENT_INDEXED) +#define FILE_ATTRIBUTE_ENCRYPTED_LE cpu_to_le32(FILE_ATTRIBUTE_ENCRYPTED) +#define FILE_ATTRIBUTE_INTEGRITY_STREAM_LE cpu_to_le32(FILE_ATTRIBUTE_INTE= GRITY_STREAM) +#define FILE_ATTRIBUTE_NO_SCRUB_DATA_LE cpu_to_le32(FILE_ATTRIBUTE_NO_SCR= UB_DATA) +#define FILE_ATTRIBUTE_MASK_LE cpu_to_le32(FILE_ATTRIBUTE_MASK) + /* * Response contains array of the following structures * See MS-FSCC 2.7.1 diff --git a/fs/smb/common/smb2pdu.h b/fs/smb/common/smb2pdu.h index 950aadade401..5372a820118e 100644 --- a/fs/smb/common/smb2pdu.h +++ b/fs/smb/common/smb2pdu.h @@ -1072,41 +1072,6 @@ struct smb2_server_client_notification { #define IL_IMPERSONATION cpu_to_le32(0x00000002) #define IL_DELEGATE cpu_to_le32(0x00000003) =20 -/* File Attributes */ -#define FILE_ATTRIBUTE_READONLY 0x00000001 -#define FILE_ATTRIBUTE_HIDDEN 0x00000002 -#define FILE_ATTRIBUTE_SYSTEM 0x00000004 -#define FILE_ATTRIBUTE_DIRECTORY 0x00000010 -#define FILE_ATTRIBUTE_ARCHIVE 0x00000020 -#define FILE_ATTRIBUTE_NORMAL 0x00000080 -#define FILE_ATTRIBUTE_TEMPORARY 0x00000100 -#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 -#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 -#define FILE_ATTRIBUTE_COMPRESSED 0x00000800 -#define FILE_ATTRIBUTE_OFFLINE 0x00001000 -#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 -#define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 -#define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000 -#define FILE_ATTRIBUTE_NO_SCRUB_DATA 0x00020000 -#define FILE_ATTRIBUTE__MASK 0x00007FB7 - -#define FILE_ATTRIBUTE_READONLY_LE cpu_to_le32(0x00000001) -#define FILE_ATTRIBUTE_HIDDEN_LE cpu_to_le32(0x00000002) -#define FILE_ATTRIBUTE_SYSTEM_LE cpu_to_le32(0x00000004) -#define FILE_ATTRIBUTE_DIRECTORY_LE cpu_to_le32(0x00000010) -#define FILE_ATTRIBUTE_ARCHIVE_LE cpu_to_le32(0x00000020) -#define FILE_ATTRIBUTE_NORMAL_LE cpu_to_le32(0x00000080) -#define FILE_ATTRIBUTE_TEMPORARY_LE cpu_to_le32(0x00000100) -#define FILE_ATTRIBUTE_SPARSE_FILE_LE cpu_to_le32(0x00000200) -#define FILE_ATTRIBUTE_REPARSE_POINT_LE cpu_to_le32(0x00000400) -#define FILE_ATTRIBUTE_COMPRESSED_LE cpu_to_le32(0x00000800) -#define FILE_ATTRIBUTE_OFFLINE_LE cpu_to_le32(0x00001000) -#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED_LE cpu_to_le32(0x00002000) -#define FILE_ATTRIBUTE_ENCRYPTED_LE cpu_to_le32(0x00004000) -#define FILE_ATTRIBUTE_INTEGRITY_STREAM_LE cpu_to_le32(0x00008000) -#define FILE_ATTRIBUTE_NO_SCRUB_DATA_LE cpu_to_le32(0x00020000) -#define FILE_ATTRIBUTE_MASK_LE cpu_to_le32(0x00007FB7) - /* Desired Access Flags */ #define FILE_READ_DATA_LE cpu_to_le32(0x00000001) #define FILE_LIST_DIRECTORY_LE cpu_to_le32(0x00000001) --=20 2.43.0 From nobody Tue Dec 16 16:35:19 2025 Received: from out-177.mta0.migadu.com (out-177.mta0.migadu.com [91.218.175.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BDB04283FE2 for ; Thu, 11 Dec 2025 14:33:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765463632; cv=none; b=oo647xLpOe3HKdjRMPAw5NFrWv3ewcuS7Pg44LMcQuThB+8u55NN5jFy0cBXmvVHhpnjQKDGrA5Va26h+yT/kmT7V/oNKSan00o09QCEYrSbY6K/WUUeI45sJy/fh8VyssGdjWS3LoIDwVkWdil/kC6+bbiqO2n1jA29PsYZNEo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765463632; c=relaxed/simple; bh=tSTu7uUu3xdc98j97FV+7fQhyMMjbMTXy/paskabVJM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PFWLtSRi5lJZ3gSOqdjIUgMOmUHDLwUcDYWNORwC1+nDO20IPrG819HcLcurbRTSY57kR6taQLiADHxeTmGgC0QA+oB2KfPFX574QQNefakRHkubADlIFnRGQSOqsRNKVnFOuoHdoSJ6hhB7SXURz/tIYwrVS9ARxDL/gOVxDZQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=BVT16hut; arc=none smtp.client-ip=91.218.175.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="BVT16hut" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1765463627; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Ulb3PE2e2xkAf2hF5H7JITgN051/NEYe6gvskt2GbfA=; b=BVT16hut6Zljczl6wxJkRboYlGT+VPnW2K8p6HFobQjwTzwFeNulQBH5Uc7XASYXAeTCRL Du972YX/zH8L6350Q9OdFDD21Vl1Y2aUbgQNhJ13NkEpL59Q+jvkPRdX18/eRrBgun8bmV AD21M3IAkiL9M0UE3LDgNmwS8AGsjWU= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ChenXiaoSong , Steve French Subject: [PATCH v2 2/7] smb: update struct duplicate_extents_to_file_ex Date: Thu, 11 Dec 2025 22:32:23 +0800 Message-ID: <20251211143228.172470-3-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251211143228.172470-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251211143228.172470-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ChenXiaoSong Add the missing field to the structure (see MS-FSCC 2.3.9.2), and correct the section number in the documentation reference. Signed-off-by: ChenXiaoSong Signed-off-by: Steve French --- fs/smb/common/smb2pdu.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/smb/common/smb2pdu.h b/fs/smb/common/smb2pdu.h index 5372a820118e..3c8d8a4e7439 100644 --- a/fs/smb/common/smb2pdu.h +++ b/fs/smb/common/smb2pdu.h @@ -1510,9 +1510,10 @@ struct duplicate_extents_to_file { __le64 ByteCount; /* Bytes to be copied */ } __packed; =20 -/* See MS-FSCC 2.3.8 */ +/* See MS-FSCC 2.3.9 */ #define DUPLICATE_EXTENTS_DATA_EX_SOURCE_ATOMIC 0x00000001 struct duplicate_extents_to_file_ex { + __le64 StructureSize; /* MUST be set to 0x30 */ __u64 PersistentFileHandle; /* source file handle, opaque endianness */ __u64 VolatileFileHandle; __le64 SourceFileOffset; --=20 2.43.0 From nobody Tue Dec 16 16:35:19 2025 Received: from out-189.mta0.migadu.com (out-189.mta0.migadu.com [91.218.175.189]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 345BB285CAA; Thu, 11 Dec 2025 14:33:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.189 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765463634; cv=none; b=doDpBHZ1mfGKdmJ2VATTadoyZedbj0xf1aiUVjQBYM4YLL+OKLLdD47Q3JMrmltcOZ5IP0sCA4U5NsGy0j25c9FVQtM+kUI0EoPrbTTJtxlElLV0T61Jy3Nc7FvkvvFexCmGQWJ3xVwU3P3XSZvEw0Un7Kms3eONOZX+OoLSzx8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765463634; c=relaxed/simple; bh=hCRIJyz4TTNdKdO0mZGm+yOGLDFBImZTlRV4zmUbomw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RznZsFb0XQWPRSwTuWNq/ZSKO0Ryb0b3YgVPcSgo9Ir8/2hmcLuOP6KRk07oZGiscbtYLv5kw7XaupVLDeNWjtgjZXUcHnKrIn468sKN0Sf/AIcjyFIuNjivTdVgOW0ViCLMv8C10nzW2Q8hRrW8lw0d0GfgzU6ece9J91lY418= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=PoRTlu1+; arc=none smtp.client-ip=91.218.175.189 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="PoRTlu1+" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1765463629; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ehH3XCWHeHmZZ620Aa1+AZsIP8iX8kBtHlUdLWKIrTg=; b=PoRTlu1+hEM6WWeOITPKkAVCOd5X/o74n3G+WFFhrIKC86am4Z5sn3UZNMyjfXOdKSCDp3 DQkdrHgz0cOhzXs7ra2wRcaNn3jm+BnL6pFkcxfR+IA/mSNJYYFzBtX8o6hgt2/9fsdFF4 fMV8mCtilpBSjJ0Ak94xI0nDUQDX6Oo= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ZhangGuoDong , ChenXiaoSong , Steve French Subject: [PATCH v2 3/7] smb: move some SMB1 definitions into common/smb1pdu.h Date: Thu, 11 Dec 2025 22:32:24 +0800 Message-ID: <20251211143228.172470-4-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251211143228.172470-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251211143228.172470-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ZhangGuoDong These definitions are only used by SMB1, so move them into the new common/smb1pdu.h. KSMBD only implements SMB_COM_NEGOTIATE, see MS-SMB2 3.3.5.2. Co-developed-by: ChenXiaoSong Signed-off-by: ChenXiaoSong Signed-off-by: ZhangGuoDong Signed-off-by: Steve French --- fs/smb/client/cifspdu.h | 2 +- fs/smb/common/smb1pdu.h | 56 ++++++++++++++++++++++++++++++++++++++ fs/smb/common/smb2pdu.h | 40 --------------------------- fs/smb/common/smbglob.h | 2 -- fs/smb/server/smb_common.h | 1 + 5 files changed, 58 insertions(+), 43 deletions(-) create mode 100644 fs/smb/common/smb1pdu.h diff --git a/fs/smb/client/cifspdu.h b/fs/smb/client/cifspdu.h index eeb4011cb217..fdd84369e7b8 100644 --- a/fs/smb/client/cifspdu.h +++ b/fs/smb/client/cifspdu.h @@ -12,7 +12,7 @@ #include #include #include "../common/smbfsctl.h" -#include "../common/smb2pdu.h" +#include "../common/smb1pdu.h" =20 #define CIFS_PROT 0 #define POSIX_PROT (CIFS_PROT+1) diff --git a/fs/smb/common/smb1pdu.h b/fs/smb/common/smb1pdu.h new file mode 100644 index 000000000000..df6d4e11ae92 --- /dev/null +++ b/fs/smb/common/smb1pdu.h @@ -0,0 +1,56 @@ +/* SPDX-License-Identifier: LGPL-2.1 */ +/* + * + * Copyright (C) International Business Machines Corp., 2002,2009 + * 2018 Samsung Electronics Co., Ltd. + * Author(s): Steve French + * Namjae Jeon + * + */ + +#ifndef _COMMON_SMB1_PDU_H +#define _COMMON_SMB1_PDU_H + +#define SMB1_PROTO_NUMBER cpu_to_le32(0x424d53ff) + +/* + * See MS-CIFS 2.2.3.1 + * MS-SMB 2.2.3.1 + */ +struct smb_hdr { + __u8 Protocol[4]; + __u8 Command; + union { + struct { + __u8 ErrorClass; + __u8 Reserved; + __le16 Error; + } __packed DosError; + __le32 CifsError; + } __packed Status; + __u8 Flags; + __le16 Flags2; /* note: le */ + __le16 PidHigh; + union { + struct { + __le32 SequenceNumber; /* le */ + __u32 Reserved; /* zero */ + } __packed Sequence; + __u8 SecuritySignature[8]; /* le */ + } __packed Signature; + __u8 pad[2]; + __u16 Tid; + __le16 Pid; + __u16 Uid; + __le16 Mid; + __u8 WordCount; +} __packed; + +/* See MS-CIFS 2.2.4.52.1 */ +typedef struct smb_negotiate_req { + struct smb_hdr hdr; /* wct =3D 0 */ + __le16 ByteCount; + unsigned char DialectsArray[]; +} __packed SMB_NEGOTIATE_REQ; + +#endif /* _COMMON_SMB1_PDU_H */ diff --git a/fs/smb/common/smb2pdu.h b/fs/smb/common/smb2pdu.h index 3c8d8a4e7439..28460c3d4979 100644 --- a/fs/smb/common/smb2pdu.h +++ b/fs/smb/common/smb2pdu.h @@ -1985,39 +1985,6 @@ struct smb2_lease_ack { __le64 LeaseDuration; } __packed; =20 -/* - * See MS-CIFS 2.2.3.1 - * MS-SMB 2.2.3.1 - */ -struct smb_hdr { - __u8 Protocol[4]; - __u8 Command; - union { - struct { - __u8 ErrorClass; - __u8 Reserved; - __le16 Error; - } __packed DosError; - __le32 CifsError; - } __packed Status; - __u8 Flags; - __le16 Flags2; /* note: le */ - __le16 PidHigh; - union { - struct { - __le32 SequenceNumber; /* le */ - __u32 Reserved; /* zero */ - } __packed Sequence; - __u8 SecuritySignature[8]; /* le */ - } __packed Signature; - __u8 pad[2]; - __u16 Tid; - __le16 Pid; - __u16 Uid; - __le16 Mid; - __u8 WordCount; -} __packed; - #define OP_BREAK_STRUCT_SIZE_20 24 #define OP_BREAK_STRUCT_SIZE_21 36 =20 @@ -2122,11 +2089,4 @@ struct smb_hdr { #define SET_MINIMUM_RIGHTS (FILE_READ_EA | FILE_READ_ATTRIBUTES \ | READ_CONTROL | SYNCHRONIZE) =20 -/* See MS-CIFS 2.2.4.52.1 */ -typedef struct smb_negotiate_req { - struct smb_hdr hdr; /* wct =3D 0 */ - __le16 ByteCount; - unsigned char DialectsArray[]; -} __packed SMB_NEGOTIATE_REQ; - #endif /* _COMMON_SMB2PDU_H */ diff --git a/fs/smb/common/smbglob.h b/fs/smb/common/smbglob.h index 9562845a5617..4e33d91cdc9d 100644 --- a/fs/smb/common/smbglob.h +++ b/fs/smb/common/smbglob.h @@ -11,8 +11,6 @@ #ifndef _COMMON_SMB_GLOB_H #define _COMMON_SMB_GLOB_H =20 -#define SMB1_PROTO_NUMBER cpu_to_le32(0x424d53ff) - struct smb_version_values { char *version_string; __u16 protocol_id; diff --git a/fs/smb/server/smb_common.h b/fs/smb/server/smb_common.h index 2baf4aa330eb..89adfd190370 100644 --- a/fs/smb/server/smb_common.h +++ b/fs/smb/server/smb_common.h @@ -11,6 +11,7 @@ #include "glob.h" #include "nterr.h" #include "../common/smbglob.h" +#include "../common/smb1pdu.h" #include "../common/smb2pdu.h" #include "../common/fscc.h" #include "smb2pdu.h" --=20 2.43.0 From nobody Tue Dec 16 16:35:19 2025 Received: from out-173.mta0.migadu.com (out-173.mta0.migadu.com [91.218.175.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EFE42289340 for ; Thu, 11 Dec 2025 14:33:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765463636; cv=none; b=s8nbLkiD1DkyffvwkX+PNaQF1IStkMK/Ni0QHotXphCi5rAhqd+w6H4mRMbitn3ozbAOw7x1SawtVgxYp1VVYNUQP2mbkKvBoQvjOT+SNusB7t8XpeuDVfRPnv6gyq1gKM3AclSq9HoApED0bGWVKlJgMrbjMbOILohv27chnKM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765463636; c=relaxed/simple; bh=D4KtcTcGvfcaQEsIUlatpzVdBl8nJSICK8CtCXKf1N0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EwrHgOHqAUgyCKPh/G/t8qkzDWy7Nwaents/hqirZnIrRGyKQo9QCC4stakOfYQgFufNQMdXh51KVOdJ5SN1Ty8snW3+Be4PqGG71Qq25Cr8QuI+0/7C1+3ACG9drMgNa0BJezw3uoY7WIp4pWfMeYkPAnBiE/FcudAnuMGXxXI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=CYcqt/Vi; arc=none smtp.client-ip=91.218.175.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="CYcqt/Vi" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1765463632; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TlYMyWseHM3TTHMpPUh5QYf3i4IaJix7XO2WCkfS81I=; b=CYcqt/ViLd+Tcmoe84k9+GM4jEpkxkuNIcyaP5H3mEfFes93wpCbPjfgqVW0C6e4WwzRmc ayokyXwnHxwKVxQ8QRDgUwIvl1irOUOYvAX18fCvr67o+l+RbR8hdXc5bUrX04o8ds3r4z VEyyVObTSAHfO6tPDeD9BBISjhYaalk= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ZhangGuoDong , ChenXiaoSong Subject: [PATCH v2 4/7] smb: move smb3_fs_vol_info into common/fscc.h Date: Thu, 11 Dec 2025 22:32:25 +0800 Message-ID: <20251211143228.172470-5-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251211143228.172470-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251211143228.172470-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ZhangGuoDong The structure definition on the server side is specified in MS-CIFS 2.2.8.2.3, but we should instead refer to MS-FSCC 2.5.9, just as the client side does. Modify the following places: - filesystem_vol_info -> smb3_fs_vol_info - SerialNumber -> VolumeSerialNumber - VolumeLabelSize -> VolumeLabelLength Then move it into common header file. Co-developed-by: ChenXiaoSong Signed-off-by: ChenXiaoSong Signed-off-by: ZhangGuoDong --- fs/smb/common/fscc.h | 11 +++++++++++ fs/smb/common/smb2pdu.h | 11 ----------- fs/smb/server/smb2pdu.c | 10 +++++----- fs/smb/server/smb_common.h | 8 -------- 4 files changed, 16 insertions(+), 24 deletions(-) diff --git a/fs/smb/common/fscc.h b/fs/smb/common/fscc.h index 0123f34db1e8..5949facd005a 100644 --- a/fs/smb/common/fscc.h +++ b/fs/smb/common/fscc.h @@ -138,6 +138,17 @@ typedef struct { __le32 BytesPerSector; } __packed FILE_SYSTEM_SIZE_INFO; /* size info, level 0x103 */ =20 +/* 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[]; /* variable len */ +} __packed; + /* See MS-FSCC 2.5.10 */ typedef struct { __le32 DeviceType; diff --git a/fs/smb/common/smb2pdu.h b/fs/smb/common/smb2pdu.h index 28460c3d4979..5dfdf9ec11c7 100644 --- a/fs/smb/common/smb2pdu.h +++ b/fs/smb/common/smb2pdu.h @@ -1938,17 +1938,6 @@ struct smb2_fs_control_info { __le32 Padding; } __packed; =20 -/* 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[]; /* variable len */ -} __packed; - /* See MS-SMB2 2.2.23 through 2.2.25 */ struct smb2_oplock_break { struct smb2_hdr hdr; diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c index f3184b217575..f58b212481e0 100644 --- a/fs/smb/server/smb2pdu.c +++ b/fs/smb/server/smb2pdu.c @@ -5507,11 +5507,11 @@ static int smb2_get_info_filesystem(struct ksmbd_wo= rk *work, } case FS_VOLUME_INFORMATION: { - struct filesystem_vol_info *info; + struct smb3_fs_vol_info *info; size_t sz; unsigned int serial_crc =3D 0; =20 - info =3D (struct filesystem_vol_info *)(rsp->Buffer); + info =3D (struct smb3_fs_vol_info *)(rsp->Buffer); info->VolumeCreationTime =3D 0; serial_crc =3D crc32_le(serial_crc, share->name, strlen(share->name)); @@ -5520,14 +5520,14 @@ static int smb2_get_info_filesystem(struct ksmbd_wo= rk *work, serial_crc =3D crc32_le(serial_crc, ksmbd_netbios_name(), strlen(ksmbd_netbios_name())); /* Taking dummy value of serial number*/ - info->SerialNumber =3D cpu_to_le32(serial_crc); + info->VolumeSerialNumber =3D cpu_to_le32(serial_crc); len =3D smbConvertToUTF16((__le16 *)info->VolumeLabel, share->name, PATH_MAX, conn->local_nls, 0); len =3D len * 2; - info->VolumeLabelSize =3D cpu_to_le32(len); + info->VolumeLabelLength =3D cpu_to_le32(len); info->Reserved =3D 0; - sz =3D sizeof(struct filesystem_vol_info) + len; + sz =3D sizeof(struct smb3_fs_vol_info) + len; rsp->OutputBufferLength =3D cpu_to_le32(sz); break; } diff --git a/fs/smb/server/smb_common.h b/fs/smb/server/smb_common.h index 89adfd190370..f47ce4a6719c 100644 --- a/fs/smb/server/smb_common.h +++ b/fs/smb/server/smb_common.h @@ -91,14 +91,6 @@ struct smb_negotiate_rsp { __le16 ByteCount; } __packed; =20 -struct filesystem_vol_info { - __le64 VolumeCreationTime; - __le32 SerialNumber; - __le32 VolumeLabelSize; - __le16 Reserved; - __le16 VolumeLabel[]; -} __packed; - #define EXTENDED_INFO_MAGIC 0x43667364 /* Cfsd */ #define STRING_LENGTH 28 =20 --=20 2.43.0 From nobody Tue Dec 16 16:35:19 2025 Received: from out-179.mta0.migadu.com (out-179.mta0.migadu.com [91.218.175.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BA6532868A9 for ; Thu, 11 Dec 2025 14:33:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765463639; cv=none; b=loD9nDfJ0B7efR3K2pHN7g4E8qjaGh4RhnqCNAgqFiJI5CR/XFCtgyPEhfOVfAFXBCLvx3rpUXzQtcYrJfj9JTQV8UbnGUeC2q6EZkxQXWWYQ1YoM2br0F+PEq38VBS8jGiy7vPVb50w/Z21cCUk+4ZxiSv5m/n0tAxxukkslq4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765463639; c=relaxed/simple; bh=CsZR8rYNEUCtvS0RAQlsSC+xnNIUYUmzL5it3zqQ2M0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bkRqtRHgCJY617MhoWBtB4E7XlTOp8DHWSyh3fUL6IF67wO7YQguqWHbAytUsJ690WfJYgqSS17H9w25fwO3sd9LFvUi8g6HAGaksNUThb1z7UdoIg5zHRbsIX4F78HIPCTjP4RKImrQopvlXaRij29A2iHHz34Z/k9E328jIOA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=w+A9xoEe; arc=none smtp.client-ip=91.218.175.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="w+A9xoEe" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1765463634; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=bnCsvMm36uLOzY0gtANpF8iFfxAX2j/CmQVsyvgEwWk=; b=w+A9xoEezKhkprAkoUGIQLrK/Mo13THmg/0Fmelu0EaoqzHRUNyvPUlgxjzWCKx4Ie1sOA PVV95twWQqtRvZ9BuGZK3+2usaG0P4KjiJJps/1PYIKgLxBgeTx3mF2CRv6FRnzK+Y6bi7 iM0xLE5wQzpqpNDhnX/jEj2nv9OD4wk= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ZhangGuoDong , ChenXiaoSong Subject: [PATCH v2 5/7] smb: move some definitions from common/smb2pdu.h into common/fscc.h Date: Thu, 11 Dec 2025 22:32:26 +0800 Message-ID: <20251211143228.172470-6-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251211143228.172470-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251211143228.172470-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ZhangGuoDong These definitions are specified in MS-FSCC, so move them into fscc.h. Only add some documentation references, no other changes. Co-developed-by: ChenXiaoSong Signed-off-by: ChenXiaoSong Signed-off-by: ZhangGuoDong --- fs/smb/common/fscc.h | 316 ++++++++++++++++++++++++++++++++++++++++ fs/smb/common/smb2pdu.h | 307 -------------------------------------- 2 files changed, 316 insertions(+), 307 deletions(-) diff --git a/fs/smb/common/fscc.h b/fs/smb/common/fscc.h index 5949facd005a..14688ab7ebd5 100644 --- a/fs/smb/common/fscc.h +++ b/fs/smb/common/fscc.h @@ -12,6 +12,210 @@ #ifndef _COMMON_SMB_FSCC_H #define _COMMON_SMB_FSCC_H =20 +/* Reparse structures - see MS-FSCC 2.1.2 */ + +/* struct fsctl_reparse_info_req is empty, only response structs (see belo= w) */ +struct reparse_data_buffer { + __le32 ReparseTag; + __le16 ReparseDataLength; + __u16 Reserved; + __u8 DataBuffer[]; /* Variable Length */ +} __packed; + +struct reparse_guid_data_buffer { + __le32 ReparseTag; + __le16 ReparseDataLength; + __u16 Reserved; + __u8 ReparseGuid[16]; + __u8 DataBuffer[]; /* Variable Length */ +} __packed; + +struct reparse_mount_point_data_buffer { + __le32 ReparseTag; + __le16 ReparseDataLength; + __u16 Reserved; + __le16 SubstituteNameOffset; + __le16 SubstituteNameLength; + __le16 PrintNameOffset; + __le16 PrintNameLength; + __u8 PathBuffer[]; /* Variable Length */ +} __packed; + +#define SYMLINK_FLAG_RELATIVE 0x00000001 + +struct reparse_symlink_data_buffer { + __le32 ReparseTag; + __le16 ReparseDataLength; + __u16 Reserved; + __le16 SubstituteNameOffset; + __le16 SubstituteNameLength; + __le16 PrintNameOffset; + __le16 PrintNameLength; + __le32 Flags; + __u8 PathBuffer[]; /* Variable Length */ +} __packed; + +/* For IO_REPARSE_TAG_NFS - see MS-FSCC 2.1.2.6 */ +#define NFS_SPECFILE_LNK 0x00000000014B4E4C +#define NFS_SPECFILE_CHR 0x0000000000524843 +#define NFS_SPECFILE_BLK 0x00000000004B4C42 +#define NFS_SPECFILE_FIFO 0x000000004F464946 +#define NFS_SPECFILE_SOCK 0x000000004B434F53 +struct reparse_nfs_data_buffer { + __le32 ReparseTag; + __le16 ReparseDataLength; + __u16 Reserved; + __le64 InodeType; /* NFS_SPECFILE_* */ + __u8 DataBuffer[]; +} __packed; + +/* For IO_REPARSE_TAG_LX_SYMLINK - see MS-FSCC 2.1.2.7 */ +struct reparse_wsl_symlink_data_buffer { + __le32 ReparseTag; + __le16 ReparseDataLength; + __u16 Reserved; + __le32 Version; /* Always 2 */ + __u8 Target[]; /* Variable Length UTF-8 string without nul-term */ +} __packed; + +/* See MS-FSCC 2.3.7 */ +struct duplicate_extents_to_file { + __u64 PersistentFileHandle; /* source file handle, opaque endianness */ + __u64 VolatileFileHandle; + __le64 SourceFileOffset; + __le64 TargetFileOffset; + __le64 ByteCount; /* Bytes to be copied */ +} __packed; + +/* See MS-FSCC 2.3.9 */ +#define DUPLICATE_EXTENTS_DATA_EX_SOURCE_ATOMIC 0x00000001 +struct duplicate_extents_to_file_ex { + __le64 StructureSize; /* MUST be set to 0x30 */ + __u64 PersistentFileHandle; /* source file handle, opaque endianness */ + __u64 VolatileFileHandle; + __le64 SourceFileOffset; + __le64 TargetFileOffset; + __le64 ByteCount; /* Bytes to be copied */ + __le32 Flags; + __le32 Reserved; +} __packed; + +/* See MS-FSCC 2.3.20 */ +struct fsctl_get_integrity_information_rsp { + __le16 ChecksumAlgorithm; + __le16 Reserved; + __le32 Flags; + __le32 ChecksumChunkSizeInBytes; + __le32 ClusterSizeInBytes; +} __packed; + +/* See MS-FSCC 2.3.52 */ +struct file_allocated_range_buffer { + __le64 file_offset; + __le64 length; +} __packed; + +/* See MS-FSCC 2.3.55 */ +struct fsctl_query_file_regions_req { + __le64 FileOffset; + __le64 Length; + __le32 DesiredUsage; + __le32 Reserved; +} __packed; + +/* See MS-FSCC 2.3.56.1 */ +#define FILE_USAGE_INVALID_RANGE 0x00000000 +#define FILE_USAGE_VALID_CACHED_DATA 0x00000001 +#define FILE_USAGE_NONCACHED_DATA 0x00000002 +struct file_region_info { + __le64 FileOffset; + __le64 Length; + __le32 DesiredUsage; + __le32 Reserved; +} __packed; + +/* See MS-FSCC 2.3.56 */ +struct fsctl_query_file_region_rsp { + __le32 Flags; + __le32 TotalRegionEntryCount; + __le32 RegionEntryCount; + __u32 Reserved; + struct file_region_info Regions[]; +} __packed; + +/* See MS-FSCC 2.3.58 */ +struct fsctl_query_on_disk_vol_info_rsp { + __le64 DirectoryCount; + __le64 FileCount; + __le16 FsFormatMajVersion; + __le16 FsFormatMinVersion; + __u8 FsFormatName[24]; + __le64 FormatTime; + __le64 LastUpdateTime; + __u8 CopyrightInfo[68]; + __u8 AbstractInfo[68]; + __u8 FormatImplInfo[68]; + __u8 LastModifyImplInfo[68]; +} __packed; + +/* See MS-FSCC 2.3.73 */ +struct fsctl_set_integrity_information_req { + __le16 ChecksumAlgorithm; + __le16 Reserved; + __le32 Flags; +} __packed; + +/* See MS-FSCC 2.3.75 */ +struct fsctl_set_integrity_info_ex_req { + __u8 EnableIntegrity; + __u8 KeepState; + __u16 Reserved; + __le32 Flags; + __u8 Version; + __u8 Reserved2[7]; +} __packed; + +/* + * this goes in the ioctl buffer when doing FSCTL_SET_ZERO_DATA + * See MS-FSCC 2.3.85 + */ +struct file_zero_data_information { + __le64 FileOffset; + __le64 BeyondFinalZero; +} __packed; + +/* + * This level 18, although with struct with same name is different from ci= fs + * level 0x107. Level 0x107 has an extra u64 between AccessFlags and + * CurrentByteOffset. + * See MS-FSCC 2.4.2 + */ +struct smb2_file_all_info { /* data block encoding of response to level 18= */ + __le64 CreationTime; /* Beginning of FILE_BASIC_INFO equivalent */ + __le64 LastAccessTime; + __le64 LastWriteTime; + __le64 ChangeTime; + __le32 Attributes; + __u32 Pad1; /* End of FILE_BASIC_INFO_INFO equivalent */ + __le64 AllocationSize; /* Beginning of FILE_STANDARD_INFO equivalent */ + __le64 EndOfFile; /* size ie offset to first free byte in file */ + __le32 NumberOfLinks; /* hard links */ + __u8 DeletePending; + __u8 Directory; + __u16 Pad2; /* End of FILE_STANDARD_INFO equivalent */ + __le64 IndexNumber; + __le32 EASize; + __le32 AccessFlags; + __le64 CurrentByteOffset; + __le32 Mode; + __le32 AlignmentRequirement; + __le32 FileNameLength; + union { + char __pad; /* Legacy structure padding */ + DECLARE_FLEX_ARRAY(char, FileName); + }; +} __packed; /* level 18 Query */ + /* See MS-FSCC 2.4.8 */ typedef struct { __le32 NextEntryOffset; @@ -46,6 +250,11 @@ typedef struct { char FileName[]; } __packed FILE_DIRECTORY_INFO; /* level 0x101 FF resp data */ =20 +/* See MS-FSCC 2.4.13 */ +struct smb2_file_eof_info { /* encoding of request for level 10 */ + __le64 EndOfFile; /* new end of file value */ +} __packed; /* level 20 Set */ + /* See MS-FSCC 2.4.14 */ typedef struct { __le32 NextEntryOffset; @@ -80,6 +289,26 @@ typedef struct { char FileName[]; } __packed FILE_ID_FULL_DIR_INFO; /* level 0x105 FF rsp data */ =20 +/* See MS-FSCC 2.4.27 */ +struct smb2_file_internal_info { + __le64 IndexNumber; +} __packed; /* level 6 Query */ + +/* See MS-FSCC 2.4.28.2 */ +struct smb2_file_link_info { /* encoding of request for level 11 */ + /* New members MUST be added within the struct_group() macro below. */ + __struct_group(smb2_file_link_info_hdr, __hdr, __packed, + __u8 ReplaceIfExists; /* 1 =3D replace existing link with new */ + /* 0 =3D fail if link already exists */ + __u8 Reserved[7]; + __u64 RootDirectory; /* MBZ for network operations (why says spec?) */ + __le32 FileNameLength; + ); + char FileName[]; /* Name to be assigned to new link */ +} __packed; /* level 11 Set */ +static_assert(offsetof(struct smb2_file_link_info, FileName) =3D=3D sizeof= (struct smb2_file_link_info_hdr), + "struct member likely outside of __struct_group()"); + /* See MS-FSCC 2.4.34 */ struct smb2_file_network_open_info { struct_group_attr(network_open_info, __packed, @@ -94,6 +323,37 @@ struct smb2_file_network_open_info { __le32 Reserved; } __packed; /* level 34 Query also similar returned in close rsp and open = rsp */ =20 +/* See MS-FSCC 2.4.42.2 */ +struct smb2_file_rename_info { /* encoding of request for level 10 */ + /* New members MUST be added within the struct_group() macro below. */ + __struct_group(smb2_file_rename_info_hdr, __hdr, __packed, + __u8 ReplaceIfExists; /* 1 =3D replace existing target with new */ + /* 0 =3D fail if target already exists */ + __u8 Reserved[7]; + __u64 RootDirectory; /* MBZ for network operations (why says spec?) */ + __le32 FileNameLength; + ); + char FileName[]; /* New name to be assigned */ + /* padding - overall struct size must be >=3D 24 so filename + pad >=3D 6= */ +} __packed; /* level 10 Set */ +static_assert(offsetof(struct smb2_file_rename_info, FileName) =3D=3D size= of(struct smb2_file_rename_info_hdr), + "struct member likely outside of __struct_group()"); + +/* File System Information Classes */ +/* See MS-FSCC 2.5 */ +#define FS_VOLUME_INFORMATION 1 /* Query */ +#define FS_LABEL_INFORMATION 2 /* Set */ +#define FS_SIZE_INFORMATION 3 /* Query */ +#define FS_DEVICE_INFORMATION 4 /* Query */ +#define FS_ATTRIBUTE_INFORMATION 5 /* Query */ +#define FS_CONTROL_INFORMATION 6 /* Query, Set */ +#define FS_FULL_SIZE_INFORMATION 7 /* Query */ +#define FS_OBJECT_ID_INFORMATION 8 /* Query, Set */ +#define FS_DRIVER_PATH_INFORMATION 9 /* Query */ +#define FS_SECTOR_SIZE_INFORMATION 11 /* SMB3 or later. Query */ +/* See POSIX Extensions to MS-FSCC 2.3.1.1 */ +#define FS_POSIX_INFORMATION 100 /* SMB3.1.1 POSIX. Query */ + /* See MS-FSCC 2.5.1 */ #define MAX_FS_NAME_LEN 52 typedef struct { @@ -130,6 +390,46 @@ typedef struct { #define FILE_CASE_PRESERVED_NAMES 0x00000002 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001 =20 +/* + * File System Control Information + * See MS-FSCC 2.5.2 + */ +struct smb2_fs_control_info { + __le64 FreeSpaceStartFiltering; + __le64 FreeSpaceThreshold; + __le64 FreeSpaceStopFiltering; + __le64 DefaultQuotaThreshold; + __le64 DefaultQuotaLimit; + __le32 FileSystemControlFlags; + __le32 Padding; +} __packed; + +/* See MS-FSCC 2.5.4 */ +struct smb2_fs_full_size_info { + __le64 TotalAllocationUnits; + __le64 CallerAvailableAllocationUnits; + __le64 ActualAvailableAllocationUnits; + __le32 SectorsPerAllocationUnit; + __le32 BytesPerSector; +} __packed; + +/* See MS-FSCC 2.5.7 */ +#define SSINFO_FLAGS_ALIGNED_DEVICE 0x00000001 +#define SSINFO_FLAGS_PARTITION_ALIGNED_ON_DEVICE 0x00000002 +#define SSINFO_FLAGS_NO_SEEK_PENALTY 0x00000004 +#define SSINFO_FLAGS_TRIM_ENABLED 0x00000008 + +/* sector size info struct */ +struct smb3_fs_ss_info { + __le32 LogicalBytesPerSector; + __le32 PhysicalBytesPerSectorForAtomicity; + __le32 PhysicalBytesPerSectorForPerf; + __le32 FSEffPhysicalBytesPerSectorForAtomicity; + __le32 Flags; + __le32 ByteOffsetForSectorAlignment; + __le32 ByteOffsetForPartitionAlignment; +} __packed; + /* See MS-FSCC 2.5.8 */ typedef struct { __le64 TotalAllocationUnits; @@ -200,6 +500,22 @@ typedef struct { #define FILE_ATTRIBUTE_NO_SCRUB_DATA_LE cpu_to_le32(FILE_ATTRIBUTE_NO_SCR= UB_DATA) #define FILE_ATTRIBUTE_MASK_LE cpu_to_le32(FILE_ATTRIBUTE_MASK) =20 +/* + * SMB2 Notify Action Flags + * See MS-FSCC 2.7.1 + */ +#define FILE_ACTION_ADDED 0x00000001 +#define FILE_ACTION_REMOVED 0x00000002 +#define FILE_ACTION_MODIFIED 0x00000003 +#define FILE_ACTION_RENAMED_OLD_NAME 0x00000004 +#define FILE_ACTION_RENAMED_NEW_NAME 0x00000005 +#define FILE_ACTION_ADDED_STREAM 0x00000006 +#define FILE_ACTION_REMOVED_STREAM 0x00000007 +#define FILE_ACTION_MODIFIED_STREAM 0x00000008 +#define FILE_ACTION_REMOVED_BY_DELETE 0x00000009 +#define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A +#define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B + /* * Response contains array of the following structures * See MS-FSCC 2.7.1 diff --git a/fs/smb/common/smb2pdu.h b/fs/smb/common/smb2pdu.h index 5dfdf9ec11c7..9a0685902233 100644 --- a/fs/smb/common/smb2pdu.h +++ b/fs/smb/common/smb2pdu.h @@ -1003,22 +1003,6 @@ struct smb2_set_info_rsp { #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800 =20 -/* - * SMB2 Notify Action Flags - * See MS-FSCC 2.7.1 - */ -#define FILE_ACTION_ADDED 0x00000001 -#define FILE_ACTION_REMOVED 0x00000002 -#define FILE_ACTION_MODIFIED 0x00000003 -#define FILE_ACTION_RENAMED_OLD_NAME 0x00000004 -#define FILE_ACTION_RENAMED_NEW_NAME 0x00000005 -#define FILE_ACTION_ADDED_STREAM 0x00000006 -#define FILE_ACTION_REMOVED_STREAM 0x00000007 -#define FILE_ACTION_MODIFIED_STREAM 0x00000008 -#define FILE_ACTION_REMOVED_BY_DELETE 0x00000009 -#define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A -#define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B - /* See MS-SMB2 2.2.35 */ struct smb2_change_notify_req { struct smb2_hdr hdr; @@ -1495,105 +1479,6 @@ struct network_interface_info_ioctl_rsp { }; } __packed; =20 -/* this goes in the ioctl buffer when doing FSCTL_SET_ZERO_DATA */ -struct file_zero_data_information { - __le64 FileOffset; - __le64 BeyondFinalZero; -} __packed; - -/* See MS-FSCC 2.3.7 */ -struct duplicate_extents_to_file { - __u64 PersistentFileHandle; /* source file handle, opaque endianness */ - __u64 VolatileFileHandle; - __le64 SourceFileOffset; - __le64 TargetFileOffset; - __le64 ByteCount; /* Bytes to be copied */ -} __packed; - -/* See MS-FSCC 2.3.9 */ -#define DUPLICATE_EXTENTS_DATA_EX_SOURCE_ATOMIC 0x00000001 -struct duplicate_extents_to_file_ex { - __le64 StructureSize; /* MUST be set to 0x30 */ - __u64 PersistentFileHandle; /* source file handle, opaque endianness */ - __u64 VolatileFileHandle; - __le64 SourceFileOffset; - __le64 TargetFileOffset; - __le64 ByteCount; /* Bytes to be copied */ - __le32 Flags; - __le32 Reserved; -} __packed; - - -/* See MS-FSCC 2.3.20 */ -struct fsctl_get_integrity_information_rsp { - __le16 ChecksumAlgorithm; - __le16 Reserved; - __le32 Flags; - __le32 ChecksumChunkSizeInBytes; - __le32 ClusterSizeInBytes; -} __packed; - -/* See MS-FSCC 2.3.55 */ -struct fsctl_query_file_regions_req { - __le64 FileOffset; - __le64 Length; - __le32 DesiredUsage; - __le32 Reserved; -} __packed; - -/* DesiredUsage flags see MS-FSCC 2.3.56.1 */ -#define FILE_USAGE_INVALID_RANGE 0x00000000 -#define FILE_USAGE_VALID_CACHED_DATA 0x00000001 -#define FILE_USAGE_NONCACHED_DATA 0x00000002 - -struct file_region_info { - __le64 FileOffset; - __le64 Length; - __le32 DesiredUsage; - __le32 Reserved; -} __packed; - -/* See MS-FSCC 2.3.56 */ -struct fsctl_query_file_region_rsp { - __le32 Flags; - __le32 TotalRegionEntryCount; - __le32 RegionEntryCount; - __u32 Reserved; - struct file_region_info Regions[]; -} __packed; - -/* See MS-FSCC 2.3.58 */ -struct fsctl_query_on_disk_vol_info_rsp { - __le64 DirectoryCount; - __le64 FileCount; - __le16 FsFormatMajVersion; - __le16 FsFormatMinVersion; - __u8 FsFormatName[24]; - __le64 FormatTime; - __le64 LastUpdateTime; - __u8 CopyrightInfo[68]; - __u8 AbstractInfo[68]; - __u8 FormatImplInfo[68]; - __u8 LastModifyImplInfo[68]; -} __packed; - -/* See MS-FSCC 2.3.73 */ -struct fsctl_set_integrity_information_req { - __le16 ChecksumAlgorithm; - __le16 Reserved; - __le32 Flags; -} __packed; - -/* See MS-FSCC 2.3.75 */ -struct fsctl_set_integrity_info_ex_req { - __u8 EnableIntegrity; - __u8 KeepState; - __u16 Reserved; - __le32 Flags; - __u8 Version; - __u8 Reserved2[7]; -} __packed; - /* Integrity ChecksumAlgorithm choices for above */ #define CHECKSUM_TYPE_NONE 0x0000 #define CHECKSUM_TYPE_CRC64 0x0002 @@ -1602,72 +1487,6 @@ struct fsctl_set_integrity_info_ex_req { /* Integrity flags for above */ #define FSCTL_INTEGRITY_FLAG_CHECKSUM_ENFORCEMENT_OFF 0x00000001 =20 -/* Reparse structures - see MS-FSCC 2.1.2 */ - -/* struct fsctl_reparse_info_req is empty, only response structs (see belo= w) */ -struct reparse_data_buffer { - __le32 ReparseTag; - __le16 ReparseDataLength; - __u16 Reserved; - __u8 DataBuffer[]; /* Variable Length */ -} __packed; - -struct reparse_guid_data_buffer { - __le32 ReparseTag; - __le16 ReparseDataLength; - __u16 Reserved; - __u8 ReparseGuid[16]; - __u8 DataBuffer[]; /* Variable Length */ -} __packed; - -struct reparse_mount_point_data_buffer { - __le32 ReparseTag; - __le16 ReparseDataLength; - __u16 Reserved; - __le16 SubstituteNameOffset; - __le16 SubstituteNameLength; - __le16 PrintNameOffset; - __le16 PrintNameLength; - __u8 PathBuffer[]; /* Variable Length */ -} __packed; - -#define SYMLINK_FLAG_RELATIVE 0x00000001 - -struct reparse_symlink_data_buffer { - __le32 ReparseTag; - __le16 ReparseDataLength; - __u16 Reserved; - __le16 SubstituteNameOffset; - __le16 SubstituteNameLength; - __le16 PrintNameOffset; - __le16 PrintNameLength; - __le32 Flags; - __u8 PathBuffer[]; /* Variable Length */ -} __packed; - -/* For IO_REPARSE_TAG_NFS - see MS-FSCC 2.1.2.6 */ -#define NFS_SPECFILE_LNK 0x00000000014B4E4C -#define NFS_SPECFILE_CHR 0x0000000000524843 -#define NFS_SPECFILE_BLK 0x00000000004B4C42 -#define NFS_SPECFILE_FIFO 0x000000004F464946 -#define NFS_SPECFILE_SOCK 0x000000004B434F53 -struct reparse_nfs_data_buffer { - __le32 ReparseTag; - __le16 ReparseDataLength; - __u16 Reserved; - __le64 InodeType; /* NFS_SPECFILE_* */ - __u8 DataBuffer[]; -} __packed; - -/* For IO_REPARSE_TAG_LX_SYMLINK - see MS-FSCC 2.1.2.7 */ -struct reparse_wsl_symlink_data_buffer { - __le32 ReparseTag; - __le16 ReparseDataLength; - __u16 Reserved; - __le32 Version; /* Always 2 */ - __u8 Target[]; /* Variable Length UTF-8 string without nul-term */ -} __packed; - struct validate_negotiate_info_req { __le32 Capabilities; __u8 Guid[SMB2_CLIENT_GUID_SIZE]; @@ -1787,84 +1606,6 @@ struct smb2_query_info_rsp { __u8 Buffer[]; } __packed; =20 -/* - * PDU query infolevel structure definitions - */ - -/* See MS-FSCC 2.3.52 */ -struct file_allocated_range_buffer { - __le64 file_offset; - __le64 length; -} __packed; - -struct smb2_file_internal_info { - __le64 IndexNumber; -} __packed; /* level 6 Query */ - -struct smb2_file_rename_info { /* encoding of request for level 10 */ - /* New members MUST be added within the struct_group() macro below. */ - __struct_group(smb2_file_rename_info_hdr, __hdr, __packed, - __u8 ReplaceIfExists; /* 1 =3D replace existing target with new */ - /* 0 =3D fail if target already exists */ - __u8 Reserved[7]; - __u64 RootDirectory; /* MBZ for network operations (why says spec?) */ - __le32 FileNameLength; - ); - char FileName[]; /* New name to be assigned */ - /* padding - overall struct size must be >=3D 24 so filename + pad >=3D 6= */ -} __packed; /* level 10 Set */ -static_assert(offsetof(struct smb2_file_rename_info, FileName) =3D=3D size= of(struct smb2_file_rename_info_hdr), - "struct member likely outside of __struct_group()"); - -struct smb2_file_link_info { /* encoding of request for level 11 */ - /* New members MUST be added within the struct_group() macro below. */ - __struct_group(smb2_file_link_info_hdr, __hdr, __packed, - __u8 ReplaceIfExists; /* 1 =3D replace existing link with new */ - /* 0 =3D fail if link already exists */ - __u8 Reserved[7]; - __u64 RootDirectory; /* MBZ for network operations (why says spec?) */ - __le32 FileNameLength; - ); - char FileName[]; /* Name to be assigned to new link */ -} __packed; /* level 11 Set */ -static_assert(offsetof(struct smb2_file_link_info, FileName) =3D=3D sizeof= (struct smb2_file_link_info_hdr), - "struct member likely outside of __struct_group()"); - -/* - * This level 18, although with struct with same name is different from ci= fs - * level 0x107. Level 0x107 has an extra u64 between AccessFlags and - * CurrentByteOffset. - */ -struct smb2_file_all_info { /* data block encoding of response to level 18= */ - __le64 CreationTime; /* Beginning of FILE_BASIC_INFO equivalent */ - __le64 LastAccessTime; - __le64 LastWriteTime; - __le64 ChangeTime; - __le32 Attributes; - __u32 Pad1; /* End of FILE_BASIC_INFO_INFO equivalent */ - __le64 AllocationSize; /* Beginning of FILE_STANDARD_INFO equivalent */ - __le64 EndOfFile; /* size ie offset to first free byte in file */ - __le32 NumberOfLinks; /* hard links */ - __u8 DeletePending; - __u8 Directory; - __u16 Pad2; /* End of FILE_STANDARD_INFO equivalent */ - __le64 IndexNumber; - __le32 EASize; - __le32 AccessFlags; - __le64 CurrentByteOffset; - __le32 Mode; - __le32 AlignmentRequirement; - __le32 FileNameLength; - union { - char __pad; /* Legacy structure padding */ - DECLARE_FLEX_ARRAY(char, FileName); - }; -} __packed; /* level 18 Query */ - -struct smb2_file_eof_info { /* encoding of request for level 10 */ - __le64 EndOfFile; /* new end of file value */ -} __packed; /* level 20 Set */ - /* Level 100 query info */ struct smb311_posix_qinfo { __le64 CreationTime; @@ -1890,54 +1631,6 @@ struct smb311_posix_qinfo { */ } __packed; =20 -/* File System Information Classes */ -#define FS_VOLUME_INFORMATION 1 /* Query */ -#define FS_LABEL_INFORMATION 2 /* Set */ -#define FS_SIZE_INFORMATION 3 /* Query */ -#define FS_DEVICE_INFORMATION 4 /* Query */ -#define FS_ATTRIBUTE_INFORMATION 5 /* Query */ -#define FS_CONTROL_INFORMATION 6 /* Query, Set */ -#define FS_FULL_SIZE_INFORMATION 7 /* Query */ -#define FS_OBJECT_ID_INFORMATION 8 /* Query, Set */ -#define FS_DRIVER_PATH_INFORMATION 9 /* Query */ -#define FS_SECTOR_SIZE_INFORMATION 11 /* SMB3 or later. Query */ -#define FS_POSIX_INFORMATION 100 /* SMB3.1.1 POSIX. Query */ - -struct smb2_fs_full_size_info { - __le64 TotalAllocationUnits; - __le64 CallerAvailableAllocationUnits; - __le64 ActualAvailableAllocationUnits; - __le32 SectorsPerAllocationUnit; - __le32 BytesPerSector; -} __packed; - -#define SSINFO_FLAGS_ALIGNED_DEVICE 0x00000001 -#define SSINFO_FLAGS_PARTITION_ALIGNED_ON_DEVICE 0x00000002 -#define SSINFO_FLAGS_NO_SEEK_PENALTY 0x00000004 -#define SSINFO_FLAGS_TRIM_ENABLED 0x00000008 - -/* sector size info struct */ -struct smb3_fs_ss_info { - __le32 LogicalBytesPerSector; - __le32 PhysicalBytesPerSectorForAtomicity; - __le32 PhysicalBytesPerSectorForPerf; - __le32 FSEffPhysicalBytesPerSectorForAtomicity; - __le32 Flags; - __le32 ByteOffsetForSectorAlignment; - __le32 ByteOffsetForPartitionAlignment; -} __packed; - -/* File System Control Information */ -struct smb2_fs_control_info { - __le64 FreeSpaceStartFiltering; - __le64 FreeSpaceThreshold; - __le64 FreeSpaceStopFiltering; - __le64 DefaultQuotaThreshold; - __le64 DefaultQuotaLimit; - __le32 FileSystemControlFlags; - __le32 Padding; -} __packed; - /* See MS-SMB2 2.2.23 through 2.2.25 */ struct smb2_oplock_break { struct smb2_hdr hdr; --=20 2.43.0 From nobody Tue Dec 16 16:35:19 2025 Received: from out-178.mta0.migadu.com (out-178.mta0.migadu.com [91.218.175.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1A755287503 for ; Thu, 11 Dec 2025 14:33:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765463641; cv=none; b=qS31IxhCLnFk57K+LnUcoUUt9SY9XYuioVGcV873oZuZl/hvEf72GLEm6r43unfkfxqz75PrAtuPNa7T60hR8raNxhHTz0hLUs891yJlb8w7oqPkdN7MStxNaXMEUTUJqXaEoqDkuo7tz8oXgxoOJuX6kthsLsd91mVTH3a2DUM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765463641; c=relaxed/simple; bh=XOuSJQyYqIGcE79QSyKPELFt53248Al3LYainA5CQN0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bveGQ8E+oE03wBlNzi2oq6nz/uoVn9w+oYOUKlGGpYBlWPk6c/pGYNTjS/V/vsb8W/6WQ3w1xmf35DCG+qNLkIYNGQqP3xFsgRzS5ukULY2Yh+yBVRt4XbG4/029kcHY6GSBJdX2+yCB69NIe6Jj4EzQf0pHj8mSJJoN/SVvOz0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=gyANQZ01; arc=none smtp.client-ip=91.218.175.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="gyANQZ01" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1765463637; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=DUaM8R4HFwegycxKHXiuzYrU6BKgkAd9rH4gJamrx1c=; b=gyANQZ01mdloBvm4+xZ23HtflZEwH2nSuFk+Ol4724gZxjCYGRBIjT6LZwdGMb4d0Rf7WR VauqunKilWXURE2l2LbiaDeSM040YjG63CS3beoPEeXgrRwrNS4wwpBagIQ4kKB0JIIFXS tTRmAOupx8gnXA+K4c+R9c7s/xFk5+0= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ZhangGuoDong , ChenXiaoSong Subject: [PATCH v2 6/7] smb: introduce struct create_posix_ctxt_rsp Date: Thu, 11 Dec 2025 22:32:27 +0800 Message-ID: <20251211143228.172470-7-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251211143228.172470-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251211143228.172470-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ZhangGuoDong Modify the following places: - introduce new struct create_posix_ctxt_rsp - some fields in "struct create_posix_rsp" -> "struct create_posix_ctxt_r= sp" - create_posix_rsp_buf(): offsetof(..., nlink) -> offsetof(..., ctxt_rsp) Co-developed-by: ChenXiaoSong Signed-off-by: ChenXiaoSong Signed-off-by: ZhangGuoDong --- fs/smb/client/smb2pdu.c | 9 +++++---- fs/smb/client/smb2pdu.h | 6 ++---- fs/smb/common/smb2pdu.h | 17 +++++++++++++++++ fs/smb/server/oplock.c | 8 ++++---- fs/smb/server/smb2pdu.h | 6 ++---- 5 files changed, 30 insertions(+), 16 deletions(-) diff --git a/fs/smb/client/smb2pdu.c b/fs/smb/client/smb2pdu.c index 5d57c895ca37..b532eb2026ae 100644 --- a/fs/smb/client/smb2pdu.c +++ b/fs/smb/client/smb2pdu.c @@ -2362,9 +2362,9 @@ parse_posix_ctxt(struct create_context *cc, struct sm= b2_file_all_info *info, =20 memset(posix, 0, sizeof(*posix)); =20 - posix->nlink =3D le32_to_cpu(*(__le32 *)(beg + 0)); - posix->reparse_tag =3D le32_to_cpu(*(__le32 *)(beg + 4)); - posix->mode =3D le32_to_cpu(*(__le32 *)(beg + 8)); + posix->ctxt_rsp.nlink =3D le32_to_cpu(*(__le32 *)(beg + 0)); + posix->ctxt_rsp.reparse_tag =3D le32_to_cpu(*(__le32 *)(beg + 4)); + posix->ctxt_rsp.mode =3D le32_to_cpu(*(__le32 *)(beg + 8)); =20 sid =3D beg + 12; sid_len =3D posix_info_sid_size(sid, end); @@ -2383,7 +2383,8 @@ parse_posix_ctxt(struct create_context *cc, struct sm= b2_file_all_info *info, memcpy(&posix->group, sid, sid_len); =20 cifs_dbg(FYI, "nlink=3D%d mode=3D%o reparse_tag=3D%x\n", - posix->nlink, posix->mode, posix->reparse_tag); + posix->ctxt_rsp.nlink, posix->ctxt_rsp.mode, + posix->ctxt_rsp.reparse_tag); } =20 int smb2_parse_contexts(struct TCP_Server_Info *server, diff --git a/fs/smb/client/smb2pdu.h b/fs/smb/client/smb2pdu.h index 78bb99f29d38..4928fb620233 100644 --- a/fs/smb/client/smb2pdu.h +++ b/fs/smb/client/smb2pdu.h @@ -251,11 +251,9 @@ struct smb2_file_id_extd_directory_info { =20 extern char smb2_padding[7]; =20 -/* equivalent of the contents of SMB3.1.1 POSIX open context response */ +/* See POSIX-SMB2 2.2.14.2.16 */ struct create_posix_rsp { - u32 nlink; - u32 reparse_tag; - u32 mode; + struct create_posix_ctxt_rsp ctxt_rsp; struct smb_sid owner; /* var-sized on the wire */ struct smb_sid group; /* var-sized on the wire */ } __packed; diff --git a/fs/smb/common/smb2pdu.h b/fs/smb/common/smb2pdu.h index 9a0685902233..c46b15e9a2d5 100644 --- a/fs/smb/common/smb2pdu.h +++ b/fs/smb/common/smb2pdu.h @@ -1771,4 +1771,21 @@ struct smb2_lease_ack { #define SET_MINIMUM_RIGHTS (FILE_READ_EA | FILE_READ_ATTRIBUTES \ | READ_CONTROL | SYNCHRONIZE) =20 +/* + * [POSIX-SMB2] SMB3 POSIX Extensions + * Link: https://gitlab.com/samba-team/smb3-posix-spec/-/blob/master/smb3_= posix_extensions.md + */ + +/* + * SMB2_CREATE_POSIX_CONTEXT Response + * See POSIX-SMB2 2.2.14.2.16 + */ +struct create_posix_ctxt_rsp { + __le32 nlink; + __le32 reparse_tag; + __le32 mode; + // var sized owner SID + // var sized group SID +} __packed; + #endif /* _COMMON_SMB2PDU_H */ diff --git a/fs/smb/server/oplock.c b/fs/smb/server/oplock.c index 1f07ebf431d7..8658402ff893 100644 --- a/fs/smb/server/oplock.c +++ b/fs/smb/server/oplock.c @@ -1703,7 +1703,7 @@ void create_posix_rsp_buf(char *cc, struct ksmbd_file= *fp) buf =3D (struct create_posix_rsp *)cc; memset(buf, 0, sizeof(struct create_posix_rsp)); buf->ccontext.DataOffset =3D cpu_to_le16(offsetof - (struct create_posix_rsp, nlink)); + (struct create_posix_rsp, ctxt_rsp)); /* * DataLength =3D nlink(4) + reparse_tag(4) + mode(4) + * domain sid(28) + unix group sid(16). @@ -1730,9 +1730,9 @@ void create_posix_rsp_buf(char *cc, struct ksmbd_file= *fp) buf->Name[14] =3D 0xCD; buf->Name[15] =3D 0x7C; =20 - buf->nlink =3D cpu_to_le32(inode->i_nlink); - buf->reparse_tag =3D cpu_to_le32(fp->volatile_id); - buf->mode =3D cpu_to_le32(inode->i_mode & 0777); + buf->ctxt_rsp.nlink =3D cpu_to_le32(inode->i_nlink); + buf->ctxt_rsp.reparse_tag =3D cpu_to_le32(fp->volatile_id); + buf->ctxt_rsp.mode =3D cpu_to_le32(inode->i_mode & 0777); /* * SidBuffer(44) contain two sids(Domain sid(28), UNIX group sid(16)). * Domain sid(28) =3D revision(1) + num_subauth(1) + authority(6) + diff --git a/fs/smb/server/smb2pdu.h b/fs/smb/server/smb2pdu.h index 66cdc8e4a648..09311a9eb1de 100644 --- a/fs/smb/server/smb2pdu.h +++ b/fs/smb/server/smb2pdu.h @@ -83,13 +83,11 @@ struct create_durable_rsp { } Data; } __packed; =20 -/* equivalent of the contents of SMB3.1.1 POSIX open context response */ +/* See POSIX-SMB2 2.2.14.2.16 */ struct create_posix_rsp { struct create_context_hdr ccontext; __u8 Name[16]; - __le32 nlink; - __le32 reparse_tag; - __le32 mode; + struct create_posix_ctxt_rsp ctxt_rsp; /* SidBuffer contain two sids(Domain sid(28), UNIX group sid(16)) */ u8 SidBuffer[44]; } __packed; --=20 2.43.0 From nobody Tue Dec 16 16:35:19 2025 Received: from out-174.mta0.migadu.com (out-174.mta0.migadu.com [91.218.175.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 691C02D3732 for ; Thu, 11 Dec 2025 14:34:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765463647; cv=none; b=gr/4GK8OIh9bKYjQ5jMc+22INp+/87L2OBhRdW6SZgKz/rRVF4x5sYNSk1kCktRDQhPN6ezkQWOui9tsvVDLBwwJ2DxomfM3YeMxsDR0l7Sf3jcv+xdXCk6pUJz1HmvQ4tBIFHjJPM0x2mKmzf1rtmvcFd6NZ4Dsq4+QRo2YJqg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765463647; c=relaxed/simple; bh=1rZUeHWWMYk8uM5B4DlpWta4YBcXE5YhE9fH+hNzK1U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Br4Zi6wRGGsuoSHFOjfRUtwjpoklMUHCDv+gJEP5kZ13LPx5+JExgPqmgbajTwrvMEz0nHkXEeUZCM8VrOE9hfGBivH03JgxgauNuOBjpALwBFCioyZY36kZyNALu9JFVrPo8AqTzHOOe9BSO73WwzYPRdsItQw4BFdML8oDvNI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=jHUTIbKu; arc=none smtp.client-ip=91.218.175.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="jHUTIbKu" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1765463639; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=IyOmR4T4qVq5Q2mfZc/53rp5C6u73fZwGWuH12xq5/s=; b=jHUTIbKuHBGVAc0haE1wj1yzJWaNnSnrsNJ/b1GxdJQhD3evn1kDBMVb2S8idubcFioJav 8mWJ4xipFOpDj7Y169VuXb2TQme7l85ioo730maa2G/+ZJ0SNCsIB27KYFPIkh7WcJS+V3 sZRqePeyjC/nE1xo9cMzV4c0MhWqBuM= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ZhangGuoDong , ChenXiaoSong Subject: [PATCH v2 7/7] smb: introduce struct file_posix_info Date: Thu, 11 Dec 2025 22:32:28 +0800 Message-ID: <20251211143228.172470-8-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251211143228.172470-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251211143228.172470-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ZhangGuoDong Modify the following places: - introduce new struct file_posix_info - some fields in "struct smb311_posix_qinfo" -> "struct file_posix_info" - some fields in "struct smb2_posix_info" -> "struct file_posix_info" Co-developed-by: ChenXiaoSong Signed-off-by: ChenXiaoSong Signed-off-by: ZhangGuoDong --- fs/smb/client/inode.c | 22 ++++++------ fs/smb/client/readdir.c | 28 ++++++++-------- fs/smb/client/reparse.h | 4 +-- fs/smb/client/smb2pdu.h | 15 +-------- fs/smb/common/fscc.h | 43 +++++++++++++++++++++++- fs/smb/common/smb2pdu.h | 25 -------------- fs/smb/server/smb2pdu.c | 74 ++++++++++++++++++++--------------------- fs/smb/server/smb2pdu.h | 21 +----------- 8 files changed, 108 insertions(+), 124 deletions(-) diff --git a/fs/smb/client/inode.c b/fs/smb/client/inode.c index f9ee95953fa4..838f437654c7 100644 --- a/fs/smb/client/inode.c +++ b/fs/smb/client/inode.c @@ -841,16 +841,16 @@ static void smb311_posix_info_to_fattr(struct cifs_fa= ttr *fattr, memset(fattr, 0, sizeof(*fattr)); =20 /* no fattr->flags to set */ - fattr->cf_cifsattrs =3D le32_to_cpu(info->DosAttributes); - fattr->cf_uniqueid =3D le64_to_cpu(info->Inode); + fattr->cf_cifsattrs =3D le32_to_cpu(info->fpinfo.DosAttributes); + fattr->cf_uniqueid =3D le64_to_cpu(info->fpinfo.Inode); =20 - if (info->LastAccessTime) - fattr->cf_atime =3D cifs_NTtimeToUnix(info->LastAccessTime); + if (info->fpinfo.LastAccessTime) + fattr->cf_atime =3D cifs_NTtimeToUnix(info->fpinfo.LastAccessTime); else ktime_get_coarse_real_ts64(&fattr->cf_atime); =20 - fattr->cf_ctime =3D cifs_NTtimeToUnix(info->ChangeTime); - fattr->cf_mtime =3D cifs_NTtimeToUnix(info->LastWriteTime); + fattr->cf_ctime =3D cifs_NTtimeToUnix(info->fpinfo.ChangeTime); + fattr->cf_mtime =3D cifs_NTtimeToUnix(info->fpinfo.LastWriteTime); =20 if (data->adjust_tz) { fattr->cf_ctime.tv_sec +=3D tcon->ses->server->timeAdj; @@ -861,11 +861,11 @@ static void smb311_posix_info_to_fattr(struct cifs_fa= ttr *fattr, * The srv fs device id is overridden on network mount so setting * @fattr->cf_rdev isn't needed here. */ - fattr->cf_eof =3D le64_to_cpu(info->EndOfFile); - fattr->cf_bytes =3D le64_to_cpu(info->AllocationSize); - fattr->cf_createtime =3D le64_to_cpu(info->CreationTime); - fattr->cf_nlink =3D le32_to_cpu(info->HardLinks); - fattr->cf_mode =3D wire_mode_to_posix(le32_to_cpu(info->Mode), + fattr->cf_eof =3D le64_to_cpu(info->fpinfo.EndOfFile); + fattr->cf_bytes =3D le64_to_cpu(info->fpinfo.AllocationSize); + fattr->cf_createtime =3D le64_to_cpu(info->fpinfo.CreationTime); + fattr->cf_nlink =3D le32_to_cpu(info->fpinfo.HardLinks); + fattr->cf_mode =3D wire_mode_to_posix(le32_to_cpu(info->fpinfo.Mode), fattr->cf_cifsattrs & ATTR_DIRECTORY); =20 if (cifs_open_data_reparse(data) && diff --git a/fs/smb/client/readdir.c b/fs/smb/client/readdir.c index 6844f1dc3921..5296e15e262b 100644 --- a/fs/smb/client/readdir.c +++ b/fs/smb/client/readdir.c @@ -247,22 +247,22 @@ cifs_posix_to_fattr(struct cifs_fattr *fattr, struct = smb2_posix_info *info, posix_info_parse(info, NULL, &parsed); =20 memset(fattr, 0, sizeof(*fattr)); - fattr->cf_uniqueid =3D le64_to_cpu(info->Inode); - fattr->cf_bytes =3D le64_to_cpu(info->AllocationSize); - fattr->cf_eof =3D le64_to_cpu(info->EndOfFile); + fattr->cf_uniqueid =3D le64_to_cpu(info->fpinfo.Inode); + fattr->cf_bytes =3D le64_to_cpu(info->fpinfo.AllocationSize); + fattr->cf_eof =3D le64_to_cpu(info->fpinfo.EndOfFile); =20 - fattr->cf_atime =3D cifs_NTtimeToUnix(info->LastAccessTime); - fattr->cf_mtime =3D cifs_NTtimeToUnix(info->LastWriteTime); - fattr->cf_ctime =3D cifs_NTtimeToUnix(info->CreationTime); + fattr->cf_atime =3D cifs_NTtimeToUnix(info->fpinfo.LastAccessTime); + fattr->cf_mtime =3D cifs_NTtimeToUnix(info->fpinfo.LastWriteTime); + fattr->cf_ctime =3D cifs_NTtimeToUnix(info->fpinfo.CreationTime); =20 - fattr->cf_nlink =3D le32_to_cpu(info->HardLinks); - fattr->cf_cifsattrs =3D le32_to_cpu(info->DosAttributes); + fattr->cf_nlink =3D le32_to_cpu(info->fpinfo.HardLinks); + fattr->cf_cifsattrs =3D le32_to_cpu(info->fpinfo.DosAttributes); =20 if (fattr->cf_cifsattrs & ATTR_REPARSE_POINT) - fattr->cf_cifstag =3D le32_to_cpu(info->ReparseTag); + fattr->cf_cifstag =3D le32_to_cpu(info->fpinfo.ReparseTag); =20 /* The Mode field in the response can now include the file type as well */ - fattr->cf_mode =3D wire_mode_to_posix(le32_to_cpu(info->Mode), + fattr->cf_mode =3D wire_mode_to_posix(le32_to_cpu(info->fpinfo.Mode), fattr->cf_cifsattrs & ATTR_DIRECTORY); fattr->cf_dtype =3D S_DT(fattr->cf_mode); =20 @@ -277,9 +277,9 @@ cifs_posix_to_fattr(struct cifs_fattr *fattr, struct sm= b2_posix_info *info, } =20 cifs_dbg(FYI, "posix fattr: dev %d, reparse %d, mode %o\n", - le32_to_cpu(info->DeviceId), - le32_to_cpu(info->ReparseTag), - le32_to_cpu(info->Mode)); + le32_to_cpu(info->fpinfo.DeviceId), + le32_to_cpu(info->fpinfo.ReparseTag), + le32_to_cpu(info->fpinfo.Mode)); =20 sid_to_id(cifs_sb, &parsed.owner, fattr, SIDOWNER); sid_to_id(cifs_sb, &parsed.group, fattr, SIDGROUP); @@ -516,7 +516,7 @@ static void cifs_fill_dirent_posix(struct cifs_dirent *= de, de->name =3D parsed.name; de->namelen =3D parsed.name_len; de->resume_key =3D info->Ignored; - de->ino =3D le64_to_cpu(info->Inode); + de->ino =3D le64_to_cpu(info->fpinfo.Inode); } =20 static void cifs_fill_dirent_unix(struct cifs_dirent *de, diff --git a/fs/smb/client/reparse.h b/fs/smb/client/reparse.h index 19caab2fd11e..fd7f14908075 100644 --- a/fs/smb/client/reparse.h +++ b/fs/smb/client/reparse.h @@ -105,10 +105,10 @@ static inline bool cifs_open_data_reparse(struct cifs= _open_info_data *data) if (data->contains_posix_file_info) { struct smb311_posix_qinfo *fi =3D &data->posix_fi; =20 - attrs =3D le32_to_cpu(fi->DosAttributes); + attrs =3D le32_to_cpu(fi->fpinfo.DosAttributes); if (data->reparse_point) { attrs |=3D ATTR_REPARSE_POINT; - fi->DosAttributes =3D cpu_to_le32(attrs); + fi->fpinfo.DosAttributes =3D cpu_to_le32(attrs); } =20 } else { diff --git a/fs/smb/client/smb2pdu.h b/fs/smb/client/smb2pdu.h index 4928fb620233..07ba081750fb 100644 --- a/fs/smb/client/smb2pdu.h +++ b/fs/smb/client/smb2pdu.h @@ -269,20 +269,7 @@ struct create_posix_rsp { struct smb2_posix_info { __le32 NextEntryOffset; __u32 Ignored; - __le64 CreationTime; - __le64 LastAccessTime; - __le64 LastWriteTime; - __le64 ChangeTime; - __le64 EndOfFile; - __le64 AllocationSize; - __le32 DosAttributes; - __le64 Inode; - __le32 DeviceId; - __le32 Zero; - /* beginning of POSIX Create Context Response */ - __le32 HardLinks; - __le32 ReparseTag; - __le32 Mode; + struct file_posix_info fpinfo; /* * var sized owner SID * var sized group SID diff --git a/fs/smb/common/fscc.h b/fs/smb/common/fscc.h index 14688ab7ebd5..21752439f27e 100644 --- a/fs/smb/common/fscc.h +++ b/fs/smb/common/fscc.h @@ -528,9 +528,50 @@ struct file_notify_information { } __packed; =20 /* - * See POSIX Extensions to MS-FSCC 2.3.2.1 + * [POSIX-FSCC] POSIX Extensions to MS-FSCC * Link: https://gitlab.com/samba-team/smb3-posix-spec/-/blob/master/fscc_= posix_extensions.md */ + +/* + * This information class is used to query file posix information. + * See POSIX-FSCC 2.3.1.1 + */ +struct file_posix_info { + __le64 CreationTime; + __le64 LastAccessTime; + __le64 LastWriteTime; + __le64 ChangeTime; + __le64 EndOfFile; + __le64 AllocationSize; + __le32 DosAttributes; + __le64 Inode; + __le32 DeviceId; + __le32 Zero; + /* + * beginning of POSIX Create Context Response + * See POSIX-SMB2 2.2.14.2.16 + */ + __le32 HardLinks; + __le32 ReparseTag; + __le32 Mode; + // var sized owner SID + // var sized group SID + /* end of POSIX Create Context Response */ + // le32 filenamelength + // u8 filename[] +} __packed; + +/* Level 100 query info */ +struct smb311_posix_qinfo { + struct file_posix_info fpinfo; + u8 Sids[]; + /* + * le32 filenamelength + * u8 filename[] + */ +} __packed; + +/* See POSIX-FSCC 2.3.2.1 */ typedef struct { /* For undefined recommended transfer size return -1 in that field */ __le32 OptimalTransferSize; /* bsize on some os, iosize on other os */ diff --git a/fs/smb/common/smb2pdu.h b/fs/smb/common/smb2pdu.h index c46b15e9a2d5..098f147680c5 100644 --- a/fs/smb/common/smb2pdu.h +++ b/fs/smb/common/smb2pdu.h @@ -1606,31 +1606,6 @@ struct smb2_query_info_rsp { __u8 Buffer[]; } __packed; =20 -/* Level 100 query info */ -struct smb311_posix_qinfo { - __le64 CreationTime; - __le64 LastAccessTime; - __le64 LastWriteTime; - __le64 ChangeTime; - __le64 EndOfFile; - __le64 AllocationSize; - __le32 DosAttributes; - __le64 Inode; - __le32 DeviceId; - __le32 Zero; - /* beginning of POSIX Create Context Response */ - __le32 HardLinks; - __le32 ReparseTag; - __le32 Mode; - u8 Sids[]; - /* - * var sized owner SID - * var sized group SID - * le32 filenamelength - * u8 filename[] - */ -} __packed; - /* See MS-SMB2 2.2.23 through 2.2.25 */ struct smb2_oplock_break { struct smb2_hdr hdr; diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c index f58b212481e0..c1c99fabe190 100644 --- a/fs/smb/server/smb2pdu.c +++ b/fs/smb/server/smb2pdu.c @@ -4036,44 +4036,44 @@ static int smb2_populate_readdir_entry(struct ksmbd= _conn *conn, int info_level, =20 posix_info =3D (struct smb2_posix_info *)kstat; posix_info->Ignored =3D 0; - posix_info->CreationTime =3D cpu_to_le64(ksmbd_kstat->create_time); + posix_info->fpinfo.CreationTime =3D cpu_to_le64(ksmbd_kstat->create_time= ); time =3D ksmbd_UnixTimeToNT(ksmbd_kstat->kstat->ctime); - posix_info->ChangeTime =3D cpu_to_le64(time); + posix_info->fpinfo.ChangeTime =3D cpu_to_le64(time); time =3D ksmbd_UnixTimeToNT(ksmbd_kstat->kstat->atime); - posix_info->LastAccessTime =3D cpu_to_le64(time); + posix_info->fpinfo.LastAccessTime =3D cpu_to_le64(time); time =3D ksmbd_UnixTimeToNT(ksmbd_kstat->kstat->mtime); - posix_info->LastWriteTime =3D cpu_to_le64(time); - posix_info->EndOfFile =3D cpu_to_le64(ksmbd_kstat->kstat->size); - posix_info->AllocationSize =3D cpu_to_le64(ksmbd_kstat->kstat->blocks <<= 9); - posix_info->DeviceId =3D cpu_to_le32(ksmbd_kstat->kstat->rdev); - posix_info->HardLinks =3D cpu_to_le32(ksmbd_kstat->kstat->nlink); - posix_info->Mode =3D cpu_to_le32(ksmbd_kstat->kstat->mode & 0777); + posix_info->fpinfo.LastWriteTime =3D cpu_to_le64(time); + posix_info->fpinfo.EndOfFile =3D cpu_to_le64(ksmbd_kstat->kstat->size); + posix_info->fpinfo.AllocationSize =3D cpu_to_le64(ksmbd_kstat->kstat->bl= ocks << 9); + posix_info->fpinfo.DeviceId =3D cpu_to_le32(ksmbd_kstat->kstat->rdev); + posix_info->fpinfo.HardLinks =3D cpu_to_le32(ksmbd_kstat->kstat->nlink); + posix_info->fpinfo.Mode =3D cpu_to_le32(ksmbd_kstat->kstat->mode & 0777); switch (ksmbd_kstat->kstat->mode & S_IFMT) { case S_IFDIR: - posix_info->Mode |=3D cpu_to_le32(POSIX_TYPE_DIR << POSIX_FILETYPE_SHIF= T); + posix_info->fpinfo.Mode |=3D cpu_to_le32(POSIX_TYPE_DIR << POSIX_FILETY= PE_SHIFT); break; case S_IFLNK: - posix_info->Mode |=3D cpu_to_le32(POSIX_TYPE_SYMLINK << POSIX_FILETYPE_= SHIFT); + posix_info->fpinfo.Mode |=3D cpu_to_le32(POSIX_TYPE_SYMLINK << POSIX_FI= LETYPE_SHIFT); break; case S_IFCHR: - posix_info->Mode |=3D cpu_to_le32(POSIX_TYPE_CHARDEV << POSIX_FILETYPE_= SHIFT); + posix_info->fpinfo.Mode |=3D cpu_to_le32(POSIX_TYPE_CHARDEV << POSIX_FI= LETYPE_SHIFT); break; case S_IFBLK: - posix_info->Mode |=3D cpu_to_le32(POSIX_TYPE_BLKDEV << POSIX_FILETYPE_S= HIFT); + posix_info->fpinfo.Mode |=3D cpu_to_le32(POSIX_TYPE_BLKDEV << POSIX_FIL= ETYPE_SHIFT); break; case S_IFIFO: - posix_info->Mode |=3D cpu_to_le32(POSIX_TYPE_FIFO << POSIX_FILETYPE_SHI= FT); + posix_info->fpinfo.Mode |=3D cpu_to_le32(POSIX_TYPE_FIFO << POSIX_FILET= YPE_SHIFT); break; case S_IFSOCK: - posix_info->Mode |=3D cpu_to_le32(POSIX_TYPE_SOCKET << POSIX_FILETYPE_S= HIFT); + posix_info->fpinfo.Mode |=3D cpu_to_le32(POSIX_TYPE_SOCKET << POSIX_FIL= ETYPE_SHIFT); } =20 - posix_info->Inode =3D cpu_to_le64(ksmbd_kstat->kstat->ino); - posix_info->DosAttributes =3D + posix_info->fpinfo.Inode =3D cpu_to_le64(ksmbd_kstat->kstat->ino); + posix_info->fpinfo.DosAttributes =3D S_ISDIR(ksmbd_kstat->kstat->mode) ? FILE_ATTRIBUTE_DIRECTORY_LE : FILE_ATTRIBUTE_ARCHIVE_LE; if (d_info->hide_dot_file && d_info->name[0] =3D=3D '.') - posix_info->DosAttributes |=3D FILE_ATTRIBUTE_HIDDEN_LE; + posix_info->fpinfo.DosAttributes |=3D FILE_ATTRIBUTE_HIDDEN_LE; /* * SidBuffer(32) contain two sids(Domain sid(16), UNIX group sid(16)). * UNIX sid(16) =3D revision(1) + num_subauth(1) + authority(6) + @@ -5259,45 +5259,45 @@ static int find_file_posix_info(struct smb2_query_i= nfo_rsp *rsp, return ret; =20 file_info =3D (struct smb311_posix_qinfo *)rsp->Buffer; - file_info->CreationTime =3D cpu_to_le64(fp->create_time); + file_info->fpinfo.CreationTime =3D cpu_to_le64(fp->create_time); time =3D ksmbd_UnixTimeToNT(stat.atime); - file_info->LastAccessTime =3D cpu_to_le64(time); + file_info->fpinfo.LastAccessTime =3D cpu_to_le64(time); time =3D ksmbd_UnixTimeToNT(stat.mtime); - file_info->LastWriteTime =3D cpu_to_le64(time); + file_info->fpinfo.LastWriteTime =3D cpu_to_le64(time); time =3D ksmbd_UnixTimeToNT(stat.ctime); - file_info->ChangeTime =3D cpu_to_le64(time); - file_info->DosAttributes =3D fp->f_ci->m_fattr; - file_info->Inode =3D cpu_to_le64(stat.ino); + file_info->fpinfo.ChangeTime =3D cpu_to_le64(time); + file_info->fpinfo.DosAttributes =3D fp->f_ci->m_fattr; + file_info->fpinfo.Inode =3D cpu_to_le64(stat.ino); if (ksmbd_stream_fd(fp) =3D=3D false) { - file_info->EndOfFile =3D cpu_to_le64(stat.size); - file_info->AllocationSize =3D cpu_to_le64(stat.blocks << 9); + file_info->fpinfo.EndOfFile =3D cpu_to_le64(stat.size); + file_info->fpinfo.AllocationSize =3D cpu_to_le64(stat.blocks << 9); } else { - file_info->EndOfFile =3D cpu_to_le64(fp->stream.size); - file_info->AllocationSize =3D cpu_to_le64(fp->stream.size); + file_info->fpinfo.EndOfFile =3D cpu_to_le64(fp->stream.size); + file_info->fpinfo.AllocationSize =3D cpu_to_le64(fp->stream.size); } - file_info->HardLinks =3D cpu_to_le32(stat.nlink); - file_info->Mode =3D cpu_to_le32(stat.mode & 0777); + file_info->fpinfo.HardLinks =3D cpu_to_le32(stat.nlink); + file_info->fpinfo.Mode =3D cpu_to_le32(stat.mode & 0777); switch (stat.mode & S_IFMT) { case S_IFDIR: - file_info->Mode |=3D cpu_to_le32(POSIX_TYPE_DIR << POSIX_FILETYPE_SHIFT); + file_info->fpinfo.Mode |=3D cpu_to_le32(POSIX_TYPE_DIR << POSIX_FILETYPE= _SHIFT); break; case S_IFLNK: - file_info->Mode |=3D cpu_to_le32(POSIX_TYPE_SYMLINK << POSIX_FILETYPE_SH= IFT); + file_info->fpinfo.Mode |=3D cpu_to_le32(POSIX_TYPE_SYMLINK << POSIX_FILE= TYPE_SHIFT); break; case S_IFCHR: - file_info->Mode |=3D cpu_to_le32(POSIX_TYPE_CHARDEV << POSIX_FILETYPE_SH= IFT); + file_info->fpinfo.Mode |=3D cpu_to_le32(POSIX_TYPE_CHARDEV << POSIX_FILE= TYPE_SHIFT); break; case S_IFBLK: - file_info->Mode |=3D cpu_to_le32(POSIX_TYPE_BLKDEV << POSIX_FILETYPE_SHI= FT); + file_info->fpinfo.Mode |=3D cpu_to_le32(POSIX_TYPE_BLKDEV << POSIX_FILET= YPE_SHIFT); break; case S_IFIFO: - file_info->Mode |=3D cpu_to_le32(POSIX_TYPE_FIFO << POSIX_FILETYPE_SHIFT= ); + file_info->fpinfo.Mode |=3D cpu_to_le32(POSIX_TYPE_FIFO << POSIX_FILETYP= E_SHIFT); break; case S_IFSOCK: - file_info->Mode |=3D cpu_to_le32(POSIX_TYPE_SOCKET << POSIX_FILETYPE_SHI= FT); + file_info->fpinfo.Mode |=3D cpu_to_le32(POSIX_TYPE_SOCKET << POSIX_FILET= YPE_SHIFT); } =20 - file_info->DeviceId =3D cpu_to_le32(stat.rdev); + file_info->fpinfo.DeviceId =3D cpu_to_le32(stat.rdev); =20 /* * Sids(32) contain two sids(Domain sid(16), UNIX group sid(16)). diff --git a/fs/smb/server/smb2pdu.h b/fs/smb/server/smb2pdu.h index 09311a9eb1de..11737e1ac864 100644 --- a/fs/smb/server/smb2pdu.h +++ b/fs/smb/server/smb2pdu.h @@ -285,30 +285,11 @@ struct create_sd_buf_req { struct smb2_posix_info { __le32 NextEntryOffset; __u32 Ignored; - __le64 CreationTime; - __le64 LastAccessTime; - __le64 LastWriteTime; - __le64 ChangeTime; - __le64 EndOfFile; - __le64 AllocationSize; - __le32 DosAttributes; - __le64 Inode; - __le32 DeviceId; - __le32 Zero; - /* beginning of POSIX Create Context Response */ - __le32 HardLinks; - __le32 ReparseTag; - __le32 Mode; + struct file_posix_info fpinfo; /* SidBuffer contain two sids (UNIX user sid(16), UNIX group sid(16)) */ u8 SidBuffer[32]; __le32 name_len; u8 name[]; - /* - * var sized owner SID - * var sized group SID - * le32 filenamelength - * u8 filename[] - */ } __packed; =20 /* functions */ --=20 2.43.0