drm/i915/cmdparser: Check reg_table_count before derefencing.

"Linux Kernel Mailing List" <[email protected]>
Newsgroups gmane.linux.kernel.commits.head
Message-ID <[email protected]>
Web:        https://git.kernel.org/torvalds/c/b18224e95cb13ef7517aa26e6b47c85117327f11
Commit:     b18224e95cb13ef7517aa26e6b47c85117327f11
Parent:     5e1df40f40ee45a97bb1066c3d71f0ae920a9672
Refname:    refs/heads/master
Author:     Michal Srb <[email protected]>
AuthorDate: Mon Feb 5 16:04:37 2018 +0000
Committer:  Rodrigo Vivi <[email protected]>
CommitDate: Tue Feb 6 11:41:39 2018 -0800

    drm/i915/cmdparser: Check reg_table_count before derefencing.
    
    The find_reg function was assuming that there is always at least one table in
    reg_tables. It is not always true.
    
    In case of VCS or VECS, the reg_tables is NULL and reg_table_count is 0,
    implying that no register-accessing commands are allowed. However, the command
    tables include commands such as MI_STORE_REGISTER_MEM. When trying to check
    such command, the find_reg would dereference NULL pointer.
    
    Now it will just return NULL meaning that the register was not found and the
    command will be rejected.
    
    Fixes: 76ff480ec963 ("drm/i915/cmdparser: Use binary search for faster register lookup")
    Signed-off-by: Michal Srb <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Cc: Chris Wilson <[email protected]>
    Cc: Matthew Auld <[email protected]>
    Reviewed-by: Chris Wilson <[email protected]>
    Signed-off-by: Chris Wilson <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    register lookup")
    (cherry picked from commit 2f265fad9756a40c09e3f4dcc62d5d7fa73a9fb2)
    Signed-off-by: Rodrigo Vivi <[email protected]>
---
 drivers/gpu/drm/i915/i915_cmd_parser.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_cmd_parser.c b/drivers/gpu/drm/i915/i915_cmd_parser.c
index ccb5ba043b63..ab4c8b0ec886 100644
--- a/drivers/gpu/drm/i915/i915_cmd_parser.c
+++ b/drivers/gpu/drm/i915/i915_cmd_parser.c
@@ -1032,7 +1032,7 @@ find_reg(const struct intel_engine_cs *engine, bool is_master, u32 addr)
 	const struct drm_i915_reg_table *table = engine->reg_tables;
 	int count = engine->reg_table_count;
 
-	do {
+	for (; count > 0; ++table, --count) {
 		if (!table->master || is_master) {
 			const struct drm_i915_reg_descriptor *reg;
 
@@ -1040,7 +1040,7 @@ find_reg(const struct intel_engine_cs *engine, bool is_master, u32 addr)
 			if (reg != NULL)
 				return reg;
 		}
-	} while (table++, --count);
+	}
 
 	return NULL;
 }
--
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.