Skip to content

Commit 88ce18d

Browse files
pvts-matPlaidCat
authored andcommitted
drm/gem: Share code between drm_gem_fb_{begin,end}_cpu_access()
jira VULN-136703 cve-pre CVE-2025-38449 commit-author Thomas Zimmermann <tzimmermann@suse.de> commit f159b1b The error-recovery code in drm_gem_fb_begin() is of the same pattern as drm_gem_fb_end(). Implement both of them using an internal helper. No functional changes. v2: * print additional information in error message (Javier) * fix commit description (Javier) Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Tested-by: Noralf Trønnes <noralf@tronnes.org> Acked-by: Christian König <christian.koenig@amd.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220517113327.26919-2-tzimmermann@suse.de (cherry picked from commit f159b1b) Signed-off-by: Marcin Wcisło <marcin.wcislo@conclusive.pl>
1 parent 32382c1 commit 88ce18d

1 file changed

Lines changed: 27 additions & 36 deletions

File tree

drivers/gpu/drm/drm_gem_framebuffer_helper.c

Lines changed: 27 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,28 @@ void drm_gem_fb_vunmap(struct drm_framebuffer *fb,
400400
}
401401
EXPORT_SYMBOL(drm_gem_fb_vunmap);
402402

403+
static void __drm_gem_fb_end_cpu_access(struct drm_framebuffer *fb, enum dma_data_direction dir,
404+
unsigned int num_planes)
405+
{
406+
struct dma_buf_attachment *import_attach;
407+
struct drm_gem_object *obj;
408+
int ret;
409+
410+
while (num_planes) {
411+
--num_planes;
412+
obj = drm_gem_fb_get_obj(fb, num_planes);
413+
if (!obj)
414+
continue;
415+
import_attach = obj->import_attach;
416+
if (!import_attach)
417+
continue;
418+
ret = dma_buf_end_cpu_access(import_attach->dmabuf, dir);
419+
if (ret)
420+
drm_err(fb->dev, "dma_buf_end_cpu_access(%u, %d) failed: %d\n",
421+
ret, num_planes, dir);
422+
}
423+
}
424+
403425
/**
404426
* drm_gem_fb_begin_cpu_access - prepares GEM buffer objects for CPU access
405427
* @fb: the framebuffer
@@ -419,7 +441,7 @@ int drm_gem_fb_begin_cpu_access(struct drm_framebuffer *fb, enum dma_data_direct
419441
struct dma_buf_attachment *import_attach;
420442
struct drm_gem_object *obj;
421443
size_t i;
422-
int ret, ret2;
444+
int ret;
423445

424446
for (i = 0; i < ARRAY_SIZE(fb->obj); ++i) {
425447
obj = drm_gem_fb_get_obj(fb, i);
@@ -430,28 +452,13 @@ int drm_gem_fb_begin_cpu_access(struct drm_framebuffer *fb, enum dma_data_direct
430452
continue;
431453
ret = dma_buf_begin_cpu_access(import_attach->dmabuf, dir);
432454
if (ret)
433-
goto err_dma_buf_end_cpu_access;
455+
goto err___drm_gem_fb_end_cpu_access;
434456
}
435457

436458
return 0;
437459

438-
err_dma_buf_end_cpu_access:
439-
while (i) {
440-
--i;
441-
obj = drm_gem_fb_get_obj(fb, i);
442-
if (!obj)
443-
continue;
444-
import_attach = obj->import_attach;
445-
if (!import_attach)
446-
continue;
447-
ret2 = dma_buf_end_cpu_access(import_attach->dmabuf, dir);
448-
if (ret2) {
449-
drm_err(fb->dev,
450-
"dma_buf_end_cpu_access() failed during error handling: %d\n",
451-
ret2);
452-
}
453-
}
454-
460+
err___drm_gem_fb_end_cpu_access:
461+
__drm_gem_fb_end_cpu_access(fb, dir, i);
455462
return ret;
456463
}
457464
EXPORT_SYMBOL(drm_gem_fb_begin_cpu_access);
@@ -469,23 +476,7 @@ EXPORT_SYMBOL(drm_gem_fb_begin_cpu_access);
469476
*/
470477
void drm_gem_fb_end_cpu_access(struct drm_framebuffer *fb, enum dma_data_direction dir)
471478
{
472-
size_t i = ARRAY_SIZE(fb->obj);
473-
struct dma_buf_attachment *import_attach;
474-
struct drm_gem_object *obj;
475-
int ret;
476-
477-
while (i) {
478-
--i;
479-
obj = drm_gem_fb_get_obj(fb, i);
480-
if (!obj)
481-
continue;
482-
import_attach = obj->import_attach;
483-
if (!import_attach)
484-
continue;
485-
ret = dma_buf_end_cpu_access(import_attach->dmabuf, dir);
486-
if (ret)
487-
drm_err(fb->dev, "dma_buf_end_cpu_access() failed: %d\n", ret);
488-
}
479+
__drm_gem_fb_end_cpu_access(fb, dir, ARRAY_SIZE(fb->obj));
489480
}
490481
EXPORT_SYMBOL(drm_gem_fb_end_cpu_access);
491482

0 commit comments

Comments
 (0)