From: "Pali Rohár" <pali@kernel.org>
To: Steve French <sfrench@samba.org>,
Paulo Alcantara <pc@manguebit.org>,
Ronnie Sahlberg <ronniesahlberg@gmail.com>
Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH RESEND 09/11] cifs: Create native Window socket file compatible also with WSL subsystem
Date: Mon, 6 Jul 2026 20:48:17 +0200 [thread overview]
Message-ID: <20260706184819.22124-10-pali@kernel.org> (raw)
In-Reply-To: <20260706184819.22124-1-pali@kernel.org>
After creating a native socket via the IO_REPARSE_TAG_AF_UNIX reparse
point, try to set also the WSL EA $LXMOD.
This makes the native Win32 / NT socket file recognized also under
WSL subsystem. WSL subsystem uses same reparse point tag but requires also
to be EA $LXMOD set.
Fixes: 45a99d5d1173 ("cifs: Add support for creating native Windows sockets")
Signed-off-by: Pali Rohár <pali@kernel.org>
---
fs/smb/client/reparse.c | 30 ++++++++++++++++++++++++++++--
1 file changed, 28 insertions(+), 2 deletions(-)
diff --git a/fs/smb/client/reparse.c b/fs/smb/client/reparse.c
index e2ea59a17c9c..50eeea127a42 100644
--- a/fs/smb/client/reparse.c
+++ b/fs/smb/client/reparse.c
@@ -384,7 +384,7 @@ static int detect_directory_symlink_target(struct cifs_sb_info *cifs_sb,
static int create_native_socket(const unsigned int xid, struct inode *inode,
struct dentry *dentry, struct cifs_tcon *tcon,
- const char *full_path)
+ const char *full_path, umode_t mode)
{
struct reparse_data_buffer buf = {
.ReparseTag = cpu_to_le32(IO_REPARSE_TAG_AF_UNIX),
@@ -398,6 +398,10 @@ static int create_native_socket(const unsigned int xid, struct inode *inode,
.iov_base = &buf,
.iov_len = sizeof(buf),
};
+#ifdef CONFIG_CIFS_XATTR
+ const __le64 xattr_mode_val = cpu_to_le64(mode);
+ struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
+#endif
struct inode *new;
int rc = 0;
@@ -408,6 +412,28 @@ static int create_native_socket(const unsigned int xid, struct inode *inode,
d_instantiate(dentry, new);
else
rc = PTR_ERR(new);
+
+ /*
+ * Try to set also optional WSL EA $LXMOD but ignore errors.
+ * WSL socket and native Win32/NT sockets uses same reparse point
+ * tag IO_REPARSE_TAG_AF_UNIX. WSL subsystem additionally requires
+ * EA $LXMOD to be set with the S_IFSOCK value. So setting this EA
+ * allows native socket to be recognized also by WSL subsystem.
+ * Note that setting of both EAs and reparse points is not supported
+ * by NTFS filesystem on Windows 8 / Windows Server 2012 and always
+ * fails. So ignore failures from this set_EA call.
+ */
+#ifdef CONFIG_CIFS_XATTR
+ if (!rc && tcon->ses->server->ops->set_EA &&
+ (le32_to_cpu(tcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_EXTENDED_ATTRIBUTES))
+ tcon->ses->server->ops->set_EA(xid, tcon, full_path,
+ true /* open reparse point */,
+ SMB2_WSL_XATTR_MODE,
+ &xattr_mode_val,
+ SMB2_WSL_XATTR_MODE_SIZE,
+ cifs_sb->local_nls, cifs_sb);
+#endif
+
cifs_free_open_info(&data);
return rc;
}
@@ -717,7 +743,7 @@ int mknod_reparse(unsigned int xid, struct inode *inode,
struct smb3_fs_context *ctx = CIFS_SB(inode->i_sb)->ctx;
if (S_ISSOCK(mode) && !ctx->nonativesocket && ctx->reparse_type != CIFS_REPARSE_TYPE_NONE)
- return create_native_socket(xid, inode, dentry, tcon, full_path);
+ return create_native_socket(xid, inode, dentry, tcon, full_path, mode);
switch (ctx->reparse_type) {
case CIFS_REPARSE_TYPE_NFS:
--
2.20.1
next prev parent reply other threads:[~2026-07-06 18:48 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-06 18:48 [PATCH RESEND 00/11] cifs: Various changes Pali Rohár
2026-07-06 18:48 ` [PATCH RESEND 01/11] cifs: Fix and improve cifs_is_path_accessible() function Pali Rohár
2026-07-06 18:48 ` [PATCH RESEND 02/11] cifs: Remove code for querying FILE_INFO_STANDARD via CIFSSMBQPathInfo() Pali Rohár
2026-07-06 18:48 ` [PATCH RESEND 03/11] cifs: Remove CIFSSMBSetPathInfoFB() fallback function Pali Rohár
2026-07-06 18:48 ` [PATCH RESEND 04/11] cifs: Remove cifs_backup_query_path_info() and replace it by cifs_query_path_info() Pali Rohár
2026-07-06 18:48 ` [PATCH RESEND 05/11] cifs: Fix validation of EAs for WSL reparse points Pali Rohár
2026-07-06 18:48 ` [PATCH RESEND 06/11] cifs: Validate presence of EA $LXMOD " Pali Rohár
2026-07-06 22:30 ` Steve French
2026-07-06 22:39 ` Pali Rohár
2026-07-06 22:55 ` Steve French
2026-07-06 23:02 ` Pali Rohár
2026-07-06 18:48 ` [PATCH RESEND 07/11] cifs: Check if server supports EAs before trying to set it for WSL Pali Rohár
2026-07-06 22:33 ` Steve French
2026-07-06 22:42 ` Pali Rohár
[not found] ` <CAH2r5mvDGM7i8EsdPkW681a_AnXOAsHkg38eJqegO7g2gV8qAw@mail.gmail.com>
2026-07-06 22:58 ` Pali Rohár
2026-07-06 18:48 ` [PATCH RESEND 08/11] cifs: Extend ->set_EA() callback to allow operate on reparse point Pali Rohár
2026-07-06 18:48 ` Pali Rohár [this message]
2026-07-06 18:48 ` [PATCH RESEND 10/11] cifs: Add support for parsing WSL symlinks in version 1 format Pali Rohár
2026-07-06 20:50 ` Pali Rohár
2026-07-06 21:02 ` Pali Rohár
2026-07-06 18:48 ` [PATCH RESEND 11/11] cifs: Add support for creating " Pali Rohár
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260706184819.22124-10-pali@kernel.org \
--to=pali@kernel.org \
--cc=linux-cifs@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pc@manguebit.org \
--cc=ronniesahlberg@gmail.com \
--cc=sfrench@samba.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.