• Suresh Jayaraman's avatar
    PATCH] cifs: fix broken mounts when a SSH tunnel is used (try #4) · bdb97adc
    Suresh Jayaraman authored
    One more try..
    
    It seems there is a regression that got introduced while Jeff fixed
    all the mount/umount races. While attempting to find whether a tcp
    session is already existing, we were not checking whether the "port"
    used are the same. When a second mount is attempted with a different
    "port=" option, it is being ignored. Because of this the cifs mounts
    that uses a SSH tunnel appears to be broken.
    
    Steps to reproduce:
    
    1. create 2 shares
    # SSH Tunnel a SMB session
    2. ssh -f -L 6111:127.0.0.1:445 root@localhost "sleep 86400"
    3. ssh -f -L 6222:127.0.0.1:445 root@localhost "sleep 86400"
    4. tcpdump -i lo 6111 &
    5. mkdir -p /mnt/mnt1
    6. mkdir -p /mnt/mnt2
    7. mount.cifs //localhost/a /mnt/mnt1 -o username=guest,ip=127.0.0.1,port=6111
    #(shows tcpdump activity on port 6111)
    8. mount.cifs //localhost/b /mnt/mnt2 -o username=guest,ip=127.0.0.1,port=6222
    #(shows tcpdump activity only on port 6111 and not on 6222
    
    Fix by adding a check to compare the port _only_ if the user tries to
    override the tcp port with "port=" option, before deciding that an
    existing tcp session is found. Also, clean up a bit by replacing
    if-else if by a switch statment while at it as suggested by Jeff.
    Reviewed-by: default avatarJeff Layton <jlayton@redhat.com>
    Reviewed-by: default avatarShirish Pargaonkar <shirishp@us.ibm.com>
    Signed-off-by: default avatarSuresh Jayaraman <sjayaraman@suse.de>
    Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
    bdb97adc
connect.c 82.6 KB