Skip to content

Commit 215a423

Browse files
tiwaisuryasaimadhu
authored andcommitted
EDAC/armada_xp: Use scnprintf() for avoiding potential buffer overflow
Since snprintf() returns the would-be-output size instead of the actual output size, the succeeding calls may go beyond the given buffer limit. Fix it by replacing with scnprintf(). Signed-off-by: Takashi Iwai <[email protected]> Signed-off-by: Borislav Petkov <[email protected]> Reviewed-by: Jan Luebbe <[email protected]> Link: https://lkml.kernel.org/r/[email protected]
1 parent 52cff04 commit 215a423

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

drivers/edac/armada_xp_edac.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -429,46 +429,46 @@ static void aurora_l2_check(struct edac_device_ctl_info *dci)
429429

430430
src = (attr_cap & AURORA_ERR_ATTR_SRC_MSK) >> AURORA_ERR_ATTR_SRC_OFF;
431431
if (src <= 3)
432-
len += snprintf(msg+len, size-len, "src=CPU%d ", src);
432+
len += scnprintf(msg+len, size-len, "src=CPU%d ", src);
433433
else
434-
len += snprintf(msg+len, size-len, "src=IO ");
434+
len += scnprintf(msg+len, size-len, "src=IO ");
435435

436436
txn = (attr_cap & AURORA_ERR_ATTR_TXN_MSK) >> AURORA_ERR_ATTR_TXN_OFF;
437437
switch (txn) {
438438
case 0:
439-
len += snprintf(msg+len, size-len, "txn=Data-Read ");
439+
len += scnprintf(msg+len, size-len, "txn=Data-Read ");
440440
break;
441441
case 1:
442-
len += snprintf(msg+len, size-len, "txn=Isn-Read ");
442+
len += scnprintf(msg+len, size-len, "txn=Isn-Read ");
443443
break;
444444
case 2:
445-
len += snprintf(msg+len, size-len, "txn=Clean-Flush ");
445+
len += scnprintf(msg+len, size-len, "txn=Clean-Flush ");
446446
break;
447447
case 3:
448-
len += snprintf(msg+len, size-len, "txn=Eviction ");
448+
len += scnprintf(msg+len, size-len, "txn=Eviction ");
449449
break;
450450
case 4:
451-
len += snprintf(msg+len, size-len,
451+
len += scnprintf(msg+len, size-len,
452452
"txn=Read-Modify-Write ");
453453
break;
454454
}
455455

456456
err = (attr_cap & AURORA_ERR_ATTR_ERR_MSK) >> AURORA_ERR_ATTR_ERR_OFF;
457457
switch (err) {
458458
case 0:
459-
len += snprintf(msg+len, size-len, "err=CorrECC ");
459+
len += scnprintf(msg+len, size-len, "err=CorrECC ");
460460
break;
461461
case 1:
462-
len += snprintf(msg+len, size-len, "err=UnCorrECC ");
462+
len += scnprintf(msg+len, size-len, "err=UnCorrECC ");
463463
break;
464464
case 2:
465-
len += snprintf(msg+len, size-len, "err=TagParity ");
465+
len += scnprintf(msg+len, size-len, "err=TagParity ");
466466
break;
467467
}
468468

469-
len += snprintf(msg+len, size-len, "addr=0x%x ", addr_cap & AURORA_ERR_ADDR_CAP_ADDR_MASK);
470-
len += snprintf(msg+len, size-len, "index=0x%x ", (way_cap & AURORA_ERR_WAY_IDX_MSK) >> AURORA_ERR_WAY_IDX_OFF);
471-
len += snprintf(msg+len, size-len, "way=0x%x", (way_cap & AURORA_ERR_WAY_CAP_WAY_MASK) >> AURORA_ERR_WAY_CAP_WAY_OFFSET);
469+
len += scnprintf(msg+len, size-len, "addr=0x%x ", addr_cap & AURORA_ERR_ADDR_CAP_ADDR_MASK);
470+
len += scnprintf(msg+len, size-len, "index=0x%x ", (way_cap & AURORA_ERR_WAY_IDX_MSK) >> AURORA_ERR_WAY_IDX_OFF);
471+
len += scnprintf(msg+len, size-len, "way=0x%x", (way_cap & AURORA_ERR_WAY_CAP_WAY_MASK) >> AURORA_ERR_WAY_CAP_WAY_OFFSET);
472472

473473
/* clear error capture registers */
474474
writel(AURORA_ERR_ATTR_CAP_VALID, drvdata->base + AURORA_ERR_ATTR_CAP_REG);

0 commit comments

Comments
 (0)