When the device name doesn't already contain "RouterBOARD", this patch adds
this string to the machine name.
Most NOR devices already have "RouterBOARD" in their hardware-stored device name,
but not all of them.
This patch also makes the code more robust against buffer overflows.
Signed-off-by: Thibaut VARENE <hacks@slashdirt.org>
+#define RBSPI_MACH_BUFLEN 64
/*
* Common platform init routine for all SPI NOR devices.
*/
static int __init rbspi_platform_setup(void)
{
const struct rb_info *info;
/*
* Common platform init routine for all SPI NOR devices.
*/
static int __init rbspi_platform_setup(void)
{
const struct rb_info *info;
+ char buf[RBSPI_MACH_BUFLEN] = "MikroTik ";
+ char *str;
+ int len = RBSPI_MACH_BUFLEN - strlen(buf) - 1;
info = rb_init_info((void *)(KSEG1ADDR(AR71XX_SPI_BASE)), 0x20000);
if (!info)
return -ENODEV;
info = rb_init_info((void *)(KSEG1ADDR(AR71XX_SPI_BASE)), 0x20000);
if (!info)
return -ENODEV;
- scnprintf(buf, sizeof(buf), "MikroTik %s",
- (info->board_name) ? info->board_name : "");
+ if (info->board_name) {
+ str = "RouterBOARD ";
+ if (strncmp(info->board_name, str, strlen(str))) {
+ strncat(buf, str, len);
+ len -= strlen(str);
+ }
+ strncat(buf, info->board_name, len);
+ }
+ else
+ strncat(buf, "UNKNOWN", len);
+
mips_set_machine_name(buf);
/* fix partitions based on flash parsing */
mips_set_machine_name(buf);
/* fix partitions based on flash parsing */