|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 09/27] ARM: GICv3: introduce separate pending_irq structs for LPIs
On Fri, 24 Mar 2017, Andre Przywara wrote:
> >> +struct pending_irq *lpi_to_pending(struct vcpu *v, unsigned int lpi,
> >> + bool allocate)
> >> +{
> >> + struct lpi_pending_irq *lpi_irq, *empty = NULL;
> >> +
> >> + spin_lock(&v->arch.vgic.pending_lpi_list_lock);
> >> + list_for_each_entry(lpi_irq, &v->arch.vgic.pending_lpi_list, entry)
> >> + {
> >> + if ( lpi_irq->pirq.irq == lpi )
> >> + {
> >> + spin_unlock(&v->arch.vgic.pending_lpi_list_lock);
> >> + return &lpi_irq->pirq;
> >> + }
> >> +
> >> + if ( lpi_irq->pirq.irq == 0 && !empty )
> >> + empty = lpi_irq;
> >> + }
> >> +
> >> + if ( !allocate )
> >> + {
> >> + spin_unlock(&v->arch.vgic.pending_lpi_list_lock);
> >> + return NULL;
> >> + }
> >> +
> >> + if ( !empty )
> >> + {
> >> + empty = xzalloc(struct lpi_pending_irq);
> >
> > xzalloc will return NULL if memory is exhausted. There is a general lack
> > of error checking within this series. Any missing error could be a
> > potential target from a guest, leading to security issue. Stefano and I
> > already spot some, it does not mean we found all. So Before sending the
> > next version, please go through the series and verify *every* return.
> >
> > Also, I can't find the code which release LPIs neither in this patch nor
> > in this series. A general rule is too have allocation and free within
> > the same patch. It is much easier to spot missing free.
>
> There is no such code, on purpose. We only grow the number, but never
> shrink it (to what?, where to stop?, what if we need more again?). As
> said above, in the worst case this ends up at something where a static
> allocation would have started with from the beginning.
Dellocate struct pending_irq when the domain is destroyed or when an LPI
is disabled?
> to what?, where to stop?
We don't stop, why stop? Let's go back to 0 if we can.
> what if we need more again?
We allocate them again?
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |