ARC: Fix iteration in arc_xx_version()
authorAlexey Brodkin <alexey.brodkin@synopsys.com>
Tue, 22 Jan 2019 16:33:59 +0000 (19:33 +0300)
committerAlexey Brodkin <abrodkin@synopsys.com>
Fri, 25 Jan 2019 05:40:53 +0000 (08:40 +0300)
"i" gets incremented before we're entering loop body
and effectively we iterate from 1 to 8 instead of 0 to 7.

This way we:
 a) Skip the first line of struct hs_versions
 b) Go over it and access memory beyond the structure

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
arch/arc/lib/cpu.c

index 07daaa8d155156f157e62d0794d62f7b9d0ebf70..01cca95d5b1854cd07029fd978b3cdc8f67beffa 100644 (file)
@@ -87,7 +87,7 @@ const char *arc_em_version(int arcver, char *name, int name_len)
        bool xymem = ARC_FEATURE_EXISTS(ARC_AUX_XY_BUILD);
        int i;
 
-       for (i = 0; i++ < sizeof(em_versions) / sizeof(struct em_template_t);) {
+       for (i = 0; i < sizeof(em_versions) / sizeof(struct em_template_t); i++) {
                if (em_versions[i].cache == cache &&
                    em_versions[i].dsp == dsp &&
                    em_versions[i].xymem == xymem) {
@@ -147,7 +147,7 @@ const char *arc_hs_version(int arcver, char *name, int name_len)
        bool dual_issue = arcver == 0x54 ? true : false;
        int i;
 
-       for (i = 0; i++ < sizeof(hs_versions) / sizeof(struct hs_template_t);) {
+       for (i = 0; i < sizeof(hs_versions) / sizeof(struct hs_template_t); i++) {
                if (hs_versions[i].cache == cache &&
                    hs_versions[i].mmu == mmu &&
                    hs_versions[i].dual_issue == dual_issue &&