Re: [PATCH] sunrpc: fix prog selection loop in svc_process_common

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 9/27/24 10:19 AM, Chuck Lever wrote:
> On Fri, Sep 27, 2024 at 04:49:01PM +1000, NeilBrown wrote:
>>
>> If the rq_prog is not in the list of programs, then we use the last
>> program in the list and we don't get the expected rpc_prog_unavail error
>> as the subsequent tests on 'progp' being NULL are ineffective.
>>
>> We should only assign progp when we find the right program, and we
>> should initialize it to NULL
>>
>> Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
>> Fixes: 86ab08beb3f0 ("SUNRPC: replace program list with program array")
>> Signed-off-by: NeilBrown <neilb@xxxxxxx>
> 
> Acked-by: Chuck Lever <chuck.lever@xxxxxxxxxx>
> 
> 
>> ---
>>
>> Hi Anna,
>>  could you take this please - a fix to a patch in your latest pull
>>  request to Linus.
>> Thanks,
>> NeilBrown
>>

Sure! I'll get it queued up, and push out bugfixes to my linux-next branch in the next day or two.

Anna

>>
>>  net/sunrpc/svc.c | 11 ++++-------
>>  1 file changed, 4 insertions(+), 7 deletions(-)
>>
>> diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
>> index 7e7f4e0390c7..79879b7d39cb 100644
>> --- a/net/sunrpc/svc.c
>> +++ b/net/sunrpc/svc.c
>> @@ -1321,7 +1321,7 @@ static int
>>  svc_process_common(struct svc_rqst *rqstp)
>>  {
>>  	struct xdr_stream	*xdr = &rqstp->rq_res_stream;
>> -	struct svc_program	*progp;
>> +	struct svc_program	*progp = NULL;
>>  	const struct svc_procedure *procp = NULL;
>>  	struct svc_serv		*serv = rqstp->rq_server;
>>  	struct svc_process_info process;
>> @@ -1351,12 +1351,9 @@ svc_process_common(struct svc_rqst *rqstp)
>>  	rqstp->rq_vers = be32_to_cpup(p++);
>>  	rqstp->rq_proc = be32_to_cpup(p);
>>  
>> -	for (pr = 0; pr < serv->sv_nprogs; pr++) {
>> -		progp = &serv->sv_programs[pr];
>> -
>> -		if (rqstp->rq_prog == progp->pg_prog)
>> -			break;
>> -	}
>> +	for (pr = 0; pr < serv->sv_nprogs; pr++)
>> +		if (rqstp->rq_prog == serv->sv_programs[pr].pg_prog)
>> +			progp = &serv->sv_programs[pr];
>>  
>>  	/*
>>  	 * Decode auth data, and add verifier to reply buffer.
>> -- 
>> 2.46.0
>>
> 





[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux