From: Chris Wilson Date: Fri, 18 Apr 2014 21:04:23 +0000 (-0300) Subject: drm/i915: Validate BDB section before reading X-Git-Tag: next-20140428~44^2~18 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=1cc25e37213c5adca7a442a4fa6d09d9651928cc;p=karo-tx-linux.git drm/i915: Validate BDB section before reading Make sure that the whole BDB section is within the MMIO region prior to accessing it contents. That we don't read outside of the secion is left up to the individual section parsers. Signed-off-by: Chris Wilson Signed-off-by: Rodrigo Vivi Reviewed-by: Shobhit Kumar Signed-off-by: Daniel Vetter --- diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c index 054dbe7fdf9b..62dd370a36d8 100644 --- a/drivers/gpu/drm/i915/intel_bios.c +++ b/drivers/gpu/drm/i915/intel_bios.c @@ -49,13 +49,19 @@ find_section(struct bdb_header *bdb, int section_id) total = bdb->bdb_size; /* walk the sections looking for section_id */ - while (index < total) { + while (index + 3 < total) { current_id = *(base + index); index++; + current_size = *((u16 *)(base + index)); index += 2; + + if (index + current_size > total) + return NULL; + if (current_id == section_id) return base + index; + index += current_size; }