From: Alessandro Zucchelli <alessandro.zucche...@bugseng.com>

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.zucche...@bugseng.com>
---
 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


Reply via email to