From: kernel test robot <lkp@intel.com>
To: Steve French <stfrench@microsoft.com>
Cc: oe-kbuild-all@lists.linux.dev
Subject: [samba-ksmbd:for-next 4/8] fs/smb/client/fs_context.c:1304:46: warning: right-hand operand of comma expression has no effect
Date: Mon, 18 Nov 2024 11:29:02 +0800 [thread overview]
Message-ID: <202411181123.p7SWs3fS-lkp@intel.com> (raw)
tree: git://git.samba.org/ksmbd.git for-next
head: 74dd969febbf9f16ca03f880b2020906e1666227
commit: f4efd0937eeb59de552bcfab2305e19b2a381913 [4/8] smb3 client: minor cleanup of username parsing on mount
config: x86_64-rhel-9.4 (https://download.01.org/0day-ci/archive/20241118/202411181123.p7SWs3fS-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241118/202411181123.p7SWs3fS-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202411181123.p7SWs3fS-lkp@intel.com/
All warnings (new ones prefixed by >>):
fs/smb/client/fs_context.c: In function 'smb3_fs_context_parse_param':
>> fs/smb/client/fs_context.c:1304:46: warning: right-hand operand of comma expression has no effect [-Wunused-value]
1304 | ctx->username = param->string, GFP_KERNEL;
| ^
>> fs/smb/client/fs_context.c:1306:31: warning: statement with no effect [-Wunused-value]
1306 | param->string == NULL;
vim +1304 fs/smb/client/fs_context.c
954
955 static int smb3_fs_context_parse_param(struct fs_context *fc,
956 struct fs_parameter *param)
957 {
958 struct fs_parse_result result;
959 struct smb3_fs_context *ctx = smb3_fc2context(fc);
960 int i, opt;
961 bool is_smb3 = !strcmp(fc->fs_type->name, "smb3");
962 bool skip_parsing = false;
963
964 cifs_dbg(FYI, "CIFS: parsing cifs mount option '%s'\n", param->key);
965
966 /*
967 * fs_parse can not handle string options with an empty value so
968 * we will need special handling of them.
969 */
970 if (param->type == fs_value_is_string && param->string[0] == 0) {
971 if (!strcmp("pass", param->key) || !strcmp("password", param->key)) {
972 skip_parsing = true;
973 opt = Opt_pass;
974 } else if (!strcmp("user", param->key) || !strcmp("username", param->key)) {
975 skip_parsing = true;
976 opt = Opt_user;
977 }
978 }
979
980 if (!skip_parsing) {
981 opt = fs_parse(fc, smb3_fs_parameters, param, &result);
982 if (opt < 0)
983 return ctx->sloppy ? 1 : opt;
984 }
985
986 switch (opt) {
987 case Opt_compress:
988 if (!IS_ENABLED(CONFIG_CIFS_COMPRESSION)) {
989 cifs_errorf(fc, "CONFIG_CIFS_COMPRESSION kernel config option is unset\n");
990 goto cifs_parse_mount_err;
991 }
992 ctx->compress = true;
993 cifs_dbg(VFS, "SMB3 compression support is experimental\n");
994 break;
995 case Opt_nodfs:
996 ctx->nodfs = 1;
997 break;
998 case Opt_hard:
999 if (result.negated) {
1000 if (ctx->retry == 1)
1001 cifs_dbg(VFS, "conflicting hard vs. soft mount options\n");
1002 ctx->retry = 0;
1003 } else
1004 ctx->retry = 1;
1005 break;
1006 case Opt_soft:
1007 if (result.negated)
1008 ctx->retry = 1;
1009 else {
1010 if (ctx->retry == 1)
1011 cifs_dbg(VFS, "conflicting hard vs soft mount options\n");
1012 ctx->retry = 0;
1013 }
1014 break;
1015 case Opt_mapposix:
1016 if (result.negated)
1017 ctx->remap = false;
1018 else {
1019 ctx->remap = true;
1020 ctx->sfu_remap = false; /* disable SFU mapping */
1021 }
1022 break;
1023 case Opt_mapchars:
1024 if (result.negated)
1025 ctx->sfu_remap = false;
1026 else {
1027 ctx->sfu_remap = true;
1028 ctx->remap = false; /* disable SFM (mapposix) mapping */
1029 }
1030 break;
1031 case Opt_user_xattr:
1032 if (result.negated)
1033 ctx->no_xattr = 1;
1034 else
1035 ctx->no_xattr = 0;
1036 break;
1037 case Opt_forceuid:
1038 if (result.negated)
1039 ctx->override_uid = 0;
1040 else
1041 ctx->override_uid = 1;
1042 ctx->forceuid_specified = true;
1043 break;
1044 case Opt_forcegid:
1045 if (result.negated)
1046 ctx->override_gid = 0;
1047 else
1048 ctx->override_gid = 1;
1049 ctx->forcegid_specified = true;
1050 break;
1051 case Opt_perm:
1052 if (result.negated)
1053 ctx->noperm = 1;
1054 else
1055 ctx->noperm = 0;
1056 break;
1057 case Opt_dynperm:
1058 if (result.negated)
1059 ctx->dynperm = 0;
1060 else
1061 ctx->dynperm = 1;
1062 break;
1063 case Opt_sfu:
1064 if (result.negated)
1065 ctx->sfu_emul = 0;
1066 else
1067 ctx->sfu_emul = 1;
1068 break;
1069 case Opt_noblocksend:
1070 ctx->noblocksnd = 1;
1071 break;
1072 case Opt_noautotune:
1073 ctx->noautotune = 1;
1074 break;
1075 case Opt_nolease:
1076 ctx->no_lease = 1;
1077 break;
1078 case Opt_nosparse:
1079 ctx->no_sparse = 1;
1080 break;
1081 case Opt_nodelete:
1082 ctx->nodelete = 1;
1083 break;
1084 case Opt_multichannel:
1085 if (result.negated) {
1086 ctx->multichannel = false;
1087 ctx->max_channels = 1;
1088 } else {
1089 ctx->multichannel = true;
1090 /* if number of channels not specified, default to 2 */
1091 if (ctx->max_channels < 2)
1092 ctx->max_channels = 2;
1093 }
1094 break;
1095 case Opt_uid:
1096 ctx->linux_uid = result.uid;
1097 ctx->uid_specified = true;
1098 break;
1099 case Opt_cruid:
1100 ctx->cred_uid = result.uid;
1101 ctx->cruid_specified = true;
1102 break;
1103 case Opt_backupuid:
1104 ctx->backupuid = result.uid;
1105 ctx->backupuid_specified = true;
1106 break;
1107 case Opt_backupgid:
1108 ctx->backupgid = result.gid;
1109 ctx->backupgid_specified = true;
1110 break;
1111 case Opt_gid:
1112 ctx->linux_gid = result.gid;
1113 ctx->gid_specified = true;
1114 break;
1115 case Opt_port:
1116 ctx->port = result.uint_32;
1117 break;
1118 case Opt_file_mode:
1119 ctx->file_mode = result.uint_32;
1120 break;
1121 case Opt_dirmode:
1122 ctx->dir_mode = result.uint_32;
1123 break;
1124 case Opt_min_enc_offload:
1125 ctx->min_offload = result.uint_32;
1126 break;
1127 case Opt_retrans:
1128 ctx->retrans = result.uint_32;
1129 break;
1130 case Opt_blocksize:
1131 /*
1132 * inode blocksize realistically should never need to be
1133 * less than 16K or greater than 16M and default is 1MB.
1134 * Note that small inode block sizes (e.g. 64K) can lead
1135 * to very poor performance of common tools like cp and scp
1136 */
1137 if ((result.uint_32 < CIFS_MAX_MSGSIZE) ||
1138 (result.uint_32 > (4 * SMB3_DEFAULT_IOSIZE))) {
1139 cifs_errorf(fc, "%s: Invalid blocksize\n",
1140 __func__);
1141 goto cifs_parse_mount_err;
1142 }
1143 ctx->bsize = result.uint_32;
1144 ctx->got_bsize = true;
1145 break;
1146 case Opt_rasize:
1147 /*
1148 * readahead size realistically should never need to be
1149 * less than 1M (CIFS_DEFAULT_IOSIZE) or greater than 32M
1150 * (perhaps an exception should be considered in the
1151 * for the case of a large number of channels
1152 * when multichannel is negotiated) since that would lead
1153 * to plenty of parallel I/O in flight to the server.
1154 * Note that smaller read ahead sizes would
1155 * hurt performance of common tools like cp and scp
1156 * which often trigger sequential i/o with read ahead
1157 */
1158 if ((result.uint_32 > (8 * SMB3_DEFAULT_IOSIZE)) ||
1159 (result.uint_32 < CIFS_DEFAULT_IOSIZE)) {
1160 cifs_errorf(fc, "%s: Invalid rasize %d vs. %d\n",
1161 __func__, result.uint_32, SMB3_DEFAULT_IOSIZE);
1162 goto cifs_parse_mount_err;
1163 }
1164 ctx->rasize = result.uint_32;
1165 break;
1166 case Opt_rsize:
1167 ctx->rsize = result.uint_32;
1168 ctx->got_rsize = true;
1169 break;
1170 case Opt_wsize:
1171 ctx->wsize = result.uint_32;
1172 ctx->got_wsize = true;
1173 if (ctx->wsize % PAGE_SIZE != 0) {
1174 ctx->wsize = round_down(ctx->wsize, PAGE_SIZE);
1175 if (ctx->wsize == 0) {
1176 ctx->wsize = PAGE_SIZE;
1177 cifs_dbg(VFS, "wsize too small, reset to minimum %ld\n", PAGE_SIZE);
1178 } else {
1179 cifs_dbg(VFS,
1180 "wsize rounded down to %d to multiple of PAGE_SIZE %ld\n",
1181 ctx->wsize, PAGE_SIZE);
1182 }
1183 }
1184 break;
1185 case Opt_acregmax:
1186 ctx->acregmax = HZ * result.uint_32;
1187 if (ctx->acregmax > CIFS_MAX_ACTIMEO) {
1188 cifs_errorf(fc, "acregmax too large\n");
1189 goto cifs_parse_mount_err;
1190 }
1191 break;
1192 case Opt_acdirmax:
1193 ctx->acdirmax = HZ * result.uint_32;
1194 if (ctx->acdirmax > CIFS_MAX_ACTIMEO) {
1195 cifs_errorf(fc, "acdirmax too large\n");
1196 goto cifs_parse_mount_err;
1197 }
1198 break;
1199 case Opt_actimeo:
1200 if (HZ * result.uint_32 > CIFS_MAX_ACTIMEO) {
1201 cifs_errorf(fc, "timeout too large\n");
1202 goto cifs_parse_mount_err;
1203 }
1204 if ((ctx->acdirmax != CIFS_DEF_ACTIMEO) ||
1205 (ctx->acregmax != CIFS_DEF_ACTIMEO)) {
1206 cifs_errorf(fc, "actimeo ignored since acregmax or acdirmax specified\n");
1207 break;
1208 }
1209 ctx->acdirmax = ctx->acregmax = HZ * result.uint_32;
1210 break;
1211 case Opt_closetimeo:
1212 ctx->closetimeo = HZ * result.uint_32;
1213 if (ctx->closetimeo > SMB3_MAX_DCLOSETIMEO) {
1214 cifs_errorf(fc, "closetimeo too large\n");
1215 goto cifs_parse_mount_err;
1216 }
1217 break;
1218 case Opt_echo_interval:
1219 ctx->echo_interval = result.uint_32;
1220 break;
1221 case Opt_snapshot:
1222 ctx->snapshot_time = result.uint_64;
1223 break;
1224 case Opt_max_credits:
1225 if (result.uint_32 < 20 || result.uint_32 > 60000) {
1226 cifs_errorf(fc, "%s: Invalid max_credits value\n",
1227 __func__);
1228 goto cifs_parse_mount_err;
1229 }
1230 ctx->max_credits = result.uint_32;
1231 break;
1232 case Opt_max_channels:
1233 if (result.uint_32 < 1 || result.uint_32 > CIFS_MAX_CHANNELS) {
1234 cifs_errorf(fc, "%s: Invalid max_channels value, needs to be 1-%d\n",
1235 __func__, CIFS_MAX_CHANNELS);
1236 goto cifs_parse_mount_err;
1237 }
1238 ctx->max_channels = result.uint_32;
1239 /* If more than one channel requested ... they want multichan */
1240 if (result.uint_32 > 1)
1241 ctx->multichannel = true;
1242 break;
1243 case Opt_max_cached_dirs:
1244 if (result.uint_32 < 1) {
1245 cifs_errorf(fc, "%s: Invalid max_cached_dirs, needs to be 1 or more\n",
1246 __func__);
1247 goto cifs_parse_mount_err;
1248 }
1249 ctx->max_cached_dirs = result.uint_32;
1250 break;
1251 case Opt_handletimeout:
1252 ctx->handle_timeout = result.uint_32;
1253 if (ctx->handle_timeout > SMB3_MAX_HANDLE_TIMEOUT) {
1254 cifs_errorf(fc, "Invalid handle cache timeout, longer than 16 minutes\n");
1255 goto cifs_parse_mount_err;
1256 }
1257 break;
1258 case Opt_source:
1259 kfree(ctx->UNC);
1260 ctx->UNC = NULL;
1261 switch (smb3_parse_devname(param->string, ctx)) {
1262 case 0:
1263 break;
1264 case -ENOMEM:
1265 cifs_errorf(fc, "Unable to allocate memory for devname\n");
1266 goto cifs_parse_mount_err;
1267 case -EINVAL:
1268 cifs_errorf(fc, "Malformed UNC in devname\n");
1269 goto cifs_parse_mount_err;
1270 default:
1271 cifs_errorf(fc, "Unknown error parsing devname\n");
1272 goto cifs_parse_mount_err;
1273 }
1274 ctx->source = smb3_fs_context_fullpath(ctx, '/');
1275 if (IS_ERR(ctx->source)) {
1276 ctx->source = NULL;
1277 cifs_errorf(fc, "OOM when copying UNC string\n");
1278 goto cifs_parse_mount_err;
1279 }
1280 fc->source = kstrdup(ctx->source, GFP_KERNEL);
1281 if (fc->source == NULL) {
1282 cifs_errorf(fc, "OOM when copying UNC string\n");
1283 goto cifs_parse_mount_err;
1284 }
1285 break;
1286 case Opt_user:
1287 kfree(ctx->username);
1288 ctx->username = NULL;
1289 if (ctx->nullauth)
1290 break;
1291
1292 /* if first character is null, then anonymous auth */
1293 if (*(param->string) == 0) {
1294 /* null user, ie. anonymous authentication */
1295 ctx->nullauth = 1;
1296 break;
1297 }
1298
1299 if (strnlen(param->string, CIFS_MAX_USERNAME_LEN) >
1300 CIFS_MAX_USERNAME_LEN) {
1301 pr_warn("username too long\n");
1302 goto cifs_parse_mount_err;
1303 }
> 1304 ctx->username = param->string, GFP_KERNEL;
1305 /* streal string from caller, but set to NULL so caller doesn't free */
> 1306 param->string == NULL;
1307 break;
1308 case Opt_pass:
1309 kfree_sensitive(ctx->password);
1310 ctx->password = NULL;
1311 if (strlen(param->string) == 0)
1312 break;
1313
1314 ctx->password = kstrdup(param->string, GFP_KERNEL);
1315 if (ctx->password == NULL) {
1316 cifs_errorf(fc, "OOM when copying password string\n");
1317 goto cifs_parse_mount_err;
1318 }
1319 break;
1320 case Opt_pass2:
1321 kfree_sensitive(ctx->password2);
1322 ctx->password2 = NULL;
1323 if (strlen(param->string) == 0)
1324 break;
1325
1326 ctx->password2 = kstrdup(param->string, GFP_KERNEL);
1327 if (ctx->password2 == NULL) {
1328 cifs_errorf(fc, "OOM when copying password2 string\n");
1329 goto cifs_parse_mount_err;
1330 }
1331 break;
1332 case Opt_ip:
1333 if (strlen(param->string) == 0) {
1334 ctx->got_ip = false;
1335 break;
1336 }
1337 if (!cifs_convert_address((struct sockaddr *)&ctx->dstaddr,
1338 param->string,
1339 strlen(param->string))) {
1340 pr_err("bad ip= option (%s)\n", param->string);
1341 goto cifs_parse_mount_err;
1342 }
1343 ctx->got_ip = true;
1344 break;
1345 case Opt_domain:
1346 if (strnlen(param->string, CIFS_MAX_DOMAINNAME_LEN)
1347 == CIFS_MAX_DOMAINNAME_LEN) {
1348 pr_warn("domain name too long\n");
1349 goto cifs_parse_mount_err;
1350 }
1351
1352 kfree(ctx->domainname);
1353 ctx->domainname = kstrdup(param->string, GFP_KERNEL);
1354 if (ctx->domainname == NULL) {
1355 cifs_errorf(fc, "OOM when copying domainname string\n");
1356 goto cifs_parse_mount_err;
1357 }
1358 cifs_dbg(FYI, "Domain name set\n");
1359 break;
1360 case Opt_srcaddr:
1361 if (!cifs_convert_address(
1362 (struct sockaddr *)&ctx->srcaddr,
1363 param->string, strlen(param->string))) {
1364 pr_warn("Could not parse srcaddr: %s\n",
1365 param->string);
1366 goto cifs_parse_mount_err;
1367 }
1368 break;
1369 case Opt_iocharset:
1370 if (strnlen(param->string, 1024) >= 65) {
1371 pr_warn("iocharset name too long\n");
1372 goto cifs_parse_mount_err;
1373 }
1374
1375 if (strncasecmp(param->string, "default", 7) != 0) {
1376 kfree(ctx->iocharset);
1377 ctx->iocharset = kstrdup(param->string, GFP_KERNEL);
1378 if (ctx->iocharset == NULL) {
1379 cifs_errorf(fc, "OOM when copying iocharset string\n");
1380 goto cifs_parse_mount_err;
1381 }
1382 }
1383 /* if iocharset not set then load_nls_default
1384 * is used by caller
1385 */
1386 cifs_dbg(FYI, "iocharset set to %s\n", ctx->iocharset);
1387 break;
1388 case Opt_netbiosname:
1389 memset(ctx->source_rfc1001_name, 0x20,
1390 RFC1001_NAME_LEN);
1391 /*
1392 * FIXME: are there cases in which a comma can
1393 * be valid in workstation netbios name (and
1394 * need special handling)?
1395 */
1396 for (i = 0; i < RFC1001_NAME_LEN; i++) {
1397 /* don't ucase netbiosname for user */
1398 if (param->string[i] == 0)
1399 break;
1400 ctx->source_rfc1001_name[i] = param->string[i];
1401 }
1402 /* The string has 16th byte zero still from
1403 * set at top of the function
1404 */
1405 if (i == RFC1001_NAME_LEN && param->string[i] != 0)
1406 pr_warn("netbiosname longer than 15 truncated\n");
1407 break;
1408 case Opt_servern:
1409 /* last byte, type, is 0x20 for servr type */
1410 memset(ctx->target_rfc1001_name, 0x20,
1411 RFC1001_NAME_LEN_WITH_NULL);
1412 /*
1413 * BB are there cases in which a comma can be valid in this
1414 * workstation netbios name (and need special handling)?
1415 */
1416
1417 /* user or mount helper must uppercase the netbios name */
1418 for (i = 0; i < 15; i++) {
1419 if (param->string[i] == 0)
1420 break;
1421 ctx->target_rfc1001_name[i] = param->string[i];
1422 }
1423
1424 /* The string has 16th byte zero still from set at top of function */
1425 if (i == RFC1001_NAME_LEN && param->string[i] != 0)
1426 pr_warn("server netbiosname longer than 15 truncated\n");
1427 break;
1428 case Opt_ver:
1429 /* version of mount userspace tools, not dialect */
1430 /* If interface changes in mount.cifs bump to new ver */
1431 if (strncasecmp(param->string, "1", 1) == 0) {
1432 if (strlen(param->string) > 1) {
1433 pr_warn("Bad mount helper ver=%s. Did you want SMB1 (CIFS) dialect and mean to type vers=1.0 instead?\n",
1434 param->string);
1435 goto cifs_parse_mount_err;
1436 }
1437 /* This is the default */
1438 break;
1439 }
1440 /* For all other value, error */
1441 pr_warn("Invalid mount helper version specified\n");
1442 goto cifs_parse_mount_err;
1443 case Opt_vers:
1444 /* protocol version (dialect) */
1445 if (cifs_parse_smb_version(fc, param->string, ctx, is_smb3) != 0)
1446 goto cifs_parse_mount_err;
1447 ctx->got_version = true;
1448 break;
1449 case Opt_sec:
1450 if (cifs_parse_security_flavors(fc, param->string, ctx) != 0)
1451 goto cifs_parse_mount_err;
1452 break;
1453 case Opt_cache:
1454 if (cifs_parse_cache_flavor(fc, param->string, ctx) != 0)
1455 goto cifs_parse_mount_err;
1456 break;
1457 case Opt_witness:
1458 #ifndef CONFIG_CIFS_SWN_UPCALL
1459 cifs_errorf(fc, "Witness support needs CONFIG_CIFS_SWN_UPCALL config option\n");
1460 goto cifs_parse_mount_err;
1461 #endif
1462 ctx->witness = true;
1463 pr_warn_once("Witness protocol support is experimental\n");
1464 break;
1465 case Opt_rootfs:
1466 #ifndef CONFIG_CIFS_ROOT
1467 cifs_dbg(VFS, "rootfs support requires CONFIG_CIFS_ROOT config option\n");
1468 goto cifs_parse_mount_err;
1469 #endif
1470 ctx->rootfs = true;
1471 break;
1472 case Opt_posixpaths:
1473 if (result.negated)
1474 ctx->posix_paths = 0;
1475 else
1476 ctx->posix_paths = 1;
1477 break;
1478 case Opt_unix:
1479 if (result.negated) {
1480 if (ctx->linux_ext == 1)
1481 pr_warn_once("conflicting posix mount options specified\n");
1482 ctx->linux_ext = 0;
1483 ctx->no_linux_ext = 1;
1484 } else {
1485 if (ctx->no_linux_ext == 1)
1486 pr_warn_once("conflicting posix mount options specified\n");
1487 ctx->linux_ext = 1;
1488 ctx->no_linux_ext = 0;
1489 }
1490 break;
1491 case Opt_nocase:
1492 ctx->nocase = 1;
1493 break;
1494 case Opt_brl:
1495 if (result.negated) {
1496 /*
1497 * turn off mandatory locking in mode
1498 * if remote locking is turned off since the
1499 * local vfs will do advisory
1500 */
1501 if (ctx->file_mode ==
1502 (S_IALLUGO & ~(S_ISUID | S_IXGRP)))
1503 ctx->file_mode = S_IALLUGO;
1504 ctx->nobrl = 1;
1505 } else
1506 ctx->nobrl = 0;
1507 break;
1508 case Opt_handlecache:
1509 if (result.negated)
1510 ctx->nohandlecache = 1;
1511 else
1512 ctx->nohandlecache = 0;
1513 break;
1514 case Opt_forcemandatorylock:
1515 ctx->mand_lock = 1;
1516 break;
1517 case Opt_setuids:
1518 ctx->setuids = result.negated;
1519 break;
1520 case Opt_intr:
1521 ctx->intr = !result.negated;
1522 break;
1523 case Opt_setuidfromacl:
1524 ctx->setuidfromacl = 1;
1525 break;
1526 case Opt_strictsync:
1527 ctx->nostrictsync = result.negated;
1528 break;
1529 case Opt_serverino:
1530 ctx->server_ino = !result.negated;
1531 break;
1532 case Opt_rwpidforward:
1533 ctx->rwpidforward = 1;
1534 break;
1535 case Opt_modesid:
1536 ctx->mode_ace = 1;
1537 break;
1538 case Opt_cifsacl:
1539 ctx->cifs_acl = !result.negated;
1540 break;
1541 case Opt_acl:
1542 ctx->no_psx_acl = result.negated;
1543 break;
1544 case Opt_locallease:
1545 ctx->local_lease = 1;
1546 break;
1547 case Opt_sign:
1548 ctx->sign = true;
1549 break;
1550 case Opt_ignore_signature:
1551 ctx->sign = true;
1552 ctx->ignore_signature = true;
1553 break;
1554 case Opt_seal:
1555 /* we do not do the following in secFlags because seal
1556 * is a per tree connection (mount) not a per socket
1557 * or per-smb connection option in the protocol
1558 * vol->secFlg |= CIFSSEC_MUST_SEAL;
1559 */
1560 ctx->seal = 1;
1561 break;
1562 case Opt_noac:
1563 pr_warn("Mount option noac not supported. Instead set /proc/fs/cifs/LookupCacheEnabled to 0\n");
1564 break;
1565 case Opt_fsc:
1566 #ifndef CONFIG_CIFS_FSCACHE
1567 cifs_errorf(fc, "FS-Cache support needs CONFIG_CIFS_FSCACHE kernel config option set\n");
1568 goto cifs_parse_mount_err;
1569 #endif
1570 ctx->fsc = true;
1571 break;
1572 case Opt_mfsymlinks:
1573 ctx->mfsymlinks = true;
1574 break;
1575 case Opt_multiuser:
1576 ctx->multiuser = true;
1577 break;
1578 case Opt_sloppy:
1579 ctx->sloppy = true;
1580 break;
1581 case Opt_nosharesock:
1582 ctx->nosharesock = true;
1583 break;
1584 case Opt_persistent:
1585 if (result.negated) {
1586 ctx->nopersistent = true;
1587 if (ctx->persistent) {
1588 cifs_errorf(fc, "persistenthandles mount options conflict\n");
1589 goto cifs_parse_mount_err;
1590 }
1591 } else {
1592 ctx->persistent = true;
1593 if ((ctx->nopersistent) || (ctx->resilient)) {
1594 cifs_errorf(fc, "persistenthandles mount options conflict\n");
1595 goto cifs_parse_mount_err;
1596 }
1597 }
1598 break;
1599 case Opt_resilient:
1600 if (result.negated) {
1601 ctx->resilient = false; /* already the default */
1602 } else {
1603 ctx->resilient = true;
1604 if (ctx->persistent) {
1605 cifs_errorf(fc, "persistenthandles mount options conflict\n");
1606 goto cifs_parse_mount_err;
1607 }
1608 }
1609 break;
1610 case Opt_tcp_nodelay:
1611 /* tcp nodelay should not usually be needed since we CORK/UNCORK the socket */
1612 if (result.negated)
1613 ctx->sockopt_tcp_nodelay = false;
1614 else
1615 ctx->sockopt_tcp_nodelay = true;
1616 break;
1617 case Opt_domainauto:
1618 ctx->domainauto = true;
1619 break;
1620 case Opt_rdma:
1621 ctx->rdma = true;
1622 break;
1623 case Opt_reparse:
1624 if (parse_reparse_flavor(fc, param->string, ctx))
1625 goto cifs_parse_mount_err;
1626 break;
1627 }
1628 /* case Opt_ignore: - is ignored as expected ... */
1629
1630 return 0;
1631
1632 cifs_parse_mount_err:
1633 kfree_sensitive(ctx->password);
1634 ctx->password = NULL;
1635 kfree_sensitive(ctx->password2);
1636 ctx->password2 = NULL;
1637 return -EINVAL;
1638 }
1639
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2024-11-18 3:29 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202411181123.p7SWs3fS-lkp@intel.com \
--to=lkp@intel.com \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=stfrench@microsoft.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.