Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3B73D24A05D; Wed, 25 Feb 2026 01:41:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771983698; cv=none; b=pDBFamqGJtR71IdrhCTnCTlJP8V4KR6+eky6fO0jnGuUvw8sdCJvglSRDNlwMd7MrbPxa2fGxtBt7/CAkh86804j/CoZ8liypXD7hpYlZWw6aD3ooSvB9HhBknNlWPvqYX0iUOecgtKAA3X47lNtOErVPcKR/nXmeAdOCNRWZ5k= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771983698; c=relaxed/simple; bh=TzCpufZ+cyvIB014jCuAyOoIL53FQQc8Gz41NTMcWOc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gAcF9fDDJxAKu6KdDJLpAenk9Lj2IXkGtDKi+y/U9O+cJwg/FnUkMujYV6Okv0d0IN/rsO2zq1zAiywGRTk6tMDoSAzdp+fuCkrHN2xH+veo1vDUtm/yf9UWaRM55rloYUsH4YzZVTox7XYMBYdC27xPIbtikOxFcygqQ4gXRoE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=JlKyKAFz; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="JlKyKAFz" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E6C55C116D0; Wed, 25 Feb 2026 01:41:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1771983698; bh=TzCpufZ+cyvIB014jCuAyOoIL53FQQc8Gz41NTMcWOc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JlKyKAFzV7tx1KSb6t8dOBeJKcMVGgDM7wbapvOr/KPRSUqk2dUTd39rfClJ6DzDr YQyj9pZTD0PvwVLp6Ex14mfcdqh/fTTc4P8BsGh9pdYUkP7ju2dgroQghDVUA6ohKl kPLG30PwGSBIMU144TF1eBSlFd1OisPKfoNQf+W4= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Jeongjun Park , Inki Dae Subject: [PATCH 6.19 779/781] drm/exynos: vidi: fix to avoid directly dereferencing user pointer Date: Tue, 24 Feb 2026 17:24:48 -0800 Message-ID: <20260225012418.821702962@linuxfoundation.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260225012359.695468795@linuxfoundation.org> References: <20260225012359.695468795@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: patches@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 6.19-stable review patch. If anyone has any objections, please let me know. ------------------ From: Jeongjun Park commit d4c98c077c7fb2dfdece7d605e694b5ea2665085 upstream. In vidi_connection_ioctl(), vidi->edid(user pointer) is directly dereferenced in the kernel. This allows arbitrary kernel memory access from the user space, so instead of directly accessing the user pointer in the kernel, we should modify it to copy edid to kernel memory using copy_from_user() and use it. Cc: Signed-off-by: Jeongjun Park Signed-off-by: Inki Dae Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/exynos/exynos_drm_vidi.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) --- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c @@ -263,13 +263,27 @@ int vidi_connection_ioctl(struct drm_dev if (vidi->connection) { const struct drm_edid *drm_edid; - const struct edid *raw_edid; + const void __user *edid_userptr = u64_to_user_ptr(vidi->edid); + void *edid_buf; + struct edid hdr; size_t size; - raw_edid = (const struct edid *)(unsigned long)vidi->edid; - size = (raw_edid->extensions + 1) * EDID_LENGTH; + if (copy_from_user(&hdr, edid_userptr, sizeof(hdr))) + return -EFAULT; - drm_edid = drm_edid_alloc(raw_edid, size); + size = (hdr.extensions + 1) * EDID_LENGTH; + + edid_buf = kmalloc(size, GFP_KERNEL); + if (!edid_buf) + return -ENOMEM; + + if (copy_from_user(edid_buf, edid_userptr, size)) { + kfree(edid_buf); + return -EFAULT; + } + + drm_edid = drm_edid_alloc(edid_buf, size); + kfree(edid_buf); if (!drm_edid) return -ENOMEM;