On Tue, Jun 14, 2022 at 10:06:16AM +0000, Tian, Kevin wrote: > > + gvt->mdev_types = kcalloc(num_types, sizeof(*gvt->mdev_types), > > + GFP_KERNEL); > > + if (!gvt->mdev_types) { > > + kfree(gvt->types); > > + return -ENOMEM; > > + } > > + > > min_low = MB_TO_BYTES(32); > > for (i = 0; i < num_types; ++i) { > > if (low_avail / vgpu_types[i].low_mm == 0) > > @@ -150,19 +157,21 @@ int intel_gvt_init_vgpu_types(struct intel_gvt *gvt) > > high_avail / > > vgpu_types[i].high_mm); > > there is a memory leak a few lines above: > > if (vgpu_types[i].weight < 1 || > vgpu_types[i].weight > VGPU_MAX_WEIGHT) > return -EINVAL; > > both old code and this patch forgot to free the buffers upon error. Yeah. I'll add a patch to the beginning of the series to fix the existing leak and will then make sure to not leak the new allocation either.