Patch "File names with trailing period or space need special case conversion" has been added to the 4.6-stable tree
This is a note to let you know that I've just added the patch titled
File names with trailing period or space need special case conversion
to the 4.6-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
file-names-with-trailing-period-or-space-need-special-case-conversion.patch
and it can be found in the queue-4.6 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
45e8a2583d97ca758a55c608f78c4cef562644d1Mon Sep 17 00:00:00 2001
From: Steve French <[email protected]>
Date: Wed, 22 Jun 2016 21:07:32 -0500
Subject: File names with trailing period or space need special case conversion
From: Steve French <[email protected]>
commit 45e8a2583d97ca758a55c608f78c4cef562644d1 upstream.
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.
--- fs/cifs/cifs_unicode.c | 33 +++++++++++++++++++++++++++++---- fs/cifs/cifs_unicode.h | 2 ++ 2 files changed, 31 insertions(+), 4 deletions(-)
fs/cifs/cifs_unicode.c +29 -4
@@ -101,6 +101,12 @@ convert_sfm_char(const __u16 src_char, ccase SFM_SLASH : *target ='\\' ;break ; +case SFM_SPACE : + *target =' ' ; +break ; +case SFM_PERIOD : + *target ='.' ; +break ;default :return false; }
@@ -404,7 +410,7 @@ static __le16 convert_to_sfu_char(char sreturn dest_char; } -static __le16 convert_to_sfm_char (char src_char) +static __le16 convert_to_sfm_char (char src_char,bool end_of_string) {__le16 dest_char;
@@ -427,6 +433,18 @@ static __le16 convert_to_sfm_char(char scase '|' : dest_char =cpu_to_le16 (SFM_PIPE );break ; +case '.' : +if (end_of_string) + dest_char =cpu_to_le16 (SFM_PERIOD ); +else + dest_char =0 ; +break ; +case ' ' : +if (end_of_string) + dest_char =cpu_to_le16 (SFM_SPACE ); +else + dest_char =0 ; +break ;default : dest_char =0 ; }
@@ -469,9 +487,16 @@ cifsConvertToUTF16(__le16 *target, const/* see if we must remap this char */ if (map_chars ==SFU_MAP_UNI_RSVD ) dst_char =convert_to_sfu_char (src_char); -else if (map_chars ==SFM_MAP_UNI_RSVD ) - dst_char =convert_to_sfm_char (src_char); -else +else if (map_chars ==SFM_MAP_UNI_RSVD ) { +bool end_of_string; + +if (i == srclen -1 ) + end_of_string = true; +else + end_of_string = false; + + dst_char =convert_to_sfm_char (src_char, end_of_string); + }else dst_char =0 ;/* * FIXME: We can not handle remapping backslash (UNI_SLASH)
fs/cifs/cifs_unicode.h +2 -0
@@ -64,6 +64,8 @@#define SFM_LESSTHAN ((__u16) 0xF023)#define SFM_PIPE ((__u16) 0xF027)#define SFM_SLASH ((__u16) 0xF026) +#define SFM_PERIOD ((__u16) 0xF028) +#define SFM_SPACE ((__u16) 0xF029)/* * Mapping mechanism to use when one of the seven reserved characters is
Patches currently in stable-queue which might be from [email protected] are
queue-4.6/fix-reconnect-to-not-defer-smb3-session-reconnect-long-after-socket-reconnect.patch queue-4.6/file-names-with-trailing-period-or-space-need-special-case-conversion.patch queue-4.6/cifs-dynamic-allocation-of-ntlmssp-blob.patch