[linux-cifs-client] PATCH] cifs: fix broken mounts when a SSH tunnel is used (try #4)

Jeff Layton jlayton at redhat.com
Thu Aug 20 04:44:08 MDT 2009


On Thu, 20 Aug 2009 13:03:34 +0530
Suresh Jayaraman <sjayaraman at suse.de> wrote:

> 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 at localhost "sleep 86400"
> 3. ssh -f -L 6222:127.0.0.1:445 root at 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.
> 
> Signed-off-by: Suresh Jayaraman <sjayaraman at suse.de>
> ---
> 


Still a little more nested that I would have preferred...

I'd have probably had it do this for each family:

if (addrs don't match)
	continue;
if (ports don't match)
	continue
break;

...but that's a rather minor point.

Acked-by: Jeff Layton <jlayton at redhat.com>


More information about the linux-cifs-client mailing list