Re: [PATCH 06/18] dbtr: Improve trigger update error checking

Nicholas Piggin <[email protected]>
Newsgroups org.infradead.lists.opensbi
Message-ID <ahUjIlb-fwx_rtP2@lima-default>
On Mon, May 04, 2026 at 08:53:18PM +0530, Himanshu Chauhan wrote:
> On Fri, Mar 13, 2026 at 03:19:35PM +1000, Nicholas Piggin wrote:
> > Trigger updates should ensure all triggers can be upated without failure
> > before making any changes. Updates that change the trigger type must
> > also be disallowed according to SBI specification.
> > 
> > Change the style of shmem access and checking to match the trigger
> > install code and perform all checks first. Add the missing check to
> > prevent type change.
> > 
> > Signed-off-by: Nicholas Piggin <[email protected]>
> > ---
> >  lib/sbi/sbi_dbtr.c | 33 ++++++++++++++++++++++++++-------
> >  1 file changed, 26 insertions(+), 7 deletions(-)
> > 
> > diff --git a/lib/sbi/sbi_dbtr.c b/lib/sbi/sbi_dbtr.c
> > index 224f2350..d2845fec 100644
> > --- a/lib/sbi/sbi_dbtr.c
> > +++ b/lib/sbi/sbi_dbtr.c
> > @@ -727,9 +727,9 @@ int sbi_dbtr_enable_trig(unsigned long trig_idx_base,
> >  int sbi_dbtr_update_trig(unsigned long smode,
> >  			 unsigned long trig_count, unsigned long *out)
> >  {
> > -	unsigned long trig_idx;
> >  	struct sbi_dbtr_trigger *trig;
> >  	union sbi_dbtr_shmem_entry *entry;
> > +	struct sbi_dbtr_data_msg *recv;
> >  	void *shmem_base = NULL;
> >  	struct sbi_dbtr_hart_triggers_state *hs = NULL;
> >  
> > @@ -744,30 +744,49 @@ int sbi_dbtr_update_trig(unsigned long smode,
> >  		return SBI_ERR_NO_SHMEM;
> >  
> >  	shmem_base = hart_shmem_base(hs);
> > +	sbi_hart_protection_map_range((unsigned long)shmem_base,
> > +				      trig_count * sizeof(*entry));
> Hi Nicholas,
> 
> I would suggest to verify the value of trig_count before making a large map entry.
> It would also help in the two loops below.
> 
> >  
> > +	/* Check requested triggers configuration */
> >  	for_each_trig_entry(shmem_base, trig_count, typeof(*entry), entry) {
> > -		sbi_hart_protection_map_range((unsigned long)entry, sizeof(*entry));
> > -		trig_idx = entry->id.idx;
> > +		unsigned long trig_idx, tdata1;
> >  
> > +		trig_idx = entry->id.idx;
> >  		if (trig_idx >= hs->total_trigs) {
> > -			sbi_hart_protection_unmap_range((unsigned long)entry, sizeof(*entry));
> >  			*out = _idx;
> > +			sbi_hart_protection_unmap_range((unsigned long)shmem_base,
> > +							trig_count * sizeof(*entry));
> 
> A forward goto to bailout in success/error condition would be better.

Hey Himanshu,

Thanks for the reviews, I'll take a look at these suggestions and see
how they look.

I should repost this series soon, I will do so after hearing from David
about the tdata2/tdata3 issue.

Thanks,
Nick

-- 
opensbi mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/opensbi
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.