@@ -320,7 +320,7 @@ static int generic_ip_connect(struct TCP_Server_Info *server);
320
320
static void tlink_rb_insert (struct rb_root * root , struct tcon_link * new_tlink );
321
321
static void cifs_prune_tlinks (struct work_struct * work );
322
322
static int cifs_setup_volume_info (struct smb_vol * volume_info , char * mount_data ,
323
- const char * devname );
323
+ const char * devname , bool is_smb3 );
324
324
325
325
/*
326
326
* cifs tcp session reconnection
@@ -1166,7 +1166,7 @@ cifs_parse_cache_flavor(char *value, struct smb_vol *vol)
1166
1166
}
1167
1167
1168
1168
static int
1169
- cifs_parse_smb_version (char * value , struct smb_vol * vol )
1169
+ cifs_parse_smb_version (char * value , struct smb_vol * vol , bool is_smb3 )
1170
1170
{
1171
1171
substring_t args [MAX_OPT_ARGS ];
1172
1172
@@ -1176,6 +1176,10 @@ cifs_parse_smb_version(char *value, struct smb_vol *vol)
1176
1176
cifs_dbg (VFS , "mount with legacy dialect disabled\n" );
1177
1177
return 1 ;
1178
1178
}
1179
+ if (is_smb3 ) {
1180
+ cifs_dbg (VFS , "vers=1.0 (cifs) not permitted when mounting with smb3\n" );
1181
+ return 1 ;
1182
+ }
1179
1183
vol -> ops = & smb1_operations ;
1180
1184
vol -> vals = & smb1_values ;
1181
1185
break ;
@@ -1184,6 +1188,10 @@ cifs_parse_smb_version(char *value, struct smb_vol *vol)
1184
1188
cifs_dbg (VFS , "mount with legacy dialect disabled\n" );
1185
1189
return 1 ;
1186
1190
}
1191
+ if (is_smb3 ) {
1192
+ cifs_dbg (VFS , "vers=2.0 not permitted when mounting with smb3\n" );
1193
+ return 1 ;
1194
+ }
1187
1195
vol -> ops = & smb20_operations ;
1188
1196
vol -> vals = & smb20_values ;
1189
1197
break ;
@@ -1272,7 +1280,7 @@ cifs_parse_devname(const char *devname, struct smb_vol *vol)
1272
1280
1273
1281
static int
1274
1282
cifs_parse_mount_options (const char * mountdata , const char * devname ,
1275
- struct smb_vol * vol )
1283
+ struct smb_vol * vol , bool is_smb3 )
1276
1284
{
1277
1285
char * data , * end ;
1278
1286
char * mountdata_copy = NULL , * options ;
@@ -1985,7 +1993,7 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
1985
1993
if (string == NULL )
1986
1994
goto out_nomem ;
1987
1995
1988
- if (cifs_parse_smb_version (string , vol ) != 0 )
1996
+ if (cifs_parse_smb_version (string , vol , is_smb3 ) != 0 )
1989
1997
goto cifs_parse_mount_err ;
1990
1998
got_version = true;
1991
1999
break ;
@@ -3797,7 +3805,7 @@ expand_dfs_referral(const unsigned int xid, struct cifs_ses *ses,
3797
3805
} else {
3798
3806
cleanup_volume_info_contents (volume_info );
3799
3807
rc = cifs_setup_volume_info (volume_info , mdata ,
3800
- fake_devname );
3808
+ fake_devname , false );
3801
3809
}
3802
3810
kfree (fake_devname );
3803
3811
kfree (cifs_sb -> mountdata );
@@ -3810,11 +3818,11 @@ expand_dfs_referral(const unsigned int xid, struct cifs_ses *ses,
3810
3818
3811
3819
static int
3812
3820
cifs_setup_volume_info (struct smb_vol * volume_info , char * mount_data ,
3813
- const char * devname )
3821
+ const char * devname , bool is_smb3 )
3814
3822
{
3815
3823
int rc = 0 ;
3816
3824
3817
- if (cifs_parse_mount_options (mount_data , devname , volume_info ))
3825
+ if (cifs_parse_mount_options (mount_data , devname , volume_info , is_smb3 ))
3818
3826
return - EINVAL ;
3819
3827
3820
3828
if (volume_info -> nullauth ) {
@@ -3848,7 +3856,7 @@ cifs_setup_volume_info(struct smb_vol *volume_info, char *mount_data,
3848
3856
}
3849
3857
3850
3858
struct smb_vol *
3851
- cifs_get_volume_info (char * mount_data , const char * devname )
3859
+ cifs_get_volume_info (char * mount_data , const char * devname , bool is_smb3 )
3852
3860
{
3853
3861
int rc ;
3854
3862
struct smb_vol * volume_info ;
@@ -3857,7 +3865,7 @@ cifs_get_volume_info(char *mount_data, const char *devname)
3857
3865
if (!volume_info )
3858
3866
return ERR_PTR (- ENOMEM );
3859
3867
3860
- rc = cifs_setup_volume_info (volume_info , mount_data , devname );
3868
+ rc = cifs_setup_volume_info (volume_info , mount_data , devname , is_smb3 );
3861
3869
if (rc ) {
3862
3870
cifs_cleanup_volume_info (volume_info );
3863
3871
volume_info = ERR_PTR (rc );
0 commit comments