- Fix panic structure allocation memory leak (Jani)

-----BEGIN PGP SIGNATURE-----
 
 iQEzBAABCgAdFiEEbSBwaO7dZQkcLOKj+mJfZA7rE8oFAmj6I2AACgkQ+mJfZA7r
 E8qykQf9HoJq6rEFWhGE9QcI/lkxa8fquz7D7gjm3BIQBvWlcaLyGy9rF2pmw9VB
 p+vyDpI+xaDhwn9tTrMTkghM3dw6pQhfeTsbX/ll2T9ErooSfwso4ErX1hsl2za5
 u1AvgpXARlt3fHbUYQPye/4JWWpoRPXpP2G8juz/Tcgh+2bvRg0iteTtH5eauZlh
 /qia9ZTpZokQTsw0aA01tdklNvSfc1zfE+SdrOYxSu29sS87IK7xyqAAfxZZglMR
 Ms9bXOy829odd9Gb3D649OtMcT1IhcMnAJcAt1lJcmiZRN2fNn0HL6mk5R/bpc8s
 GQJ4LbOH0zNAQgBvYwCPLHFVfNkOBQ==
 =EbYt
 -----END PGP SIGNATURE-----

Merge tag 'drm-intel-fixes-2025-10-23' of https://gitlab.freedesktop.org/drm/i915/kernel into drm-fixes

- Fix panic structure allocation memory leak (Jani)

Signed-off-by: Simona Vetter <simona.vetter@ffwll.ch>
From: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://lore.kernel.org/r/aPojgsvNYOU0tN4U@intel.com
This commit is contained in:
Simona Vetter 2025-10-24 13:36:47 +02:00
commit adb0971a1a
1 changed files with 13 additions and 12 deletions

View File

@ -2117,6 +2117,7 @@ static void intel_user_framebuffer_destroy(struct drm_framebuffer *fb)
intel_frontbuffer_put(intel_fb->frontbuffer); intel_frontbuffer_put(intel_fb->frontbuffer);
kfree(intel_fb->panic);
kfree(intel_fb); kfree(intel_fb);
} }
@ -2215,16 +2216,22 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
struct intel_display *display = to_intel_display(obj->dev); struct intel_display *display = to_intel_display(obj->dev);
struct drm_framebuffer *fb = &intel_fb->base; struct drm_framebuffer *fb = &intel_fb->base;
u32 max_stride; u32 max_stride;
int ret = -EINVAL; int ret;
int i; int i;
intel_fb->panic = intel_panic_alloc();
if (!intel_fb->panic)
return -ENOMEM;
/* /*
* intel_frontbuffer_get() must be done before * intel_frontbuffer_get() must be done before
* intel_fb_bo_framebuffer_init() to avoid set_tiling vs. addfb race. * intel_fb_bo_framebuffer_init() to avoid set_tiling vs. addfb race.
*/ */
intel_fb->frontbuffer = intel_frontbuffer_get(obj); intel_fb->frontbuffer = intel_frontbuffer_get(obj);
if (!intel_fb->frontbuffer) if (!intel_fb->frontbuffer) {
return -ENOMEM; ret = -ENOMEM;
goto err_free_panic;
}
ret = intel_fb_bo_framebuffer_init(fb, obj, mode_cmd); ret = intel_fb_bo_framebuffer_init(fb, obj, mode_cmd);
if (ret) if (ret)
@ -2323,6 +2330,9 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
intel_fb_bo_framebuffer_fini(obj); intel_fb_bo_framebuffer_fini(obj);
err_frontbuffer_put: err_frontbuffer_put:
intel_frontbuffer_put(intel_fb->frontbuffer); intel_frontbuffer_put(intel_fb->frontbuffer);
err_free_panic:
kfree(intel_fb->panic);
return ret; return ret;
} }
@ -2349,20 +2359,11 @@ intel_user_framebuffer_create(struct drm_device *dev,
struct intel_framebuffer *intel_framebuffer_alloc(void) struct intel_framebuffer *intel_framebuffer_alloc(void)
{ {
struct intel_framebuffer *intel_fb; struct intel_framebuffer *intel_fb;
struct intel_panic *panic;
intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL); intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL);
if (!intel_fb) if (!intel_fb)
return NULL; return NULL;
panic = intel_panic_alloc();
if (!panic) {
kfree(intel_fb);
return NULL;
}
intel_fb->panic = panic;
return intel_fb; return intel_fb;
} }