@@ -4240,15 +4240,18 @@ static int nfs4_discover_trunking(struct nfs_server *server,
4240
4240
}
4241
4241
4242
4242
static int _nfs4_lookup_root (struct nfs_server * server , struct nfs_fh * fhandle ,
4243
- struct nfs_fsinfo * info )
4243
+ struct nfs_fattr * fattr )
4244
4244
{
4245
- u32 bitmask [3 ];
4245
+ u32 bitmask [3 ] = {
4246
+ [0 ] = FATTR4_WORD0_TYPE | FATTR4_WORD0_CHANGE |
4247
+ FATTR4_WORD0_SIZE | FATTR4_WORD0_FSID ,
4248
+ };
4246
4249
struct nfs4_lookup_root_arg args = {
4247
4250
.bitmask = bitmask ,
4248
4251
};
4249
4252
struct nfs4_lookup_res res = {
4250
4253
.server = server ,
4251
- .fattr = info -> fattr ,
4254
+ .fattr = fattr ,
4252
4255
.fh = fhandle ,
4253
4256
};
4254
4257
struct rpc_message msg = {
@@ -4257,27 +4260,20 @@ static int _nfs4_lookup_root(struct nfs_server *server, struct nfs_fh *fhandle,
4257
4260
.rpc_resp = & res ,
4258
4261
};
4259
4262
4260
- bitmask [0 ] = nfs4_fattr_bitmap [0 ];
4261
- bitmask [1 ] = nfs4_fattr_bitmap [1 ];
4262
- /*
4263
- * Process the label in the upcoming getfattr
4264
- */
4265
- bitmask [2 ] = nfs4_fattr_bitmap [2 ] & ~FATTR4_WORD2_SECURITY_LABEL ;
4266
-
4267
- nfs_fattr_init (info -> fattr );
4263
+ nfs_fattr_init (fattr );
4268
4264
return nfs4_call_sync (server -> client , server , & msg , & args .seq_args , & res .seq_res , 0 );
4269
4265
}
4270
4266
4271
4267
static int nfs4_lookup_root (struct nfs_server * server , struct nfs_fh * fhandle ,
4272
- struct nfs_fsinfo * info )
4268
+ struct nfs_fattr * fattr )
4273
4269
{
4274
4270
struct nfs4_exception exception = {
4275
4271
.interruptible = true,
4276
4272
};
4277
4273
int err ;
4278
4274
do {
4279
- err = _nfs4_lookup_root (server , fhandle , info );
4280
- trace_nfs4_lookup_root (server , fhandle , info -> fattr , err );
4275
+ err = _nfs4_lookup_root (server , fhandle , fattr );
4276
+ trace_nfs4_lookup_root (server , fhandle , fattr , err );
4281
4277
switch (err ) {
4282
4278
case 0 :
4283
4279
case - NFS4ERR_WRONGSEC :
@@ -4290,8 +4286,9 @@ static int nfs4_lookup_root(struct nfs_server *server, struct nfs_fh *fhandle,
4290
4286
return err ;
4291
4287
}
4292
4288
4293
- static int nfs4_lookup_root_sec (struct nfs_server * server , struct nfs_fh * fhandle ,
4294
- struct nfs_fsinfo * info , rpc_authflavor_t flavor )
4289
+ static int nfs4_lookup_root_sec (struct nfs_server * server ,
4290
+ struct nfs_fh * fhandle , struct nfs_fattr * fattr ,
4291
+ rpc_authflavor_t flavor )
4295
4292
{
4296
4293
struct rpc_auth_create_args auth_args = {
4297
4294
.pseudoflavor = flavor ,
@@ -4301,7 +4298,7 @@ static int nfs4_lookup_root_sec(struct nfs_server *server, struct nfs_fh *fhandl
4301
4298
auth = rpcauth_create (& auth_args , server -> client );
4302
4299
if (IS_ERR (auth ))
4303
4300
return - EACCES ;
4304
- return nfs4_lookup_root (server , fhandle , info );
4301
+ return nfs4_lookup_root (server , fhandle , fattr );
4305
4302
}
4306
4303
4307
4304
/*
@@ -4314,7 +4311,7 @@ static int nfs4_lookup_root_sec(struct nfs_server *server, struct nfs_fh *fhandl
4314
4311
* negative errno value.
4315
4312
*/
4316
4313
static int nfs4_find_root_sec (struct nfs_server * server , struct nfs_fh * fhandle ,
4317
- struct nfs_fsinfo * info )
4314
+ struct nfs_fattr * fattr )
4318
4315
{
4319
4316
/* Per 3530bis 15.33.5 */
4320
4317
static const rpc_authflavor_t flav_array [] = {
@@ -4330,16 +4327,17 @@ static int nfs4_find_root_sec(struct nfs_server *server, struct nfs_fh *fhandle,
4330
4327
if (server -> auth_info .flavor_len > 0 ) {
4331
4328
/* try each flavor specified by user */
4332
4329
for (i = 0 ; i < server -> auth_info .flavor_len ; i ++ ) {
4333
- status = nfs4_lookup_root_sec (server , fhandle , info ,
4334
- server -> auth_info .flavors [i ]);
4330
+ status = nfs4_lookup_root_sec (
4331
+ server , fhandle , fattr ,
4332
+ server -> auth_info .flavors [i ]);
4335
4333
if (status == - NFS4ERR_WRONGSEC || status == - EACCES )
4336
4334
continue ;
4337
4335
break ;
4338
4336
}
4339
4337
} else {
4340
4338
/* no flavors specified by user, try default list */
4341
4339
for (i = 0 ; i < ARRAY_SIZE (flav_array ); i ++ ) {
4342
- status = nfs4_lookup_root_sec (server , fhandle , info ,
4340
+ status = nfs4_lookup_root_sec (server , fhandle , fattr ,
4343
4341
flav_array [i ]);
4344
4342
if (status == - NFS4ERR_WRONGSEC || status == - EACCES )
4345
4343
continue ;
@@ -4363,28 +4361,22 @@ static int nfs4_find_root_sec(struct nfs_server *server, struct nfs_fh *fhandle,
4363
4361
* nfs4_proc_get_rootfh - get file handle for server's pseudoroot
4364
4362
* @server: initialized nfs_server handle
4365
4363
* @fhandle: we fill in the pseudo-fs root file handle
4366
- * @info : we fill in an FSINFO struct
4364
+ * @fattr : we fill in a bare bones struct fattr
4367
4365
* @auth_probe: probe the auth flavours
4368
4366
*
4369
4367
* Returns zero on success, or a negative errno.
4370
4368
*/
4371
4369
int nfs4_proc_get_rootfh (struct nfs_server * server , struct nfs_fh * fhandle ,
4372
- struct nfs_fsinfo * info ,
4373
- bool auth_probe )
4370
+ struct nfs_fattr * fattr , bool auth_probe )
4374
4371
{
4375
4372
int status = 0 ;
4376
4373
4377
4374
if (!auth_probe )
4378
- status = nfs4_lookup_root (server , fhandle , info );
4375
+ status = nfs4_lookup_root (server , fhandle , fattr );
4379
4376
4380
4377
if (auth_probe || status == NFS4ERR_WRONGSEC )
4381
- status = server -> nfs_client -> cl_mvops -> find_root_sec (server ,
4382
- fhandle , info );
4383
-
4384
- if (status == 0 )
4385
- status = nfs4_server_capabilities (server , fhandle );
4386
- if (status == 0 )
4387
- status = nfs4_do_fsinfo (server , fhandle , info );
4378
+ status = server -> nfs_client -> cl_mvops -> find_root_sec (
4379
+ server , fhandle , fattr );
4388
4380
4389
4381
return nfs4_map_errors (status );
4390
4382
}
@@ -10351,10 +10343,10 @@ nfs4_proc_layoutcommit(struct nfs4_layoutcommit_data *data, bool sync)
10351
10343
* Use the state managment nfs_client cl_rpcclient, which uses krb5i (if
10352
10344
* possible) as per RFC3530bis and RFC5661 Security Considerations sections
10353
10345
*/
10354
- static int
10355
- _nfs41_proc_secinfo_no_name ( struct nfs_server * server , struct nfs_fh * fhandle ,
10356
- struct nfs_fsinfo * info ,
10357
- struct nfs4_secinfo_flavors * flavors , bool use_integrity )
10346
+ static int _nfs41_proc_secinfo_no_name ( struct nfs_server * server ,
10347
+ struct nfs_fh * fhandle ,
10348
+ struct nfs4_secinfo_flavors * flavors ,
10349
+ bool use_integrity )
10358
10350
{
10359
10351
struct nfs41_secinfo_no_name_args args = {
10360
10352
.style = SECINFO_STYLE_CURRENT_FH ,
@@ -10398,9 +10390,9 @@ _nfs41_proc_secinfo_no_name(struct nfs_server *server, struct nfs_fh *fhandle,
10398
10390
return status ;
10399
10391
}
10400
10392
10401
- static int
10402
- nfs41_proc_secinfo_no_name ( struct nfs_server * server , struct nfs_fh * fhandle ,
10403
- struct nfs_fsinfo * info , struct nfs4_secinfo_flavors * flavors )
10393
+ static int nfs41_proc_secinfo_no_name ( struct nfs_server * server ,
10394
+ struct nfs_fh * fhandle ,
10395
+ struct nfs4_secinfo_flavors * flavors )
10404
10396
{
10405
10397
struct nfs4_exception exception = {
10406
10398
.interruptible = true,
@@ -10412,7 +10404,7 @@ nfs41_proc_secinfo_no_name(struct nfs_server *server, struct nfs_fh *fhandle,
10412
10404
10413
10405
/* try to use integrity protection with machine cred */
10414
10406
if (_nfs4_is_integrity_protected (server -> nfs_client ))
10415
- err = _nfs41_proc_secinfo_no_name (server , fhandle , info ,
10407
+ err = _nfs41_proc_secinfo_no_name (server , fhandle ,
10416
10408
flavors , true);
10417
10409
10418
10410
/*
@@ -10422,7 +10414,7 @@ nfs41_proc_secinfo_no_name(struct nfs_server *server, struct nfs_fh *fhandle,
10422
10414
* the current filesystem's rpc_client and the user cred.
10423
10415
*/
10424
10416
if (err == - NFS4ERR_WRONGSEC )
10425
- err = _nfs41_proc_secinfo_no_name (server , fhandle , info ,
10417
+ err = _nfs41_proc_secinfo_no_name (server , fhandle ,
10426
10418
flavors , false);
10427
10419
10428
10420
switch (err ) {
@@ -10438,9 +10430,8 @@ nfs41_proc_secinfo_no_name(struct nfs_server *server, struct nfs_fh *fhandle,
10438
10430
return err ;
10439
10431
}
10440
10432
10441
- static int
10442
- nfs41_find_root_sec (struct nfs_server * server , struct nfs_fh * fhandle ,
10443
- struct nfs_fsinfo * info )
10433
+ static int nfs41_find_root_sec (struct nfs_server * server ,
10434
+ struct nfs_fh * fhandle , struct nfs_fattr * fattr )
10444
10435
{
10445
10436
int err ;
10446
10437
struct page * page ;
@@ -10456,14 +10447,14 @@ nfs41_find_root_sec(struct nfs_server *server, struct nfs_fh *fhandle,
10456
10447
}
10457
10448
10458
10449
flavors = page_address (page );
10459
- err = nfs41_proc_secinfo_no_name (server , fhandle , info , flavors );
10450
+ err = nfs41_proc_secinfo_no_name (server , fhandle , flavors );
10460
10451
10461
10452
/*
10462
10453
* Fall back on "guess and check" method if
10463
10454
* the server doesn't support SECINFO_NO_NAME
10464
10455
*/
10465
10456
if (err == - NFS4ERR_WRONGSEC || err == - ENOTSUPP ) {
10466
- err = nfs4_find_root_sec (server , fhandle , info );
10457
+ err = nfs4_find_root_sec (server , fhandle , fattr );
10467
10458
goto out_freepage ;
10468
10459
}
10469
10460
if (err )
@@ -10488,8 +10479,8 @@ nfs41_find_root_sec(struct nfs_server *server, struct nfs_fh *fhandle,
10488
10479
flavor = RPC_AUTH_MAXFLAVOR ;
10489
10480
10490
10481
if (flavor != RPC_AUTH_MAXFLAVOR ) {
10491
- err = nfs4_lookup_root_sec (server , fhandle ,
10492
- info , flavor );
10482
+ err = nfs4_lookup_root_sec (server , fhandle , fattr ,
10483
+ flavor );
10493
10484
if (!err )
10494
10485
break ;
10495
10486
}
0 commit comments