From: Namjae Jeon <linkinjeon@kernel.org>
To: gregkh@linuxfoundation.org, stable@vger.kernel.org
Cc: smfrench@gmail.com, Namjae Jeon <linkinjeon@kernel.org>,
Amir Goldstein <amir73il@gmail.com>,
Steve French <stfrench@microsoft.com>
Subject: [PATCH 5.15.y 103/154] ksmbd: add mnt_want_write to ksmbd vfs functions
Date: Tue, 19 Dec 2023 00:34:03 +0900 [thread overview]
Message-ID: <20231218153454.8090-104-linkinjeon@kernel.org> (raw)
In-Reply-To: <20231218153454.8090-1-linkinjeon@kernel.org>
[ Upstream commit 40b268d384a22276dca1450549f53eed60e21deb ]
ksmbd is doing write access using vfs helpers. There are the cases that
mnt_want_write() is not called in vfs helper. This patch add missing
mnt_want_write() to ksmbd vfs functions.
Cc: stable@vger.kernel.org
Cc: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
---
fs/ksmbd/smb2pdu.c | 26 +++++-----
fs/ksmbd/smbacl.c | 10 ++--
fs/ksmbd/vfs.c | 112 +++++++++++++++++++++++++++++++++----------
fs/ksmbd/vfs.h | 17 ++++---
fs/ksmbd/vfs_cache.c | 2 +-
5 files changed, 112 insertions(+), 55 deletions(-)
diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c
index d25d3a046a7f..d6c9092ff230 100644
--- a/fs/ksmbd/smb2pdu.c
+++ b/fs/ksmbd/smb2pdu.c
@@ -2284,7 +2284,7 @@ static int smb2_set_ea(struct smb2_ea_info *eabuf, unsigned int buf_len,
/* delete the EA only when it exits */
if (rc > 0) {
rc = ksmbd_vfs_remove_xattr(user_ns,
- path->dentry,
+ path,
attr_name);
if (rc < 0) {
@@ -2298,8 +2298,7 @@ static int smb2_set_ea(struct smb2_ea_info *eabuf, unsigned int buf_len,
/* if the EA doesn't exist, just do nothing. */
rc = 0;
} else {
- rc = ksmbd_vfs_setxattr(user_ns,
- path->dentry, attr_name, value,
+ rc = ksmbd_vfs_setxattr(user_ns, path, attr_name, value,
le16_to_cpu(eabuf->EaValueLength), 0);
if (rc < 0) {
ksmbd_debug(SMB,
@@ -2363,8 +2362,7 @@ static noinline int smb2_set_stream_name_xattr(const struct path *path,
return -EBADF;
}
- rc = ksmbd_vfs_setxattr(user_ns, path->dentry,
- xattr_stream_name, NULL, 0, 0);
+ rc = ksmbd_vfs_setxattr(user_ns, path, xattr_stream_name, NULL, 0, 0);
if (rc < 0)
pr_err("Failed to store XATTR stream name :%d\n", rc);
return 0;
@@ -2392,7 +2390,7 @@ static int smb2_remove_smb_xattrs(const struct path *path)
if (!strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN) &&
!strncmp(&name[XATTR_USER_PREFIX_LEN], STREAM_PREFIX,
STREAM_PREFIX_LEN)) {
- err = ksmbd_vfs_remove_xattr(user_ns, path->dentry,
+ err = ksmbd_vfs_remove_xattr(user_ns, path,
name);
if (err)
ksmbd_debug(SMB, "remove xattr failed : %s\n",
@@ -2439,8 +2437,7 @@ static void smb2_new_xattrs(struct ksmbd_tree_connect *tcon, const struct path *
da.flags = XATTR_DOSINFO_ATTRIB | XATTR_DOSINFO_CREATE_TIME |
XATTR_DOSINFO_ITIME;
- rc = ksmbd_vfs_set_dos_attrib_xattr(mnt_user_ns(path->mnt),
- path->dentry, &da);
+ rc = ksmbd_vfs_set_dos_attrib_xattr(mnt_user_ns(path->mnt), path, &da);
if (rc)
ksmbd_debug(SMB, "failed to store file attribute into xattr\n");
}
@@ -3011,7 +3008,7 @@ int smb2_open(struct ksmbd_work *work)
struct inode *inode = d_inode(path.dentry);
posix_acl_rc = ksmbd_vfs_inherit_posix_acl(user_ns,
- inode,
+ &path,
d_inode(path.dentry->d_parent));
if (posix_acl_rc)
ksmbd_debug(SMB, "inherit posix acl failed : %d\n", posix_acl_rc);
@@ -3027,7 +3024,7 @@ int smb2_open(struct ksmbd_work *work)
if (rc) {
if (posix_acl_rc)
ksmbd_vfs_set_init_posix_acl(user_ns,
- inode);
+ &path);
if (test_share_config_flag(work->tcon->share_conf,
KSMBD_SHARE_FLAG_ACL_XATTR)) {
@@ -3067,7 +3064,7 @@ int smb2_open(struct ksmbd_work *work)
rc = ksmbd_vfs_set_sd_xattr(conn,
user_ns,
- path.dentry,
+ &path,
pntsd,
pntsd_size);
kfree(pntsd);
@@ -5506,7 +5503,7 @@ static int smb2_rename(struct ksmbd_work *work,
goto out;
rc = ksmbd_vfs_setxattr(file_mnt_user_ns(fp->filp),
- fp->filp->f_path.dentry,
+ &fp->filp->f_path,
xattr_stream_name,
NULL, 0, 0);
if (rc < 0) {
@@ -5671,8 +5668,7 @@ static int set_file_basic_info(struct ksmbd_file *fp,
da.flags = XATTR_DOSINFO_ATTRIB | XATTR_DOSINFO_CREATE_TIME |
XATTR_DOSINFO_ITIME;
- rc = ksmbd_vfs_set_dos_attrib_xattr(user_ns,
- filp->f_path.dentry, &da);
+ rc = ksmbd_vfs_set_dos_attrib_xattr(user_ns, &filp->f_path, &da);
if (rc)
ksmbd_debug(SMB,
"failed to restore file attribute in EA\n");
@@ -7534,7 +7530,7 @@ static inline int fsctl_set_sparse(struct ksmbd_work *work, u64 id,
da.attr = le32_to_cpu(fp->f_ci->m_fattr);
ret = ksmbd_vfs_set_dos_attrib_xattr(user_ns,
- fp->filp->f_path.dentry, &da);
+ &fp->filp->f_path, &da);
if (ret)
fp->f_ci->m_fattr = old_fattr;
}
diff --git a/fs/ksmbd/smbacl.c b/fs/ksmbd/smbacl.c
index 34db75af8c62..8fbcc6a8cef0 100644
--- a/fs/ksmbd/smbacl.c
+++ b/fs/ksmbd/smbacl.c
@@ -1183,8 +1183,7 @@ int smb_inherit_dacl(struct ksmbd_conn *conn,
pntsd_size += sizeof(struct smb_acl) + nt_size;
}
- ksmbd_vfs_set_sd_xattr(conn, user_ns,
- path->dentry, pntsd, pntsd_size);
+ ksmbd_vfs_set_sd_xattr(conn, user_ns, path, pntsd, pntsd_size);
kfree(pntsd);
}
@@ -1404,7 +1403,7 @@ int set_info_sec(struct ksmbd_conn *conn, struct ksmbd_tree_connect *tcon,
newattrs.ia_valid |= ATTR_MODE;
newattrs.ia_mode = (inode->i_mode & ~0777) | (fattr.cf_mode & 0777);
- ksmbd_vfs_remove_acl_xattrs(user_ns, path->dentry);
+ ksmbd_vfs_remove_acl_xattrs(user_ns, path);
/* Update posix acls */
if (IS_ENABLED(CONFIG_FS_POSIX_ACL) && fattr.cf_dacls) {
rc = set_posix_acl(user_ns, inode,
@@ -1435,9 +1434,8 @@ int set_info_sec(struct ksmbd_conn *conn, struct ksmbd_tree_connect *tcon,
if (test_share_config_flag(tcon->share_conf, KSMBD_SHARE_FLAG_ACL_XATTR)) {
/* Update WinACL in xattr */
- ksmbd_vfs_remove_sd_xattrs(user_ns, path->dentry);
- ksmbd_vfs_set_sd_xattr(conn, user_ns,
- path->dentry, pntsd, ntsd_len);
+ ksmbd_vfs_remove_sd_xattrs(user_ns, path);
+ ksmbd_vfs_set_sd_xattr(conn, user_ns, path, pntsd, ntsd_len);
}
out:
diff --git a/fs/ksmbd/vfs.c b/fs/ksmbd/vfs.c
index 97e723956fe8..e58fbbfda7b2 100644
--- a/fs/ksmbd/vfs.c
+++ b/fs/ksmbd/vfs.c
@@ -170,6 +170,10 @@ int ksmbd_vfs_create(struct ksmbd_work *work, const char *name, umode_t mode)
return err;
}
+ err = mnt_want_write(path.mnt);
+ if (err)
+ goto out_err;
+
mode |= S_IFREG;
err = vfs_create(mnt_user_ns(path.mnt), d_inode(path.dentry),
dentry, mode, true);
@@ -179,6 +183,9 @@ int ksmbd_vfs_create(struct ksmbd_work *work, const char *name, umode_t mode)
} else {
pr_err("File(%s): creation failed (err:%d)\n", name, err);
}
+ mnt_drop_write(path.mnt);
+
+out_err:
done_path_create(&path, dentry);
return err;
}
@@ -209,30 +216,35 @@ int ksmbd_vfs_mkdir(struct ksmbd_work *work, const char *name, umode_t mode)
return err;
}
+ err = mnt_want_write(path.mnt);
+ if (err)
+ goto out_err2;
+
user_ns = mnt_user_ns(path.mnt);
mode |= S_IFDIR;
err = vfs_mkdir(user_ns, d_inode(path.dentry), dentry, mode);
- if (err) {
- goto out;
- } else if (d_unhashed(dentry)) {
+ if (!err && d_unhashed(dentry)) {
struct dentry *d;
d = lookup_one(user_ns, dentry->d_name.name, dentry->d_parent,
dentry->d_name.len);
if (IS_ERR(d)) {
err = PTR_ERR(d);
- goto out;
+ goto out_err1;
}
if (unlikely(d_is_negative(d))) {
dput(d);
err = -ENOENT;
- goto out;
+ goto out_err1;
}
ksmbd_vfs_inherit_owner(work, d_inode(path.dentry), d_inode(d));
dput(d);
}
-out:
+
+out_err1:
+ mnt_drop_write(path.mnt);
+out_err2:
done_path_create(&path, dentry);
if (err)
pr_err("mkdir(%s): creation failed (err:%d)\n", name, err);
@@ -443,7 +455,7 @@ static int ksmbd_vfs_stream_write(struct ksmbd_file *fp, char *buf, loff_t *pos,
memcpy(&stream_buf[*pos], buf, count);
err = ksmbd_vfs_setxattr(user_ns,
- fp->filp->f_path.dentry,
+ &fp->filp->f_path,
fp->stream.name,
(void *)stream_buf,
size,
@@ -589,6 +601,10 @@ int ksmbd_vfs_remove_file(struct ksmbd_work *work, const struct path *path)
goto out_err;
}
+ err = mnt_want_write(path->mnt);
+ if (err)
+ goto out_err;
+
user_ns = mnt_user_ns(path->mnt);
if (S_ISDIR(d_inode(path->dentry)->i_mode)) {
err = vfs_rmdir(user_ns, d_inode(parent), path->dentry);
@@ -599,6 +615,7 @@ int ksmbd_vfs_remove_file(struct ksmbd_work *work, const struct path *path)
if (err)
ksmbd_debug(VFS, "unlink failed, err %d\n", err);
}
+ mnt_drop_write(path->mnt);
out_err:
ksmbd_revert_fsids(work);
@@ -644,11 +661,16 @@ int ksmbd_vfs_link(struct ksmbd_work *work, const char *oldname,
goto out3;
}
+ err = mnt_want_write(newpath.mnt);
+ if (err)
+ goto out3;
+
err = vfs_link(oldpath.dentry, mnt_user_ns(newpath.mnt),
d_inode(newpath.dentry),
dentry, NULL);
if (err)
ksmbd_debug(VFS, "vfs_link failed err %d\n", err);
+ mnt_drop_write(newpath.mnt);
out3:
done_path_create(&newpath, dentry);
@@ -694,6 +716,10 @@ int ksmbd_vfs_rename(struct ksmbd_work *work, const struct path *old_path,
goto out2;
}
+ err = mnt_want_write(old_path->mnt);
+ if (err)
+ goto out2;
+
trap = lock_rename_child(old_child, new_path.dentry);
old_parent = dget(old_child->d_parent);
@@ -757,6 +783,7 @@ int ksmbd_vfs_rename(struct ksmbd_work *work, const struct path *old_path,
out3:
dput(old_parent);
unlock_rename(old_parent, new_path.dentry);
+ mnt_drop_write(old_path->mnt);
out2:
path_put(&new_path);
@@ -897,19 +924,24 @@ ssize_t ksmbd_vfs_getxattr(struct user_namespace *user_ns,
* Return: 0 on success, otherwise error
*/
int ksmbd_vfs_setxattr(struct user_namespace *user_ns,
- struct dentry *dentry, const char *attr_name,
+ const struct path *path, const char *attr_name,
const void *attr_value, size_t attr_size, int flags)
{
int err;
+ err = mnt_want_write(path->mnt);
+ if (err)
+ return err;
+
err = vfs_setxattr(user_ns,
- dentry,
+ path->dentry,
attr_name,
attr_value,
attr_size,
flags);
if (err)
ksmbd_debug(VFS, "setxattr failed, err %d\n", err);
+ mnt_drop_write(path->mnt);
return err;
}
@@ -1013,9 +1045,18 @@ int ksmbd_vfs_fqar_lseek(struct ksmbd_file *fp, loff_t start, loff_t length,
}
int ksmbd_vfs_remove_xattr(struct user_namespace *user_ns,
- struct dentry *dentry, char *attr_name)
+ const struct path *path, char *attr_name)
{
- return vfs_removexattr(user_ns, dentry, attr_name);
+ int err;
+
+ err = mnt_want_write(path->mnt);
+ if (err)
+ return err;
+
+ err = vfs_removexattr(user_ns, path->dentry, attr_name);
+ mnt_drop_write(path->mnt);
+
+ return err;
}
int ksmbd_vfs_unlink(struct file *filp)
@@ -1024,6 +1065,10 @@ int ksmbd_vfs_unlink(struct file *filp)
struct dentry *dir, *dentry = filp->f_path.dentry;
struct user_namespace *user_ns = file_mnt_user_ns(filp);
+ err = mnt_want_write(filp->f_path.mnt);
+ if (err)
+ return err;
+
dir = dget_parent(dentry);
err = ksmbd_vfs_lock_parent(dir, dentry);
if (err)
@@ -1041,6 +1086,7 @@ int ksmbd_vfs_unlink(struct file *filp)
ksmbd_debug(VFS, "failed to delete, err %d\n", err);
out:
dput(dir);
+ mnt_drop_write(filp->f_path.mnt);
return err;
}
@@ -1246,13 +1292,13 @@ struct dentry *ksmbd_vfs_kern_path_create(struct ksmbd_work *work,
}
int ksmbd_vfs_remove_acl_xattrs(struct user_namespace *user_ns,
- struct dentry *dentry)
+ const struct path *path)
{
char *name, *xattr_list = NULL;
ssize_t xattr_list_len;
int err = 0;
- xattr_list_len = ksmbd_vfs_listxattr(dentry, &xattr_list);
+ xattr_list_len = ksmbd_vfs_listxattr(path->dentry, &xattr_list);
if (xattr_list_len < 0) {
goto out;
} else if (!xattr_list_len) {
@@ -1268,25 +1314,25 @@ int ksmbd_vfs_remove_acl_xattrs(struct user_namespace *user_ns,
sizeof(XATTR_NAME_POSIX_ACL_ACCESS) - 1) ||
!strncmp(name, XATTR_NAME_POSIX_ACL_DEFAULT,
sizeof(XATTR_NAME_POSIX_ACL_DEFAULT) - 1)) {
- err = ksmbd_vfs_remove_xattr(user_ns, dentry, name);
+ err = ksmbd_vfs_remove_xattr(user_ns, path, name);
if (err)
ksmbd_debug(SMB,
"remove acl xattr failed : %s\n", name);
}
}
+
out:
kvfree(xattr_list);
return err;
}
-int ksmbd_vfs_remove_sd_xattrs(struct user_namespace *user_ns,
- struct dentry *dentry)
+int ksmbd_vfs_remove_sd_xattrs(struct user_namespace *user_ns, const struct path *path)
{
char *name, *xattr_list = NULL;
ssize_t xattr_list_len;
int err = 0;
- xattr_list_len = ksmbd_vfs_listxattr(dentry, &xattr_list);
+ xattr_list_len = ksmbd_vfs_listxattr(path->dentry, &xattr_list);
if (xattr_list_len < 0) {
goto out;
} else if (!xattr_list_len) {
@@ -1299,7 +1345,7 @@ int ksmbd_vfs_remove_sd_xattrs(struct user_namespace *user_ns,
ksmbd_debug(SMB, "%s, len %zd\n", name, strlen(name));
if (!strncmp(name, XATTR_NAME_SD, XATTR_NAME_SD_LEN)) {
- err = ksmbd_vfs_remove_xattr(user_ns, dentry, name);
+ err = ksmbd_vfs_remove_xattr(user_ns, path, name);
if (err)
ksmbd_debug(SMB, "remove xattr failed : %s\n", name);
}
@@ -1376,13 +1422,14 @@ static struct xattr_smb_acl *ksmbd_vfs_make_xattr_posix_acl(struct user_namespac
int ksmbd_vfs_set_sd_xattr(struct ksmbd_conn *conn,
struct user_namespace *user_ns,
- struct dentry *dentry,
+ const struct path *path,
struct smb_ntsd *pntsd, int len)
{
int rc;
struct ndr sd_ndr = {0}, acl_ndr = {0};
struct xattr_ntacl acl = {0};
struct xattr_smb_acl *smb_acl, *def_smb_acl = NULL;
+ struct dentry *dentry = path->dentry;
struct inode *inode = d_inode(dentry);
acl.version = 4;
@@ -1434,7 +1481,7 @@ int ksmbd_vfs_set_sd_xattr(struct ksmbd_conn *conn,
goto out;
}
- rc = ksmbd_vfs_setxattr(user_ns, dentry,
+ rc = ksmbd_vfs_setxattr(user_ns, path,
XATTR_NAME_SD, sd_ndr.data,
sd_ndr.offset, 0);
if (rc < 0)
@@ -1524,7 +1571,7 @@ int ksmbd_vfs_get_sd_xattr(struct ksmbd_conn *conn,
}
int ksmbd_vfs_set_dos_attrib_xattr(struct user_namespace *user_ns,
- struct dentry *dentry,
+ const struct path *path,
struct xattr_dos_attrib *da)
{
struct ndr n;
@@ -1534,7 +1581,7 @@ int ksmbd_vfs_set_dos_attrib_xattr(struct user_namespace *user_ns,
if (err)
return err;
- err = ksmbd_vfs_setxattr(user_ns, dentry, XATTR_NAME_DOS_ATTRIBUTE,
+ err = ksmbd_vfs_setxattr(user_ns, path, XATTR_NAME_DOS_ATTRIBUTE,
(void *)n.data, n.offset, 0);
if (err)
ksmbd_debug(SMB, "failed to store dos attribute in xattr\n");
@@ -1771,10 +1818,11 @@ void ksmbd_vfs_posix_lock_unblock(struct file_lock *flock)
}
int ksmbd_vfs_set_init_posix_acl(struct user_namespace *user_ns,
- struct inode *inode)
+ struct path *path)
{
struct posix_acl_state acl_state;
struct posix_acl *acls;
+ struct inode *inode = d_inode(path->dentry);
int rc;
if (!IS_ENABLED(CONFIG_FS_POSIX_ACL))
@@ -1803,6 +1851,11 @@ int ksmbd_vfs_set_init_posix_acl(struct user_namespace *user_ns,
return -ENOMEM;
}
posix_state_to_acl(&acl_state, acls->a_entries);
+
+ rc = mnt_want_write(path->mnt);
+ if (rc)
+ goto out_err;
+
rc = set_posix_acl(user_ns, inode, ACL_TYPE_ACCESS, acls);
if (rc < 0)
ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_ACCESS) failed, rc : %d\n",
@@ -1815,16 +1868,20 @@ int ksmbd_vfs_set_init_posix_acl(struct user_namespace *user_ns,
ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_DEFAULT) failed, rc : %d\n",
rc);
}
+ mnt_drop_write(path->mnt);
+
+out_err:
free_acl_state(&acl_state);
posix_acl_release(acls);
return rc;
}
int ksmbd_vfs_inherit_posix_acl(struct user_namespace *user_ns,
- struct inode *inode, struct inode *parent_inode)
+ struct path *path, struct inode *parent_inode)
{
struct posix_acl *acls;
struct posix_acl_entry *pace;
+ struct inode *inode = d_inode(path->dentry);
int rc, i;
if (!IS_ENABLED(CONFIG_FS_POSIX_ACL))
@@ -1842,6 +1899,10 @@ int ksmbd_vfs_inherit_posix_acl(struct user_namespace *user_ns,
}
}
+ rc = mnt_want_write(path->mnt);
+ if (rc)
+ goto out_err;
+
rc = set_posix_acl(user_ns, inode, ACL_TYPE_ACCESS, acls);
if (rc < 0)
ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_ACCESS) failed, rc : %d\n",
@@ -1853,6 +1914,9 @@ int ksmbd_vfs_inherit_posix_acl(struct user_namespace *user_ns,
ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_DEFAULT) failed, rc : %d\n",
rc);
}
+ mnt_drop_write(path->mnt);
+
+out_err:
posix_acl_release(acls);
return rc;
}
diff --git a/fs/ksmbd/vfs.h b/fs/ksmbd/vfs.h
index bd92b8a6edbe..adaf511dace1 100644
--- a/fs/ksmbd/vfs.h
+++ b/fs/ksmbd/vfs.h
@@ -147,12 +147,12 @@ ssize_t ksmbd_vfs_casexattr_len(struct user_namespace *user_ns,
struct dentry *dentry, char *attr_name,
int attr_name_len);
int ksmbd_vfs_setxattr(struct user_namespace *user_ns,
- struct dentry *dentry, const char *attr_name,
+ const struct path *path, const char *attr_name,
const void *attr_value, size_t attr_size, int flags);
int ksmbd_vfs_xattr_stream_name(char *stream_name, char **xattr_stream_name,
size_t *xattr_stream_name_size, int s_type);
int ksmbd_vfs_remove_xattr(struct user_namespace *user_ns,
- struct dentry *dentry, char *attr_name);
+ const struct path *path, char *attr_name);
int ksmbd_vfs_kern_path_locked(struct ksmbd_work *work, char *name,
unsigned int flags, struct path *path,
bool caseless);
@@ -178,26 +178,25 @@ void ksmbd_vfs_posix_lock_wait(struct file_lock *flock);
int ksmbd_vfs_posix_lock_wait_timeout(struct file_lock *flock, long timeout);
void ksmbd_vfs_posix_lock_unblock(struct file_lock *flock);
int ksmbd_vfs_remove_acl_xattrs(struct user_namespace *user_ns,
- struct dentry *dentry);
-int ksmbd_vfs_remove_sd_xattrs(struct user_namespace *user_ns,
- struct dentry *dentry);
+ const struct path *path);
+int ksmbd_vfs_remove_sd_xattrs(struct user_namespace *user_ns, const struct path *path);
int ksmbd_vfs_set_sd_xattr(struct ksmbd_conn *conn,
struct user_namespace *user_ns,
- struct dentry *dentry,
+ const struct path *path,
struct smb_ntsd *pntsd, int len);
int ksmbd_vfs_get_sd_xattr(struct ksmbd_conn *conn,
struct user_namespace *user_ns,
struct dentry *dentry,
struct smb_ntsd **pntsd);
int ksmbd_vfs_set_dos_attrib_xattr(struct user_namespace *user_ns,
- struct dentry *dentry,
+ const struct path *path,
struct xattr_dos_attrib *da);
int ksmbd_vfs_get_dos_attrib_xattr(struct user_namespace *user_ns,
struct dentry *dentry,
struct xattr_dos_attrib *da);
int ksmbd_vfs_set_init_posix_acl(struct user_namespace *user_ns,
- struct inode *inode);
+ struct path *path);
int ksmbd_vfs_inherit_posix_acl(struct user_namespace *user_ns,
- struct inode *inode,
+ struct path *path,
struct inode *parent_inode);
#endif /* __KSMBD_VFS_H__ */
diff --git a/fs/ksmbd/vfs_cache.c b/fs/ksmbd/vfs_cache.c
index bafb34d4b5bb..94ad8fa07b46 100644
--- a/fs/ksmbd/vfs_cache.c
+++ b/fs/ksmbd/vfs_cache.c
@@ -251,7 +251,7 @@ static void __ksmbd_inode_close(struct ksmbd_file *fp)
if (ksmbd_stream_fd(fp) && (ci->m_flags & S_DEL_ON_CLS_STREAM)) {
ci->m_flags &= ~S_DEL_ON_CLS_STREAM;
err = ksmbd_vfs_remove_xattr(file_mnt_user_ns(filp),
- filp->f_path.dentry,
+ &filp->f_path,
fp->stream.name);
if (err)
pr_err("remove xattr failed : %s\n",
--
2.25.1
next prev parent reply other threads:[~2023-12-18 15:40 UTC|newest]
Thread overview: 158+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-18 15:32 [PATCH 5.15.y 000/154] ksmbd backport patches for 5.15.y Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 001/154] ksmbd: use ksmbd_req_buf_next() in ksmbd_verify_smb_message() Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 002/154] ksmdb: use cmd helper variable in smb2_get_ksmbd_tcon() Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 003/154] ksmbd: Remove redundant 'flush_workqueue()' calls Namjae Jeon
2023-12-18 17:56 ` Christophe JAILLET
2023-12-18 20:31 ` Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 004/154] ksmbd: remove md4 leftovers Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 005/154] ksmbd: remove smb2_buf_length in smb2_hdr Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 006/154] ksmbd: remove smb2_buf_length in smb2_transform_hdr Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 007/154] ksmbd: change LeaseKey data type to u8 array Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 008/154] ksmbd: use oid registry functions to decode OIDs Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 009/154] ksmbd: Remove unused parameter from smb2_get_name() Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 010/154] ksmbd: Remove unused fields from ksmbd_file struct definition Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 011/154] ksmbd: set both ipv4 and ipv6 in FSCTL_QUERY_NETWORK_INTERFACE_INFO Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 012/154] ksmbd: Fix buffer_check_err() kernel-doc comment Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 013/154] ksmbd: Fix smb2_set_info_file() " Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 014/154] ksmbd: Delete an invalid argument description in smb2_populate_readdir_entry() Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 015/154] ksmbd: Fix smb2_get_name() kernel-doc comment Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 016/154] ksmbd: register ksmbd ib client with ib_register_client() Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 017/154] ksmbd: set 445 port to smbdirect port by default Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 018/154] ksmbd: smbd: call rdma_accept() under CM handler Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 019/154] ksmbd: smbd: create MR pool Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 020/154] ksmbd: smbd: change the default maximum read/write, receive size Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 021/154] ksmbd: add smb-direct shutdown Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 022/154] ksmbd: smbd: fix missing client's memory region invalidation Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 023/154] ksmbd: smbd: validate buffer descriptor structures Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 024/154] ksmbd: add support for key exchange Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 025/154] ksmbd: use netif_is_bridge_port Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 026/154] ksmbd: store fids as opaque u64 integers Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 027/154] ksmbd: shorten experimental warning on loading the module Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 028/154] ksmbd: Remove a redundant zeroing of memory Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 029/154] ksmbd: replace usage of found with dedicated list iterator variable Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 030/154] smb3: fix ksmbd bigendian bug in oplock break, and move its struct to smbfs_common Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 031/154] ksmbd: remove filename in ksmbd_file Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 032/154] ksmbd: validate length in smb2_write() Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 033/154] ksmbd: smbd: change prototypes of RDMA read/write related functions Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 034/154] ksmbd: smbd: introduce read/write credits for RDMA read/write Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 035/154] ksmbd: smbd: simplify tracking pending packets Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 036/154] ksmbd: smbd: change the return value of get_sg_list Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 037/154] ksmbd: smbd: handle multiple Buffer descriptors Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 038/154] ksmbd: fix wrong smbd max read/write size check Namjae Jeon
2023-12-18 15:32 ` [PATCH 5.15.y 039/154] ksmbd: Fix some kernel-doc comments Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 040/154] ksmbd: smbd: fix connection dropped issue Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 041/154] ksmbd: smbd: relax the count of sges required Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 042/154] ksmbd: smbd: Remove useless license text when SPDX-License-Identifier is already used Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 043/154] ksmbd: remove duplicate flag set in smb2_write Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 044/154] ksmbd: remove unused ksmbd_share_configs_cleanup function Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 045/154] ksmbd: use wait_event instead of schedule_timeout() Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 046/154] ksmbd: request update to stale share config Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 047/154] ksmbd: remove unnecessary generic_fillattr in smb2_open Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 048/154] ksmbd: don't open-code file_path() Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 049/154] ksmbd: don't open-code %pD Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 050/154] ksmbd: constify struct path Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 051/154] ksmbd: remove generic_fillattr use in smb2_open() Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 052/154] ksmbd: casefold utf-8 share names and fix ascii lowercase conversion Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 053/154] ksmbd: change security id to the one samba used for posix extension Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 054/154] ksmbd: set file permission mode to match Samba server posix extension behavior Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 055/154] ksmbd: fill sids in SMB_FIND_FILE_POSIX_INFO response Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 056/154] ksmbd: fix encryption failure issue for session logoff response Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 057/154] ksmbd: set NTLMSSP_NEGOTIATE_SEAL flag to challenge blob Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 058/154] ksmbd: decrease the number of SMB3 smbdirect server SGEs Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 059/154] ksmbd: reduce server smbdirect max send/receive segment sizes Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 060/154] ksmbd: hide socket error message when ipv6 config is disable Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 061/154] ksmbd: make utf-8 file name comparison work in __caseless_lookup() Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 062/154] ksmbd: call ib_drain_qp when disconnected Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 063/154] ksmbd: validate share name from share config response Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 064/154] ksmbd: replace one-element arrays with flexible-array members Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 065/154] ksmbd: set SMB2_SESSION_FLAG_ENCRYPT_DATA when enforcing data encryption for this share Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 066/154] ksmbd: use F_SETLK when unlocking a file Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 067/154] ksmbd: Fix resource leak in smb2_lock() Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 068/154] ksmbd: Convert to use sysfs_emit()/sysfs_emit_at() APIs Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 069/154] ksmbd: send proper error response in smb2_tree_connect() Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 070/154] ksmbd: Implements sess->ksmbd_chann_list as xarray Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 071/154] ksmbd: Implements sess->rpc_handle_list " Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 072/154] ksmbd: fix typo, syncronous->synchronous Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 073/154] ksmbd: Remove duplicated codes Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 074/154] ksmbd: update Kconfig to note Kerberos support and fix indentation Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 075/154] ksmbd: Fix spelling mistake "excceed" -> "exceeded" Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 076/154] ksmbd: Fix parameter name and comment mismatch Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 077/154] ksmbd: fix possible memory leak in smb2_lock() Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 078/154] ksmbd: fix wrong signingkey creation when encryption is AES256 Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 079/154] ksmbd: remove unused is_char_allowed function Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 080/154] ksmbd: delete asynchronous work from list Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 081/154] ksmbd: fix slab-out-of-bounds in init_smb2_rsp_hdr Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 082/154] ksmbd: avoid out of bounds access in decode_preauth_ctxt() Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 083/154] ksmbd: set NegotiateContextCount once instead of every inc Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 084/154] ksmbd: avoid duplicate negotiate ctx offset increments Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 085/154] ksmbd: remove unused compression negotiate ctx packing Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 086/154] fs: introduce lock_rename_child() helper Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 087/154] ksmbd: fix racy issue from using ->d_parent and ->d_name Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 088/154] ksmbd: fix racy issue from session setup and logoff Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 089/154] ksmbd: destroy expired sessions Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 090/154] ksmbd: block asynchronous requests when making a delay on session setup Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 091/154] ksmbd: fix racy issue from smb2 close and logoff with multichannel Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 092/154] ksmbd: fix racy issue under cocurrent smb2 tree disconnect Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 093/154] ksmbd: fix uninitialized pointer read in ksmbd_vfs_rename() Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 094/154] ksmbd: fix uninitialized pointer read in smb2_create_link() Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 095/154] ksmbd: fix multiple out-of-bounds read during context decoding Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 096/154] ksmbd: fix UAF issue from opinfo->conn Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 097/154] ksmbd: call putname after using the last component Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 098/154] ksmbd: fix out-of-bound read in deassemble_neg_contexts() Namjae Jeon
2023-12-18 15:33 ` [PATCH 5.15.y 099/154] ksmbd: fix out-of-bound read in parse_lease_state() Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 100/154] ksmbd: fix posix_acls and acls dereferencing possible ERR_PTR() Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 101/154] ksmbd: check the validation of pdu_size in ksmbd_conn_handler_loop Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 102/154] ksmbd: validate smb request protocol id Namjae Jeon
2023-12-18 15:34 ` Namjae Jeon [this message]
2023-12-18 15:34 ` [PATCH 5.15.y 104/154] ksmbd: remove unused ksmbd_tree_conn_share function Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 105/154] ksmbd: use kzalloc() instead of __GFP_ZERO Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 106/154] ksmbd: return a literal instead of 'err' in ksmbd_vfs_kern_path_locked() Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 107/154] ksmbd: Change the return value of ksmbd_vfs_query_maximal_access to void Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 108/154] ksmbd: use kvzalloc instead of kvmalloc Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 109/154] ksmbd: Replace the ternary conditional operator with min() Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 110/154] ksmbd: fix out of bounds read in smb2_sess_setup Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 111/154] ksmbd: add missing compound request handing in some commands Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 112/154] ksmbd: Use struct_size() helper in ksmbd_negotiate_smb_dialect() Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 113/154] ksmbd: Replace one-element array with flexible-array member Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 114/154] ksmbd: Fix unsigned expression compared with zero Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 115/154] ksmbd: check if a mount point is crossed during path lookup Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 116/154] ksmbd: validate session id and tree id in compound request Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 117/154] ksmbd: fix out of bounds in init_smb2_rsp_hdr() Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 118/154] ksmbd: switch to use kmemdup_nul() helper Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 119/154] ksmbd: add support for read compound Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 120/154] ksmbd: fix wrong interim response on compound Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 121/154] ksmbd: fix `force create mode' and `force directory mode' Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 122/154] ksmbd: reduce descriptor size if remaining bytes is less than request size Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 123/154] ksmbd: Fix one kernel-doc comment Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 124/154] ksmbd: fix slub overflow in ksmbd_decode_ntlmssp_auth_blob() Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 125/154] ksmbd: add missing calling smb2_set_err_rsp() on error Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 126/154] ksmbd: remove experimental warning Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 127/154] ksmbd: remove unneeded mark_inode_dirty in set_info_sec() Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 128/154] ksmbd: fix passing freed memory 'aux_payload_buf' Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 129/154] ksmbd: return invalid parameter error response if smb2 request is invalid Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 130/154] ksmbd: check iov vector index in ksmbd_conn_write() Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 131/154] ksmbd: fix race condition between session lookup and expire Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 132/154] ksmbd: fix race condition with fp Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 133/154] ksmbd: fix race condition from parallel smb2 logoff requests Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 134/154] ksmbd: fix race condition from parallel smb2 lock requests Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 135/154] ksmbd: fix race condition between tree conn lookup and disconnect Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 136/154] ksmbd: fix wrong error response status by using set_smb2_rsp_status() Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 137/154] ksmbd: fix Null pointer dereferences in ksmbd_update_fstate() Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 138/154] ksmbd: fix potential double free on smb2_read_pipe() error path Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 139/154] ksmbd: Remove unused field in ksmbd_user struct Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 140/154] ksmbd: reorganize ksmbd_iov_pin_rsp() Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 141/154] ksmbd: fix kernel-doc comment of ksmbd_vfs_setxattr() Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 142/154] ksmbd: fix recursive locking in vfs helpers Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 143/154] ksmbd: fix missing RDMA-capable flag for IPoIB device in ksmbd_rdma_capable_netdev() Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 144/154] ksmbd: add support for surrogate pair conversion Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 145/154] ksmbd: no need to wait for binded connection termination at logoff Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 146/154] ksmbd: fix kernel-doc comment of ksmbd_vfs_kern_path_locked() Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 147/154] ksmbd: handle malformed smb1 message Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 148/154] ksmbd: prevent memory leak on error return Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 149/154] ksmbd: fix possible deadlock in smb2_open Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 150/154] ksmbd: separately allocate ci per dentry Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 151/154] ksmbd: move oplock handling after unlock parent dir Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 152/154] ksmbd: release interim response after sending status pending response Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 153/154] ksmbd: move setting SMB2_FLAGS_ASYNC_COMMAND and AsyncId Namjae Jeon
2023-12-18 15:34 ` [PATCH 5.15.y 154/154] ksmbd: don't update ->op_state as OPLOCK_STATE_NONE on error Namjae Jeon
2023-12-20 14:41 ` [PATCH 5.15.y 000/154] ksmbd backport patches for 5.15.y Greg KH
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=20231218153454.8090-104-linkinjeon@kernel.org \
--to=linkinjeon@kernel.org \
--cc=amir73il@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=smfrench@gmail.com \
--cc=stable@vger.kernel.org \
--cc=stfrench@microsoft.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox