From: "Pali Rohár" <pali@kernel.org>
To: Steve French <sfrench@samba.org>,
Paulo Alcantara <pc@manguebit.com>,
Ronnie Sahlberg <ronniesahlberg@gmail.com>
Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH 3/7] cifs: Add support for creating native Windows sockets
Date: Sun, 6 Oct 2024 12:00:42 +0200 [thread overview]
Message-ID: <20241006100046.30772-4-pali@kernel.org> (raw)
In-Reply-To: <20241006100046.30772-1-pali@kernel.org>
Native Windows sockets created by WinSock on Windows 10 April 2018 Update
(version 1803) or Windows Server 2019 (version 1809) or later versions is
reparse point with IO_REPARSE_TAG_AF_UNIX tag, with empty reparse point
data buffer and without any EAs.
Create AF_UNIX sockets in this native format when -o reparse=native or
-o reparse=native+<something> mount option is used.
This change makes AF_UNIX sockets created by Linux CIFS client compatible
with AF_UNIX sockets created by Windows applications on NTFS volumes.
Signed-off-by: Pali Rohár <pali@kernel.org>
---
fs/smb/client/cifsglob.h | 6 +++---
fs/smb/client/reparse.c | 36 ++++++++++++++++++++++++++++++++++++
2 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/fs/smb/client/cifsglob.h b/fs/smb/client/cifsglob.h
index 7632d2ba5390..570b22d02f7e 100644
--- a/fs/smb/client/cifsglob.h
+++ b/fs/smb/client/cifsglob.h
@@ -155,9 +155,9 @@ enum securityEnum {
enum cifs_reparse_type {
CIFS_REPARSE_TYPE_NONE, /* disable creating new reparse points */
- CIFS_REPARSE_TYPE_NATIVE, /* native symlinks only */
- CIFS_REPARSE_TYPE_NATIVE_NFS, /* native for symlinks, nfs for others */
- CIFS_REPARSE_TYPE_NATIVE_WSL, /* native for symlinks, wsl for others */
+ CIFS_REPARSE_TYPE_NATIVE, /* native symlinks and sockets only, no support for others */
+ CIFS_REPARSE_TYPE_NATIVE_NFS, /* native for symlinks/sockets, nfs for fifos/block/char */
+ CIFS_REPARSE_TYPE_NATIVE_WSL, /* native for symlinks/sockets, wsl for fifos/block/char */
CIFS_REPARSE_TYPE_NFS, /* nfs for everything */
CIFS_REPARSE_TYPE_WSL, /* wsl for everything */
CIFS_REPARSE_TYPE_DEFAULT = CIFS_REPARSE_TYPE_NATIVE_NFS,
diff --git a/fs/smb/client/reparse.c b/fs/smb/client/reparse.c
index 38fe0a710c65..f1488f870320 100644
--- a/fs/smb/client/reparse.c
+++ b/fs/smb/client/reparse.c
@@ -379,6 +379,35 @@ static int detect_directory_symlink_target(struct cifs_sb_info *cifs_sb,
return 0;
}
+static int create_native_socket(const unsigned int xid, struct inode *inode,
+ struct dentry *dentry, struct cifs_tcon *tcon,
+ const char *full_path)
+{
+ struct cifs_open_info_data data = {
+ .reparse_point = true,
+ .reparse = { .tag = IO_REPARSE_TAG_AF_UNIX, },
+ };
+ struct reparse_data_buffer buf = {
+ .ReparseTag = cpu_to_le32(IO_REPARSE_TAG_AF_UNIX),
+ .ReparseDataLength = 0,
+ };
+ struct kvec iov = {
+ .iov_base = &buf,
+ .iov_len = sizeof(buf),
+ };
+ struct inode *new;
+ int rc;
+
+ new = smb2_get_reparse_inode(&data, inode->i_sb, xid,
+ tcon, full_path, false, &iov, NULL);
+ if (!IS_ERR(new))
+ d_instantiate(dentry, new);
+ else
+ rc = PTR_ERR(new);
+ cifs_free_open_info(&data);
+ return rc;
+}
+
static int nfs_set_reparse_buf(struct reparse_posix_data *buf,
mode_t mode, dev_t dev,
struct kvec *iov)
@@ -602,6 +631,13 @@ int smb2_mknod_reparse(unsigned int xid, struct inode *inode,
{
struct smb3_fs_context *ctx = CIFS_SB(inode->i_sb)->ctx;
+ if (S_ISSOCK(mode) && (
+ ctx->reparse_type == CIFS_REPARSE_TYPE_NATIVE ||
+ ctx->reparse_type == CIFS_REPARSE_TYPE_NATIVE_NFS ||
+ ctx->reparse_type == CIFS_REPARSE_TYPE_NATIVE_WSL)) {
+ return create_native_socket(xid, inode, dentry, tcon, full_path);
+ }
+
switch (ctx->reparse_type) {
case CIFS_REPARSE_TYPE_NATIVE_NFS:
case CIFS_REPARSE_TYPE_NFS:
--
2.20.1
next prev parent reply other threads:[~2024-10-06 10:01 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-06 10:00 [PATCH 0/7] cifs: Improve mount option -o reparse and support for native Windows sockets Pali Rohár
2024-10-06 10:00 ` [PATCH 1/7] cifs: Add mount option -o reparse=native Pali Rohár
2024-10-07 4:28 ` Steve French
2024-10-07 18:36 ` Pali Rohár
[not found] ` <CAH2r5mttO-aDq94QrLQm10xJRGLg=PULqX9fcfoykAweVVO+uQ@mail.gmail.com>
2024-10-10 22:21 ` Steve French
2024-10-10 22:38 ` Pali Rohár
[not found] ` <CAH2r5msEiD05ehJs_a05sP_rX7BkVH-9LZp8Sj6EFbpZA9bfrg@mail.gmail.com>
2024-10-10 22:44 ` Pali Rohár
2024-10-06 10:00 ` [PATCH 2/7] cifs: Add mount option -o reparse=none Pali Rohár
2024-10-06 10:00 ` Pali Rohár [this message]
2024-10-10 21:47 ` [PATCH 3/7] cifs: Add support for creating native Windows sockets Pali Rohár
2024-10-06 10:00 ` [PATCH 4/7] cifs: Add support for creating NFS-style symlinks Pali Rohár
2024-10-06 10:00 ` [PATCH 5/7] cifs: Improve guard for excluding $LXDEV xattr Pali Rohár
2024-10-06 10:00 ` [PATCH 6/7] cifs: Add support for creating WSL-style symlinks Pali Rohár
2024-10-10 21:50 ` Pali Rohár
2024-10-06 10:00 ` [PATCH 7/7] cifs: Validate content of WSL reparse point buffers Pali Rohár
2024-10-07 4:23 ` [PATCH 0/7] cifs: Improve mount option -o reparse and support for native Windows sockets Steve French
2024-10-12 8:52 ` [PATCH v2 0/7] Allow to choose symlink and socket type Pali Rohár
2024-10-12 8:55 ` [PATCH v2 1/7] cifs: Add mount option -o symlink= for choosing symlink create type Pali Rohár
2024-10-12 8:55 ` [PATCH v2 2/7] cifs: Add mount option -o reparse=none Pali Rohár
2024-10-12 8:55 ` [PATCH v2 3/7] cifs: Add support for creating native Windows sockets Pali Rohár
2024-10-12 8:56 ` [PATCH v2 4/7] cifs: Add support for creating NFS-style symlinks Pali Rohár
2024-12-09 18:00 ` Pali Rohár
2024-10-12 8:56 ` [PATCH v2 5/7] cifs: Improve guard for excluding $LXDEV xattr Pali Rohár
2024-10-12 8:56 ` [PATCH v2 6/7] cifs: Add support for creating WSL-style symlinks Pali Rohár
2024-10-12 8:56 ` [PATCH v2 7/7] cifs: Validate content of WSL reparse point buffers Pali Rohár
[not found] ` <CAH2r5mtGqqM35Cy5k9NN=X05rTZPk-adhb7LgoV8PGNVL9P6FQ@mail.gmail.com>
2024-10-13 4:19 ` Fwd: [PATCH v2 0/7] Allow to choose symlink and socket type Steve French
2024-10-13 8:59 ` Pali Rohár
2024-10-13 13:38 ` Pali Rohár
2024-10-14 9:32 ` Pali Rohár
2024-10-28 10:13 ` 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=20241006100046.30772-4-pali@kernel.org \
--to=pali@kernel.org \
--cc=linux-cifs@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pc@manguebit.com \
--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.