> From: Christoph Hellwig > Sent: Tuesday, June 14, 2022 12:54 PM > @@ -131,6 +131,13 @@ int intel_gvt_init_vgpu_types(struct intel_gvt *gvt) > if (!gvt->types) > return -ENOMEM; > > + 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.