浏览代码

ar71xx: mikrotik: prepend "RouterBOARD" to machine name for NOR devices

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 <[email protected]>
Thibaut VARENE 8 年之前
父节点
当前提交
e1f3cf7ede
共有 1 个文件被更改,包括 15 次插入3 次删除
  1. 15 3
      target/linux/ar71xx/files/arch/mips/ath79/mach-rbspi.c

+ 15 - 3
target/linux/ar71xx/files/arch/mips/ath79/mach-rbspi.c

@@ -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 */