Commit 640e8033 authored by Robert Love's avatar Robert Love Committed by Linus Torvalds

[PATCH] fix: dmi_check_system

Background:

	1) dmi_check_system() returns the count of the number of
	   matches.  Zero thus means no matches.
	2) A match callback can return nonzero to stop the match
	   checking.

Bug: The count is incremented after we check for the nonzero return value,
so it does not reflect the actual count.  We could say this is intended,
for some dumb reason, except that it means that a match on the first check
returns zero--no matches--if the callback returns nonzero.

Attached patch implements the count before calling the callback and thus
before potentially short-circuiting.
Signed-off-by: default avatarRobert Love <rml@novell.com>
Cc: Andrey Panin <pazke@donpac.ru>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent ebad6a42
...@@ -248,9 +248,9 @@ int dmi_check_system(struct dmi_system_id *list) ...@@ -248,9 +248,9 @@ int dmi_check_system(struct dmi_system_id *list)
/* No match */ /* No match */
goto fail; goto fail;
} }
count++;
if (d->callback && d->callback(d)) if (d->callback && d->callback(d))
break; break;
count++;
fail: d++; fail: d++;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment