提交 1c1d046b 编写于 作者: A Arjun Sreedharan 提交者: Ingo Molnar

x86/boot: Standardize strcmp()

strcmp() is always expected to return 0 when arguments are equal,
negative when its first argument @str1 is less than its second argument
@str2 and a positive value otherwise. Previously strcmp("a", "b")
returned 1. Now it gives -1, as it is supposed to.

Until now this bug never triggered, because all uses for strcmp() in the
boot code tested for nonzero:

  triton:~/tip> git grep strcmp arch/x86/boot/
  arch/x86/boot/boot.h:int strcmp(const char *str1, const char *str2);
  arch/x86/boot/edd.c:            if (!strcmp(eddarg, "skipmbr") || !strcmp(eddarg, "skip")) {
  arch/x86/boot/edd.c:            else if (!strcmp(eddarg, "off"))
  arch/x86/boot/edd.c:            else if (!strcmp(eddarg, "on"))

should in the future strcmp() be used in a comparative way in the boot
code, it might have led to (not so subtle) bugs.
Signed-off-by: NArjun Sreedharan <arjun024@gmail.com>
Signed-off-by: NBorislav Petkov <bp@suse.de>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1426520267-1803-1-git-send-email-arjun024@gmail.comSigned-off-by: NIngo Molnar <mingo@kernel.org>
上级 91d8f041
...@@ -30,7 +30,7 @@ int strcmp(const char *str1, const char *str2) ...@@ -30,7 +30,7 @@ int strcmp(const char *str1, const char *str2)
int delta = 0; int delta = 0;
while (*s1 || *s2) { while (*s1 || *s2) {
delta = *s2 - *s1; delta = *s1 - *s2;
if (delta) if (delta)
return delta; return delta;
s1++; s1++;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册