diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-04-13 19:32:16 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-04-13 19:32:16 -0400 |
commit | 71893f116109c92e4cd230d990fad5bd7cb4f99d (patch) | |
tree | 4c9b5b407907f3a7aaa2370fbe98e18e4dfaed66 /drivers | |
parent | f6811370b9266a3d8a21e27cb5f46751f97df2fb (diff) | |
parent | 712ff25450bd01366301eef81c33e865d901e7b7 (diff) |
Merge branch 'dmi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging
Pull dmi updates from Jean Delvare.
* 'dmi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging:
firmware: dmi_scan: Use lowercase letters for UUID
firmware: dmi_scan: Add DMI_OEM_STRING support to dmi_matches
firmware: dmi_scan: Fix UUID length safety check
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/firmware/dmi_scan.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c index 6feeacbe4d97..54e66adef252 100644 --- a/drivers/firmware/dmi_scan.c +++ b/drivers/firmware/dmi_scan.c | |||
@@ -187,7 +187,7 @@ static void __init dmi_save_uuid(const struct dmi_header *dm, int slot, | |||
187 | char *s; | 187 | char *s; |
188 | int is_ff = 1, is_00 = 1, i; | 188 | int is_ff = 1, is_00 = 1, i; |
189 | 189 | ||
190 | if (dmi_ident[slot] || dm->length <= index + 16) | 190 | if (dmi_ident[slot] || dm->length < index + 16) |
191 | return; | 191 | return; |
192 | 192 | ||
193 | d = (u8 *) dm + index; | 193 | d = (u8 *) dm + index; |
@@ -211,9 +211,9 @@ static void __init dmi_save_uuid(const struct dmi_header *dm, int slot, | |||
211 | * says that this is the defacto standard. | 211 | * says that this is the defacto standard. |
212 | */ | 212 | */ |
213 | if (dmi_ver >= 0x020600) | 213 | if (dmi_ver >= 0x020600) |
214 | sprintf(s, "%pUL", d); | 214 | sprintf(s, "%pUl", d); |
215 | else | 215 | else |
216 | sprintf(s, "%pUB", d); | 216 | sprintf(s, "%pUb", d); |
217 | 217 | ||
218 | dmi_ident[slot] = s; | 218 | dmi_ident[slot] = s; |
219 | } | 219 | } |
@@ -792,7 +792,15 @@ static bool dmi_matches(const struct dmi_system_id *dmi) | |||
792 | int s = dmi->matches[i].slot; | 792 | int s = dmi->matches[i].slot; |
793 | if (s == DMI_NONE) | 793 | if (s == DMI_NONE) |
794 | break; | 794 | break; |
795 | if (dmi_ident[s]) { | 795 | if (s == DMI_OEM_STRING) { |
796 | /* DMI_OEM_STRING must be exact match */ | ||
797 | const struct dmi_device *valid; | ||
798 | |||
799 | valid = dmi_find_device(DMI_DEV_TYPE_OEM_STRING, | ||
800 | dmi->matches[i].substr, NULL); | ||
801 | if (valid) | ||
802 | continue; | ||
803 | } else if (dmi_ident[s]) { | ||
796 | if (dmi->matches[i].exact_match) { | 804 | if (dmi->matches[i].exact_match) { |
797 | if (!strcmp(dmi_ident[s], | 805 | if (!strcmp(dmi_ident[s], |
798 | dmi->matches[i].substr)) | 806 | dmi->matches[i].substr)) |