summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/fs/smbsrv/smb_odir.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/fs/smbsrv/smb_odir.c')
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_odir.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/usr/src/uts/common/fs/smbsrv/smb_odir.c b/usr/src/uts/common/fs/smbsrv/smb_odir.c
index c953aa05a5..c89bee8e98 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_odir.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_odir.c
@@ -243,7 +243,6 @@
* See smb_search, smb_find, smb_find_unique, and smb_trans2_find for details
*/
-#include <smbsrv/smb_incl.h>
#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
#include <smbsrv/smb_share.h>
@@ -573,7 +572,7 @@ int
smb_odir_read_fileinfo(smb_request_t *sr, smb_odir_t *od,
smb_fileinfo_t *fileinfo, boolean_t *eof)
{
- int rc;
+ int rc, errnum;
smb_odirent_t *odirent;
boolean_t ignore_case;
@@ -612,6 +611,12 @@ smb_odir_read_fileinfo(smb_request_t *sr, smb_odir_t *od,
if ((rc = smb_odir_next_odirent(od, odirent)) != 0)
break;
+ /* skip non utf8 filename */
+ if (u8_validate(odirent->od_name,
+ strlen(odirent->od_name), NULL,
+ U8_VALIDATE_ENTIRE, &errnum) < 0)
+ continue;
+
if (!smb_match_name(odirent->od_ino, odirent->od_name,
od->d_pattern, ignore_case))
continue;