The branch main has been updated by hselasky:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=85d7875d42913c2cb10a007a1be05b210dc6aab2

commit 85d7875d42913c2cb10a007a1be05b210dc6aab2
Author:     Hans Petter Selasky <[email protected]>
AuthorDate: 2022-06-06 08:23:23 +0000
Commit:     Hans Petter Selasky <[email protected]>
CommitDate: 2022-06-06 08:31:34 +0000

    LinuxKPI: Fix dmi_matches() function
    
    Make sure to check for NULL pointers and also check all search criterias,
    not only the first one!
    
    Bump the FreeBSD version.
    
    Reviewed by:    manu@
    Differential Revision:  https://reviews.freebsd.org/D35403
    MFC after:      1 week
    Sponsored by:   NVIDIA Networking
---
 sys/compat/linuxkpi/common/src/linux_dmi.c | 19 ++++++++++++-------
 sys/sys/param.h                            |  2 +-
 2 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/sys/compat/linuxkpi/common/src/linux_dmi.c 
b/sys/compat/linuxkpi/common/src/linux_dmi.c
index f5350751a496..70d56c246c10 100644
--- a/sys/compat/linuxkpi/common/src/linux_dmi.c
+++ b/sys/compat/linuxkpi/common/src/linux_dmi.c
@@ -77,20 +77,25 @@ linux_dmi_match(enum dmi_field f, const char *str)
 static bool
 linux_dmi_matches(const struct dmi_system_id *dsi)
 {
+       enum dmi_field slot;
        int i;
 
        for (i = 0; i < nitems(dsi->matches); i++) {
-               if (dsi->matches[i].slot == DMI_NONE)
+               slot = dsi->matches[i].slot;
+               if (slot == DMI_NONE)
                        break;
+               if (slot >= DMI_STRING_MAX ||
+                   dmi_data[slot] == NULL)
+                       return (false);
                if (dsi->matches[i].exact_match) {
-                       return (dmi_match(dsi->matches[i].slot,
-                           dsi->matches[i].substr));
-               } else {
-                       return (strstr(dmi_data[dsi->matches[i].slot],
-                                   dsi->matches[i].substr) != NULL);
+                       if (dmi_match(slot, dsi->matches[i].substr))
+                               continue;
+               } else if (strstr(dmi_data[slot],
+                       dsi->matches[i].substr) != NULL) {
+                       continue;
                }
+               return (false);
        }
-
        return (true);
 }
 
diff --git a/sys/sys/param.h b/sys/sys/param.h
index 1f720ed31142..d68b5c2d4f2f 100644
--- a/sys/sys/param.h
+++ b/sys/sys/param.h
@@ -76,7 +76,7 @@
  * cannot include sys/param.h and should only be updated here.
  */
 #undef __FreeBSD_version
-#define __FreeBSD_version 1400059
+#define __FreeBSD_version 1400060
 
 /*
  * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,

Reply via email to