[Samba] symlinks loop detection in Samba?

Ralph Boehme slow at samba.org
Mon Jan 18 13:33:59 UTC 2021


Am 1/18/21 um 2:12 PM schrieb Giuseppe Lo Presti:
> On 18/01/2021 11:58, Ralph Boehme wrote:
>> Am 1/18/21 um 11:41 AM schrieb Giuseppe Lo Presti via samba:
>>> Following an old thread at [1] I wonder whether there's been any 
>>> thought/plan to implement symbolic links loop detection in smbd.
>>
>> what do you mean? smbd will detect loops because the kernel tells us 
>> about loops with ELOOP.
> 
> Well, that's what I hoped, but facts match what Jeremy mentioned at the 
> time:
> 
>  > the clients will see them [symlinks] as nested directories and request
>  > the server to follow them until the OS runs out of recursion
>  > depth and returns errors.
> 
> So no ELOOP is triggered, and requests just keep piling up from the client.
> 
> To reproduce, just create a link to '.' in a shared folder with `follow 
> symlinks = yes` and look at its properties from Windows (or copy it 
> over, but be ready to clean up the mess afterwards...).

I see the following:

$ ls -l /srv/samba/test/dir
total 0
lrwxrwxrwx. 1 slow slow 1 Jan 18 14:15 link -> .

ls 
/srv/samba/test/dir/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/
link

Works. Add another path component "link/" and we hit the kernel limit:

$ ls 
/srv/samba/test/dir/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/
ls: cannot access 
'/srv/samba/test/dir/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/': 
Too many levels of symbolic links

Now smbclient:

smb: \> ls 
dir/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/*
   .                                   D        0  Mon Jan 18 14:29:10 2021
   ..                                  D        0  Mon Jan 18 14:29:10 2021

                 102687672 blocks of size 1024. 57521480 blocks available

Add another "link/":

smb: \> ls 
dir/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/link/*
NT_STATUS_OBJECT_PATH_NOT_FOUND listing 
\dir\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\link\*

So I see the same expected behaviour over SMB as locally with ELOOP 
mapped to NT_STATUS_OBJECT_PATH_NOT_FOUND.

-slow

-- 
Ralph Boehme, Samba Team                https://samba.org/
Samba Developer, SerNet GmbH   https://sernet.de/en/samba/
GPG-Fingerprint   FAE2C6088A24252051C559E4AA1E9B7126399E46

-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <http://lists.samba.org/pipermail/samba/attachments/20210118/a7860b74/OpenPGP_signature.sig>


More information about the samba mailing list