Commit 5c33dcb4 authored by Sachin Prabhu's avatar Sachin Prabhu Committed by Willy Tarreau

Compare prepaths when comparing superblocks

commit c1d8b24d upstream.

The patch
Fs/cifs: make share unaccessible at root level mountable
makes use of prepaths when any component of the underlying path is
inaccessible.

When mounting 2 separate shares having different prepaths but are other
wise similar in other respects, we end up sharing superblocks when we
shouldn't be doing so.
Signed-off-by: default avatarSachin Prabhu <sprabhu@redhat.com>
Tested-by: default avatarAurelien Aptel <aaptel@suse.com>
Signed-off-by: default avatarSteve French <smfrench@gmail.com>
Acked-by: default avatarAurelien Aptel <aaptel@suse.com>
Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
Signed-off-by: default avatarWilly Tarreau <w@1wt.eu>
parent 528d066d
......@@ -2735,6 +2735,24 @@ compare_mount_options(struct super_block *sb, struct cifs_mnt_data *mnt_data)
return 1;
}
static int
match_prepath(struct super_block *sb, struct cifs_mnt_data *mnt_data)
{
struct cifs_sb_info *old = CIFS_SB(sb);
struct cifs_sb_info *new = mnt_data->cifs_sb;
if (old->mnt_cifs_flags & CIFS_MOUNT_USE_PREFIX_PATH) {
if (!(new->mnt_cifs_flags & CIFS_MOUNT_USE_PREFIX_PATH))
return 0;
/* The prepath should be null terminated strings */
if (strcmp(new->prepath, old->prepath))
return 0;
return 1;
}
return 0;
}
int
cifs_match_super(struct super_block *sb, void *data)
{
......@@ -2762,7 +2780,8 @@ cifs_match_super(struct super_block *sb, void *data)
if (!match_server(tcp_srv, volume_info) ||
!match_session(ses, volume_info) ||
!match_tcon(tcon, volume_info->UNC)) {
!match_tcon(tcon, volume_info->UNC) ||
!match_prepath(sb, mnt_data)) {
rc = 0;
goto out;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment