svn commit: r245948 - head/sys/arm/arm
Ian Lepore
ian at FreeBSD.org
Sat Jan 26 20:16:58 UTC 2013
Author: ian
Date: Sat Jan 26 20:16:58 2013
New Revision: 245948
URL: http://svnweb.freebsd.org/changeset/base/245948
Log:
Fix a buffer overrun while pre-formatting the names array, perpetrated in
the prior commit. Use essentially the same sprintf() statement for both
formatting and pre-formatting, and use a format string which eliminates the
need for an extra temporary buffer when formatting the name.
Noted by: Christoph Mallon
Pointy hat to: ian
Approved by: cognet (mentor)
Modified:
head/sys/arm/arm/intr.c
Modified: head/sys/arm/arm/intr.c
==============================================================================
--- head/sys/arm/arm/intr.c Sat Jan 26 13:44:24 2013 (r245947)
+++ head/sys/arm/arm/intr.c Sat Jan 26 20:16:58 2013 (r245948)
@@ -68,13 +68,13 @@ void (*arm_post_filter)(void *) = NULL;
* consumers of this data.
*/
void
-arm_intrnames_init()
+arm_intrnames_init(void)
{
int i;
- memset(intrnames, ' ', NIRQ * INTRNAME_LEN);
for (i = 0; i < NIRQ; ++i)
- intrnames[i * INTRNAME_LEN - 1] = 0;
+ snprintf(&intrnames[i * INTRNAME_LEN], INTRNAME_LEN, "%-*s",
+ INTRNAME_LEN - 1, "");
}
void
@@ -83,7 +83,6 @@ arm_setup_irqhandler(const char *name, d
{
struct intr_event *event;
int error;
- char namebuf[INTRNAME_LEN];
if (irq < 0 || irq >= NIRQ)
return;
@@ -95,9 +94,8 @@ arm_setup_irqhandler(const char *name, d
if (error)
return;
intr_events[irq] = event;
- snprintf(namebuf, sizeof(namebuf), "irq%d: %s", irq, name);
- sprintf(intrnames + INTRNAME_LEN * irq, "%-*s",
- INTRNAME_LEN - 1, namebuf);
+ snprintf(&intrnames[irq * INTRNAME_LEN], INTRNAME_LEN, "%-*s",
+ INTRNAME_LEN - 1, name);
}
intr_event_add_handler(event, name, filt, hand, arg,
intr_priority(flags), flags, cookiep);
More information about the svn-src-all
mailing list