Bug 13712 - Unable to access files below folder name with trailing dot or space
Summary: Unable to access files below folder name with trailing dot or space
Status: RESOLVED FIXED
Alias: None
Product: CifsVFS
Classification: Unclassified
Component: kernel fs (show other bugs)
Version: 3.x
Hardware: All All
: P5 normal
Target Milestone: ---
Assignee: Steve French
QA Contact: cifs QA contact
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-12-14 01:47 UTC by Jan Edler
Modified: 2021-01-09 23:40 UTC (History)
1 user (show)

See Also:


Attachments
patch for cifsConvertToUTF16() (758 bytes, patch)
2018-12-14 01:53 UTC, Jan Edler
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Jan Edler 2018-12-14 01:47:23 UTC
There's a problem, I believe an oversight, in the fix for bug 11206.

# mount.cifs //windowshost/share /mnt -overs=3.0,mapposix,iocharset=utf8,user=xxx,domain=yyy,password=zzz

# cd /mnt/tricky-names
# mkdir dir-trailing-dot.
# ls
dir-trailing-dot.
# echo foo >dir-trailing-dot./foo
-bash: dir-trailing-dot./foo: No such file or directory
# mkdir x
# echo foo >x/foo
# mv x dir2-trailing-dot.
# ls dir2-trailing-dot.
foo
# cat dir2-trailing-dot./foo
cat: dir2-trailing-dot./foo: No such file or directory

I used the CentOS 3.10.0-957.1.3.el7.x86_64 kernel and cifs module,
but I think every modern version has the same problem.

I'll attach a patch for the fix that we are using.
Comment 1 Jan Edler 2018-12-14 01:53:57 UTC
Created attachment 14738 [details]
patch for cifsConvertToUTF16()
Comment 2 Björn Jacke 2021-01-07 14:46:29 UTC
resolving this as a dup of bug 11206 - with kernel 5.8 this is working fine. If the old kernel od CentOS/RHEL doesn't have the fix you need to file a bug report in their bug tracker.

*** This bug has been marked as a duplicate of bug 11206 ***
Comment 3 Björn Jacke 2021-01-07 14:57:46 UTC
sory, I need to correct myself, the testcase you mention is really broken!

Steve or someone else who feels responsible for cifs vfs bug repost, can you have a look at this, please?
Comment 4 Steve French 2021-01-07 15:34:42 UTC
Can you tell me which version you still see it failing in?  It works for me in 5.10. See below:

root@smfrench-ThinkPad-P52:/mnt2# mkdir subdir
root@smfrench-ThinkPad-P52:/mnt2# cd subdir
root@smfrench-ThinkPad-P52:/mnt2/subdir# mkdir dir-trailing-dot.
root@smfrench-ThinkPad-P52:/mnt2/subdir# ls
dir-trailing-dot.
root@smfrench-ThinkPad-P52:/mnt2/subdir# echo foo > dir-trailing-dot./foo
root@smfrench-ThinkPad-P52:/mnt2/subdir# mkdir x
root@smfrench-ThinkPad-P52:/mnt2/subdir# echo foo > x/foo
root@smfrench-ThinkPad-P52:/mnt2/subdir# mv x dir2-trailing-dot.
root@smfrench-ThinkPad-P52:/mnt2/subdir# ls dir2-trailing-dot.
foo
root@smfrench-ThinkPad-P52:/mnt2/subdir# cat dir2-trailing-dot./foo
foo
root@smfrench-ThinkPad-P52:/mnt2/subdir# mount | grep cifs
//localhost/scratch on /mnt2 type cifs (rw,relatime,vers=3.1.1,cache=strict,username=smfrench,uid=0,noforceuid,gid=0,noforcegid,addr=127.0.0.1,file_mode=0755,dir_mode=0755,soft,nounix,serverino,mapposix,mfsymlinks,rsize=4194304,wsize=4194304,bsize=1048576,echo_interval=60,actimeo=1)

This was fixed multiple years ago in patch:
commit 45e8a2583d97ca758a55c608f78c4cef562644d1
Author: Steve French <smfrench@gmail.com>
Date:   Wed Jun 22 21:07:32 2016 -0500

    File names with trailing period or space need special case conversion
    
    POSIX allows files with trailing spaces or a trailing period but
    SMB3 does not, so convert these using the normal Services For Mac
    mapping as we do for other reserved characters such as
            : < > | ? *
    This is similar to what Macs do for the same problem over SMB3.
    
    CC: Stable <stable@vger.kernel.org>
    Signed-off-by: Steve French <steve.french@primarydata.com>
    Acked-by: Pavel Shilovsky <pshilovsky@samba.org>
Comment 5 Björn Jacke 2021-01-07 15:46:12 UTC
it's a  quite recent kernel here:

root@cifstest1:/mnt2# uname -a
Linux cifstest1 5.8.0-33-generic #36~20.04.1-Ubuntu SMP Wed Dec 9 17:01:13 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

root@cifstest1:/mnt2# mkdir dir-trailing-dot.
root@cifstest1:/mnt2# ls dir-trailing-dot.
root@cifstest1:/mnt2# echo foo >dir-trailing-dot./foo
-bash: dir-trailing-dot./foo: Datei oder Verzeichnis nicht gefunden
root@cifstest1:/mnt2# uname -a
Linux cifstest1.int.sernet.de 5.8.0-33-generic #36~20.04.1-Ubuntu SMP Wed Dec 9 17:01:13 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
Comment 6 Jan Edler 2021-01-07 16:03:02 UTC
The patch I provided in comment 1 only helps if cifsConvertToUTF16() is called for a full path, of course.
Perhaps that is not always the case.
Comment 7 Steve French 2021-01-08 00:02:50 UTC
Here is the additional patch which helps with the case where the path component with the trailing space or . (period) is not at the end of the path.

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/fs/cifs?id=57c176074057531b249cf522d90c22313fa74b0b
Comment 8 Steve French 2021-01-08 00:03:21 UTC
The additional fix is in 5.10
Comment 9 Björn Jacke 2021-01-09 23:40:29 UTC
Steve, it would be very good if you would backport this to all the stable kernels, which have the unfixed tailing dot behaviour because without the patch that you mention, cifs vfs behaves completely broken in casees where such a directory exists.