Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/edid: Fix a missing-check bug in drm_load_edid_firmware()

In drm_load_edid_firmware(), fwstr is allocated by kstrdup(). And fwstr
is dereferenced in the following codes. However, memory allocation
functions such as kstrdup() may fail and returns NULL. Dereferencing
this null pointer may cause the kernel go wrong. Thus we should check
this kstrdup() operation.
Further, if kstrdup() returns NULL, we should return ERR_PTR(-ENOMEM) to
the caller site.

Signed-off-by: Gen Zhang <blackgod016574@gmail.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190524023222.GA5302@zhanggen-UX430UQ

authored by

Gen Zhang and committed by
Jani Nikula
9f1f1a2d 5fc537bf

+2
+2
drivers/gpu/drm/drm_edid_load.c
··· 293 293 * the last one found one as a fallback. 294 294 */ 295 295 fwstr = kstrdup(edid_firmware, GFP_KERNEL); 296 + if (!fwstr) 297 + return ERR_PTR(-ENOMEM); 296 298 edidstr = fwstr; 297 299 298 300 while ((edidname = strsep(&edidstr, ","))) {