On Wed, 2024-09-25 at 17:28 +1000, NeilBrown wrote: > If the rq_prog is not in the list of programs, then we use the last > program in the list and subsequent tests on 'progp' being NULL are > useless. > > 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> > --- > 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. Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx>