ar71xx: mikrotik: prepend "RouterBOARD" to machine name for NOR devices
authorThibaut VARENE <hacks@slashdirt.org>
Mon, 13 Mar 2017 13:51:54 +0000 (14:51 +0100)
committerPiotr Dymacz <pepe2k@gmail.com>
Wed, 15 Mar 2017 22:00:52 +0000 (23:00 +0100)
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>
target/linux/ar71xx/files/arch/mips/ath79/mach-rbspi.c

index b26b1ae46eb7c3fcf94863249608b9f379c4189c..3f68b94bcdf0f7bdd7ada6071ae1faa76a74172e 100644 (file)
@@ -437,20 +437,32 @@ void __init rbspi_wlan_init(u16 id, int wmac_offset)
        kfree(art_buf);
 }
 
+#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;
-       char buf[64];
+       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;
 
-       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 */