lkml.org 
[lkml]   [2017]   [Oct]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 184/192] Compare prepaths when comparing superblocks
    3.16.49-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Sachin Prabhu <sprabhu@redhat.com>

    commit c1d8b24d18192764fe82067ec6aa8d4c3bf094e0 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: Sachin Prabhu <sprabhu@redhat.com>
    Tested-by: Aurelien Aptel <aaptel@suse.com>
    Signed-off-by: Steve French <smfrench@gmail.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    fs/cifs/connect.c | 21 ++++++++++++++++++++-
    1 file changed, 20 insertions(+), 1 deletion(-)

    --- a/fs/cifs/connect.c
    +++ b/fs/cifs/connect.c
    @@ -2751,6 +2751,24 @@ compare_mount_options(struct super_block
    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)
    {
    @@ -2778,7 +2796,8 @@ cifs_match_super(struct super_block *sb,

    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;
    }
    \
     
     \ /
      Last update: 2017-10-09 16:04    [W:4.400 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site