[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] x86: remove memcmp calls non-compliant with Rule 21.16.


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Stefano Stabellini <stefano.stabellini@xxxxxxx>
  • Date: Wed, 4 Jun 2025 16:35:37 -0700
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0)
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=uleT6ILVG7kx3wLTyOv2IoCuR7/et9OzSZjso4aXr6I=; b=STQSxsj+aZTLBASuRlTwZDNoXHb8iP/SqSFffsQyAQxT7+9Fg3GHdT1W7+9QZOD2hhuxUXbygAhzzb9f9wpRsC4c6Yaju2+HOPEKDoPkeg4JEiySBsUYy455rZVXkydICRkxYxdjeioFXgIQTleIeV8antg4I0t1iG1SRe8JcmW5sDBFaykYp2Ugj9tzbvvqi9sNNY/NY3IUmr2DhpvurGzlo5H3fCRB8CCDBgUH7DK9BVT9QEcUn4o8RXu0joo2+mtueish2j/e0X3OQdWjlNqhf86H5oKLJmgv11Gcd1WKbaRiUHyP1pIUmdhotD896QaNrBD60pvX4sjPDNb6lg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bIZnqQcQdjBWrygGQrlBxO6Au3F0so/8uIA3aSH+9hWaa5JRwPM6y6T9LtTNp/qNMfn1AZvmfELfKEyZnjaHElboIT5V9eSwxJGKu5CoxKx2kx087zmdiRmKVeaw8nDfpAK9+zFMPzKuH/INxbgPO0AZvaWrQpRxxw0kaC0wR6sYZM7rF3TzyZVz8NGXZqj0X/0gK/2OfSmCOgUkZlqDUg5EpsIdCxBpAuAds62ZNHb5wy8Kre6OuZylBkH1wFAZ1jIMxIHFHZflXNk5UXb6EU3/v8ln2wj/TMl4I67kmxpX9vrfxuvB2xrybfJIBwgPBWxmqiIxku3lcPJqiCz9yw==
  • Cc: Jan Beulich <jbeulich@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Alessandro Zucchelli <alessandro.zucchelli@xxxxxxxxxxx>
  • Delivery-date: Wed, 04 Jun 2025 23:36:00 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

From: Alessandro Zucchelli <alessandro.zucchelli@xxxxxxxxxxx>

MISRA C Rule 21.16 states the following: "The pointer arguments to
the Standard Library function `memcmp' shall point to either a pointer
type, an essentially signed type, an essentially unsigned type, an
essentially Boolean type or an essentially enum type".

Comparing string literals with char arrays is more appropriately
done via strncmp.

No functional change.

Signed-off-by: Alessandro Zucchelli <alessandro.zucchelli@xxxxxxxxxxx>
---
 xen/arch/x86/dmi_scan.c | 20 ++++++++++----------
 xen/arch/x86/mpparse.c  | 10 +++++-----
 2 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/xen/arch/x86/dmi_scan.c b/xen/arch/x86/dmi_scan.c
index eb65bc86bb..b6edd7a965 100644
--- a/xen/arch/x86/dmi_scan.c
+++ b/xen/arch/x86/dmi_scan.c
@@ -233,7 +233,7 @@ void __init dmi_efi_get_table(const void *smbios, const 
void *smbios3)
        const struct smbios_eps *eps = smbios;
        const struct smbios3_eps *eps3 = smbios3;
 
-       if (eps3 && memcmp(eps3->anchor, "_SM3_", 5) == 0 &&
+       if (eps3 && strncmp(eps3->anchor, "_SM3_", 5) == 0 &&
            eps3->length >= sizeof(*eps3) &&
            dmi_checksum(eps3, eps3->length)) {
                efi_smbios3_address = eps3->address;
@@ -241,13 +241,13 @@ void __init dmi_efi_get_table(const void *smbios, const 
void *smbios3)
                return;
        }
 
-       if (eps && memcmp(eps->anchor, "_SM_", 4) == 0 &&
+       if (eps && strncmp(eps->anchor, "_SM_", 4) == 0 &&
            eps->length >= sizeof(*eps) &&
            dmi_checksum(eps, eps->length)) {
                efi_smbios_address = (u32)(long)eps;
                efi_smbios_size = eps->length;
 
-               if (memcmp(eps->dmi.anchor, "_DMI_", 5) == 0 &&
+               if (strncmp(eps->dmi.anchor, "_DMI_", 5) == 0 &&
                    dmi_checksum(&eps->dmi, sizeof(eps->dmi))) {
                        efi_dmi_address = eps->dmi.address;
                        efi_dmi_size = eps->dmi.size;
@@ -288,7 +288,7 @@ const char *__init dmi_get_table(paddr_t *base, u32 *len)
                for (q = p; q <= p + 0x10000 - sizeof(eps.dmi); q += 16) {
                        memcpy_fromio(&eps, q, sizeof(eps.dmi));
                        if (!(instance & 1) &&
-                           memcmp(eps.dmi.anchor, "_DMI_", 5) == 0 &&
+                           strncmp(eps.dmi.anchor, "_DMI_", 5) == 0 &&
                            dmi_checksum(&eps.dmi, sizeof(eps.dmi))) {
                                *base = eps.dmi.address;
                                *len = eps.dmi.size;
@@ -302,7 +302,7 @@ const char *__init dmi_get_table(paddr_t *base, u32 *len)
                                continue;
                        memcpy_fromio(&eps.dmi + 1, q + sizeof(eps.dmi),
                                      sizeof(eps.smbios3) - sizeof(eps.dmi));
-                       if (!memcmp(eps.smbios3.anchor, "_SM3_", 5) &&
+                       if (strncmp(eps.smbios3.anchor, "_SM3_", 5) == 0 &&
                            eps.smbios3.length >= sizeof(eps.smbios3) &&
                            q <= p + 0x10000 - eps.smbios3.length &&
                            dmi_checksum(q, eps.smbios3.length)) {
@@ -370,14 +370,14 @@ static int __init dmi_iterate(void (*decode)(const struct 
dmi_header *))
        for (q = p; q < p + 0x10000; q += 16) {
                if (!dmi.size) {
                        memcpy_fromio(&dmi, q, sizeof(dmi));
-                       if (memcmp(dmi.anchor, "_DMI_", 5) ||
+                       if (strncmp(dmi.anchor, "_DMI_", 5) != 0 ||
                            !dmi_checksum(&dmi, sizeof(dmi)))
                                dmi.size = 0;
                }
                if (!smbios3.length &&
                    q <= p + 0x10000 - sizeof(smbios3)) {
                        memcpy_fromio(&smbios3, q, sizeof(smbios3));
-                       if (memcmp(smbios3.anchor, "_SM3_", 5) ||
+                       if (strncmp(smbios3.anchor, "_SM3_", 5) != 0 ||
                            smbios3.length < sizeof(smbios3) ||
                            q > p + 0x10000 - smbios3.length ||
                            !dmi_checksum(q, smbios3.length))
@@ -406,7 +406,7 @@ static int __init dmi_efi_iterate(void (*decode)(const 
struct dmi_header *))
                memcpy_fromio(&eps, p, sizeof(eps));
                bt_iounmap(p, sizeof(eps));
 
-               if (memcmp(eps.anchor, "_SM3_", 5) ||
+               if (strncmp(eps.anchor, "_SM3_", 5) != 0 ||
                    eps.length < sizeof(eps))
                        break;
 
@@ -429,7 +429,7 @@ static int __init dmi_efi_iterate(void (*decode)(const 
struct dmi_header *))
                memcpy_fromio(&eps, p, sizeof(eps));
                bt_iounmap(p, sizeof(eps));
 
-               if (memcmp(eps.anchor, "_SM_", 4) ||
+               if (strncmp(eps.anchor, "_SM_", 4) != 0 ||
                    eps.length < sizeof(eps))
                        return -1;
 
@@ -437,7 +437,7 @@ static int __init dmi_efi_iterate(void (*decode)(const 
struct dmi_header *))
                if (!p)
                        return -1;
                if (dmi_checksum(p, eps.length) &&
-                   memcmp(eps.dmi.anchor, "_DMI_", 5) == 0 &&
+                   strncmp(eps.dmi.anchor, "_DMI_", 5) == 0 &&
                    dmi_checksum(&eps.dmi, sizeof(eps.dmi))) {
                        printk(KERN_INFO "SMBIOS %d.%d present.\n",
                               eps.major, eps.minor);
diff --git a/xen/arch/x86/mpparse.c b/xen/arch/x86/mpparse.c
index e74a714f50..c86c38f191 100644
--- a/xen/arch/x86/mpparse.c
+++ b/xen/arch/x86/mpparse.c
@@ -303,7 +303,7 @@ static int __init smp_read_mpc(struct mp_config_table *mpc)
        int count=sizeof(*mpc);
        unsigned char *mpt=((unsigned char *)mpc)+count;
 
-       if (memcmp(mpc->mpc_signature,MPC_SIGNATURE,4)) {
+       if (strncmp(mpc->mpc_signature,MPC_SIGNATURE,4)) {
                printk(KERN_ERR "SMP mptable: bad signature [%#x]!\n",
                        *(u32 *)mpc->mpc_signature);
                return 0;
@@ -720,10 +720,10 @@ static void __init efi_check_config(void)
        __set_fixmap(FIX_EFI_MPF, PFN_DOWN(efi.mps), __PAGE_HYPERVISOR);
        mpf = fix_to_virt(FIX_EFI_MPF) + ((long)efi.mps & (PAGE_SIZE-1));
 
-       if (memcmp(mpf->mpf_signature, "_MP_", 4) == 0 &&
-           mpf->mpf_length == 1 &&
-           mpf_checksum((void *)mpf, 16) &&
-           (mpf->mpf_specification == 1 || mpf->mpf_specification == 4)) {
+       if (strncmp(mpf->mpf_signature, "_MP_", 4) == 0 &&
+            mpf->mpf_length == 1 &&
+            mpf_checksum((void *)mpf, 16) &&
+            (mpf->mpf_specification == 1 || mpf->mpf_specification == 4)) {
                smp_found_config = true;
                printk(KERN_INFO "SMP MP-table at %08lx\n", efi.mps);
                mpf_found = mpf;
-- 
2.25.1




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.