• Takashi Iwai's avatar
    exfat: Return ENAMETOOLONG consistently for oversized paths · 86da53e8
    Takashi Iwai authored
    LTP has a test for oversized file path renames and it expects the
    return value to be ENAMETOOLONG.  However, exfat returns EINVAL
    unexpectedly in some cases, hence LTP test fails.  The further
    investigation indicated that the problem happens only when iocharset
    isn't set to utf8.
    
    The difference comes from that, in the case of utf8,
    exfat_utf8_to_utf16() returns the error -ENAMETOOLONG directly and
    it's treated as the final error code.  Meanwhile, on other iocharsets,
    exfat_nls_to_ucs2() returns the max path size but it sets
    NLS_NAME_OVERLEN to lossy flag instead; the caller side checks only
    whether lossy flag is set or not, resulting in always -EINVAL
    unconditionally.
    
    This patch aligns the return code for both cases by checking the lossy
    flag bit and returning ENAMETOOLONG when NLS_NAME_OVERLEN bit is set.
    
    BugLink: https://bugzilla.suse.com/show_bug.cgi?id=1201725Reviewed-by: default avatarPetr Vorel <pvorel@suse.cz>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    Signed-off-by: default avatarNamjae Jeon <linkinjeon@kernel.org>
    86da53e8
namei.c 34.7 KB