Linux kernel -stable discussions
 help / color / mirror / Atom feed
* [PATCH] Fix SMB311 posix special file creation to servers which do not advertise reparse support
@ 2025-07-20  2:26 Junhyeok Park
  0 siblings, 0 replies; 4+ messages in thread
From: Junhyeok Park @ 2025-07-20  2:26 UTC (permalink / raw)
  To: junttang; +Cc: Steve French, stable, Ralph Boehme, Paulo Alcantara

From: Steve French <stfrench@microsoft.com>

Some servers (including Samba), support the SMB3.1.1 POSIX Extensions (which use reparse
points for handling special files) but do not properly advertise file system attribute
FILE_SUPPORTS_REPARSE_POINTS.  Although we don't check for this attribute flag when
querying special file information, we do check it when creating special files which
causes them to fail unnecessarily.   If we have negotiated SMB3.1.1 POSIX Extensions
with the server we can expect the server to support creating special files via
reparse points, and even if the server fails the operation due to really forbidding
creating special files, then it should be no problem and is more likely to return a
more accurate rc in any case (e.g. EACCES instead of EOPNOTSUPP).

Allow creating special files as long as the server supports either reparse points
or the SMB3.1.1 POSIX Extensions (note that if the "sfu" mount option is specified
it uses a different way of storing special files that does not rely on reparse points).

Cc: <stable@vger.kernel.org>
Fixes: 6c06be908ca19 ("cifs: Check if server supports reparse points before using them")
Acked-by: Ralph Boehme <slow@samba.org>
Acked-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
---
 fs/smb/client/smb2inode.c | 3 ++-
 fs/smb/client/smb2ops.c   | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/fs/smb/client/smb2inode.c b/fs/smb/client/smb2inode.c
index 2a3e46b8e15a..a11a2a693c51 100644
--- a/fs/smb/client/smb2inode.c
+++ b/fs/smb/client/smb2inode.c
@@ -1346,7 +1346,8 @@ struct inode *smb2_get_reparse_inode(struct cifs_open_info_data *data,
 	 * empty object on the server.
 	 */
 	if (!(le32_to_cpu(tcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS))
-		return ERR_PTR(-EOPNOTSUPP);
+		if (!tcon->posix_extensions)
+			return ERR_PTR(-EOPNOTSUPP);
 
 	oparms = CIFS_OPARMS(cifs_sb, tcon, full_path,
 			     SYNCHRONIZE | DELETE |
diff --git a/fs/smb/client/smb2ops.c b/fs/smb/client/smb2ops.c
index cb659256d219..938a8a7c5d21 100644
--- a/fs/smb/client/smb2ops.c
+++ b/fs/smb/client/smb2ops.c
@@ -5260,7 +5260,8 @@ static int smb2_make_node(unsigned int xid, struct inode *inode,
 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL) {
 		rc = cifs_sfu_make_node(xid, inode, dentry, tcon,
 					full_path, mode, dev);
-	} else if (le32_to_cpu(tcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS) {
+	} else if ((le32_to_cpu(tcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS)
+		|| (tcon->posix_extensions)) {
 		rc = smb2_mknod_reparse(xid, inode, dentry, tcon,
 					full_path, mode, dev);
 	}
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH] Fix SMB311 posix special file creation to servers which do not advertise reparse support
@ 2025-07-20 20:32 Ahmet Eray Karadag
  2025-07-21  5:37 ` Greg KH
  2025-07-21 13:58 ` Sasha Levin
  0 siblings, 2 replies; 4+ messages in thread
From: Ahmet Eray Karadag @ 2025-07-20 20:32 UTC (permalink / raw)
  To: eraykrdg1; +Cc: Steve French, stable, Ralph Boehme, Paulo Alcantara

From: Steve French <stfrench@microsoft.com>

Some servers (including Samba), support the SMB3.1.1 POSIX Extensions (which use reparse
points for handling special files) but do not properly advertise file system attribute
FILE_SUPPORTS_REPARSE_POINTS.  Although we don't check for this attribute flag when
querying special file information, we do check it when creating special files which
causes them to fail unnecessarily.   If we have negotiated SMB3.1.1 POSIX Extensions
with the server we can expect the server to support creating special files via
reparse points, and even if the server fails the operation due to really forbidding
creating special files, then it should be no problem and is more likely to return a
more accurate rc in any case (e.g. EACCES instead of EOPNOTSUPP).

Allow creating special files as long as the server supports either reparse points
or the SMB3.1.1 POSIX Extensions (note that if the "sfu" mount option is specified
it uses a different way of storing special files that does not rely on reparse points).

Cc: <stable@vger.kernel.org>
Fixes: 6c06be908ca19 ("cifs: Check if server supports reparse points before using them")
Acked-by: Ralph Boehme <slow@samba.org>
Acked-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Ahmet Eray Karadag <eraykrdg1@gmail.com>
---
 fs/smb/client/smb2inode.c | 3 ++-
 fs/smb/client/smb2ops.c   | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/fs/smb/client/smb2inode.c b/fs/smb/client/smb2inode.c
index 2a3e46b8e15a..a11a2a693c51 100644
--- a/fs/smb/client/smb2inode.c
+++ b/fs/smb/client/smb2inode.c
@@ -1346,7 +1346,8 @@ struct inode *smb2_get_reparse_inode(struct cifs_open_info_data *data,
 	 * empty object on the server.
 	 */
 	if (!(le32_to_cpu(tcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS))
-		return ERR_PTR(-EOPNOTSUPP);
+		if (!tcon->posix_extensions)
+			return ERR_PTR(-EOPNOTSUPP);
 
 	oparms = CIFS_OPARMS(cifs_sb, tcon, full_path,
 			     SYNCHRONIZE | DELETE |
diff --git a/fs/smb/client/smb2ops.c b/fs/smb/client/smb2ops.c
index cb659256d219..938a8a7c5d21 100644
--- a/fs/smb/client/smb2ops.c
+++ b/fs/smb/client/smb2ops.c
@@ -5260,7 +5260,8 @@ static int smb2_make_node(unsigned int xid, struct inode *inode,
 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL) {
 		rc = cifs_sfu_make_node(xid, inode, dentry, tcon,
 					full_path, mode, dev);
-	} else if (le32_to_cpu(tcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS) {
+	} else if ((le32_to_cpu(tcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS)
+		|| (tcon->posix_extensions)) {
 		rc = smb2_mknod_reparse(xid, inode, dentry, tcon,
 					full_path, mode, dev);
 	}
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] Fix SMB311 posix special file creation to servers which do not advertise reparse support
  2025-07-20 20:32 [PATCH] Fix SMB311 posix special file creation to servers which do not advertise reparse support Ahmet Eray Karadag
@ 2025-07-21  5:37 ` Greg KH
  2025-07-21 13:58 ` Sasha Levin
  1 sibling, 0 replies; 4+ messages in thread
From: Greg KH @ 2025-07-21  5:37 UTC (permalink / raw)
  To: Ahmet Eray Karadag; +Cc: Steve French, stable, Ralph Boehme, Paulo Alcantara

On Sun, Jul 20, 2025 at 11:32:48PM +0300, Ahmet Eray Karadag wrote:
> From: Steve French <stfrench@microsoft.com>
> 
> Some servers (including Samba), support the SMB3.1.1 POSIX Extensions (which use reparse
> points for handling special files) but do not properly advertise file system attribute
> FILE_SUPPORTS_REPARSE_POINTS.  Although we don't check for this attribute flag when
> querying special file information, we do check it when creating special files which
> causes them to fail unnecessarily.   If we have negotiated SMB3.1.1 POSIX Extensions
> with the server we can expect the server to support creating special files via
> reparse points, and even if the server fails the operation due to really forbidding
> creating special files, then it should be no problem and is more likely to return a
> more accurate rc in any case (e.g. EACCES instead of EOPNOTSUPP).
> 
> Allow creating special files as long as the server supports either reparse points
> or the SMB3.1.1 POSIX Extensions (note that if the "sfu" mount option is specified
> it uses a different way of storing special files that does not rely on reparse points).
> 
> Cc: <stable@vger.kernel.org>
> Fixes: 6c06be908ca19 ("cifs: Check if server supports reparse points before using them")
> Acked-by: Ralph Boehme <slow@samba.org>
> Acked-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
> Signed-off-by: Steve French <stfrench@microsoft.com>
> Signed-off-by: Ahmet Eray Karadag <eraykrdg1@gmail.com>
> ---
>  fs/smb/client/smb2inode.c | 3 ++-
>  fs/smb/client/smb2ops.c   | 3 ++-
>  2 files changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/smb/client/smb2inode.c b/fs/smb/client/smb2inode.c
> index 2a3e46b8e15a..a11a2a693c51 100644
> --- a/fs/smb/client/smb2inode.c
> +++ b/fs/smb/client/smb2inode.c
> @@ -1346,7 +1346,8 @@ struct inode *smb2_get_reparse_inode(struct cifs_open_info_data *data,
>  	 * empty object on the server.
>  	 */
>  	if (!(le32_to_cpu(tcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS))
> -		return ERR_PTR(-EOPNOTSUPP);
> +		if (!tcon->posix_extensions)
> +			return ERR_PTR(-EOPNOTSUPP);
>  
>  	oparms = CIFS_OPARMS(cifs_sb, tcon, full_path,
>  			     SYNCHRONIZE | DELETE |
> diff --git a/fs/smb/client/smb2ops.c b/fs/smb/client/smb2ops.c
> index cb659256d219..938a8a7c5d21 100644
> --- a/fs/smb/client/smb2ops.c
> +++ b/fs/smb/client/smb2ops.c
> @@ -5260,7 +5260,8 @@ static int smb2_make_node(unsigned int xid, struct inode *inode,
>  	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL) {
>  		rc = cifs_sfu_make_node(xid, inode, dentry, tcon,
>  					full_path, mode, dev);
> -	} else if (le32_to_cpu(tcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS) {
> +	} else if ((le32_to_cpu(tcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS)
> +		|| (tcon->posix_extensions)) {
>  		rc = smb2_mknod_reparse(xid, inode, dentry, tcon,
>  					full_path, mode, dev);
>  	}
> -- 
> 2.34.1
> 
> 

<formletter>

This is not the correct way to submit patches for inclusion in the
stable kernel tree.  Please read:
    https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
for how to do this properly.

</formletter>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Fix SMB311 posix special file creation to servers which do not advertise reparse support
  2025-07-20 20:32 [PATCH] Fix SMB311 posix special file creation to servers which do not advertise reparse support Ahmet Eray Karadag
  2025-07-21  5:37 ` Greg KH
@ 2025-07-21 13:58 ` Sasha Levin
  1 sibling, 0 replies; 4+ messages in thread
From: Sasha Levin @ 2025-07-21 13:58 UTC (permalink / raw)
  To: stable, eraykrdg1; +Cc: Sasha Levin

[ Sasha's backport helper bot ]

Hi,

Summary of potential issues:
❌ Patch application failures detected
⚠️ Found matching upstream commit but patch is missing proper reference to it

Found matching upstream commit: 8767cb3fbd514c4cf85b4f516ca30388e846f540

WARNING: Author mismatch between patch and found commit:
Backport author: Ahmet Eray Karadag <eraykrdg1@gmail.com>
Commit author: Steve French <stfrench@microsoft.com>

Note: The patch differs from the upstream commit:
---
1:  8767cb3fbd51 ! 1:  db704f6b22b4 Fix SMB311 posix special file creation to servers which do not advertise reparse support
    @@ Commit message
         Acked-by: Ralph Boehme <slow@samba.org>
         Acked-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
         Signed-off-by: Steve French <stfrench@microsoft.com>
    +    Signed-off-by: Ahmet Eray Karadag <eraykrdg1@gmail.com>
     
      ## fs/smb/client/smb2inode.c ##
     @@ fs/smb/client/smb2inode.c: struct inode *smb2_get_reparse_inode(struct cifs_open_info_data *data,

---

Results of testing on various branches:

| Branch                    | Patch Apply | Build Test |
|---------------------------|-------------|------------|
| origin/linux-6.15.y       | Success     | Success    |
| origin/linux-6.12.y       | Failed      | N/A        |
| origin/linux-6.6.y        | Failed      | N/A        |
| origin/linux-6.1.y        | Failed      | N/A        |
| origin/linux-5.15.y       | Failed      | N/A        |
| origin/linux-5.10.y       | Failed      | N/A        |
| origin/linux-5.4.y        | Failed      | N/A        |

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-07-21 13:58 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-20 20:32 [PATCH] Fix SMB311 posix special file creation to servers which do not advertise reparse support Ahmet Eray Karadag
2025-07-21  5:37 ` Greg KH
2025-07-21 13:58 ` Sasha Levin
  -- strict thread matches above, loose matches on Subject: below --
2025-07-20  2:26 Junhyeok Park

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox