On Wed, Sep 28, 2022 at 11:33:40AM +0800, Zheng Wang wrote: > If intel_gvt_dma_map_guest_page failed, it will call > ppgtt_invalidate_spt, which will finally free the spt. > But the caller does not notice that, it will free spt again in error path. > > Fix this by only freeing spt in ppgtt_invalidate_spt in good case. > > Fixes: b901b252b6cf ("drm/i915/gvt: Add 2M huge gtt support") > Reported-by: Zheng Wang <hackerzheng666@xxxxxxxxx> > Signed-off-by: Zheng Wang <zyytlz.wz@xxxxxxx> > --- > drivers/gpu/drm/i915/gvt/gtt.c | 16 +++++++++------- > 1 file changed, 9 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c > index ce0eb03709c3..550519f0acca 100644 > --- a/drivers/gpu/drm/i915/gvt/gtt.c > +++ b/drivers/gpu/drm/i915/gvt/gtt.c > @@ -959,7 +959,7 @@ static inline int ppgtt_put_spt(struct intel_vgpu_ppgtt_spt *spt) > return atomic_dec_return(&spt->refcount); > } > > -static int ppgtt_invalidate_spt(struct intel_vgpu_ppgtt_spt *spt); > +static int ppgtt_invalidate_spt(struct intel_vgpu_ppgtt_spt *spt, int is_error); That is a horrible way to make an api (and it should be a bool too.) Now every time you see this call in the code, you have to go look up what the last parameter means. Just make 2 functions, one that does the "is error" thing, and one that does not, and that will be much easier to maintain and understand for the next 10+ years. thanks, greg k-h