]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
kernel: replace strncpy with safer alternatives
authorRosen Penev <rosenp@gmail.com>
Sat, 20 Jun 2026 20:07:38 +0000 (13:07 -0700)
committerJonas Jelonek <jelonek.jonas@gmail.com>
Mon, 22 Jun 2026 09:06:47 +0000 (11:06 +0200)
strncpy is deprecated. Replace with:
- strscpy() for NUL-terminated destinations
- strscpy_pad() for NUL-terminated destinations with zero-padding
- memcpy() for fixed-length in-place overwrites (bootargs mangle/cmdline replacement)

Assisted-by: Opencode:Big-Pickle
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23892
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
target/linux/generic/files/drivers/net/phy/rtl8306.c
target/linux/generic/files/drivers/net/phy/swconfig_leds.c
target/linux/generic/pending-6.12/430-mtd-add-myloader-partition-parser.patch
target/linux/generic/pending-6.12/920-mangle_bootargs.patch
target/linux/generic/pending-6.18/430-mtd-add-myloader-partition-parser.patch
target/linux/generic/pending-6.18/920-mangle_bootargs.patch
target/linux/qualcommax/patches-6.12/0911-arm64-cmdline-replacement.patch

index 5ddb874bf8517475eda53571948d02a84f391c02..b91c493689c78fdd738d6e25ea2d4079d42dcdb4 100644 (file)
@@ -898,19 +898,19 @@ rtl8306_config_init(struct phy_device *pdev)
        switch(chiptype) {
        case 0:
        case 2:
-               strncpy(priv->hwname, RTL_NAME_S, sizeof(priv->hwname));
+               strscpy(priv->hwname, RTL_NAME_S, sizeof(priv->hwname));
                priv->type = RTL_TYPE_S;
                break;
        case 1:
-               strncpy(priv->hwname, RTL_NAME_SD, sizeof(priv->hwname));
+               strscpy(priv->hwname, RTL_NAME_SD, sizeof(priv->hwname));
                priv->type = RTL_TYPE_SD;
                break;
        case 3:
-               strncpy(priv->hwname, RTL_NAME_SDM, sizeof(priv->hwname));
+               strscpy(priv->hwname, RTL_NAME_SDM, sizeof(priv->hwname));
                priv->type = RTL_TYPE_SDM;
                break;
        default:
-               strncpy(priv->hwname, RTL_NAME_UNKNOWN, sizeof(priv->hwname));
+               strscpy(priv->hwname, RTL_NAME_UNKNOWN, sizeof(priv->hwname));
                break;
        }
 
index 1fcd4432b54ef86d3f5cc68905309884be79a96e..b0970b00e8a440986cb5f1aba9d29e2582333d68 100644 (file)
@@ -237,8 +237,7 @@ static ssize_t swconfig_trig_mode_store(struct device *dev,
        char *p, *token;
 
        /* take a copy since we don't want to trash the inbound buffer when using strsep */
-       strncpy(copybuf, buf, sizeof(copybuf));
-       copybuf[sizeof(copybuf) - 1] = 0;
+       strscpy(copybuf, buf, sizeof(copybuf));
        p = copybuf;
 
        while ((token = strsep(&p, " \t\n")) != NULL) {
index e1fe9a46bc3bbfdfb116c694efc0f1b875d13d73..8d308c989e3cc2ec8b8864c278199e448ed88d7f 100644 (file)
@@ -160,7 +160,7 @@ Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
 +      mtd_part = mtd_parts;
 +      names = (char *)&mtd_parts[num_parts];
 +
-+      strncpy(names, "myloader", PART_NAME_LEN);
++      strscpy_pad(names, "myloader", PART_NAME_LEN);
 +      mtd_part->name = names;
 +      mtd_part->offset = 0;
 +      mtd_part->size = offset;
@@ -168,7 +168,7 @@ Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
 +      mtd_part++;
 +      names += PART_NAME_LEN;
 +
-+      strncpy(names, "partition_table", PART_NAME_LEN);
++      strscpy_pad(names, "partition_table", PART_NAME_LEN);
 +      mtd_part->name = names;
 +      mtd_part->offset = offset;
 +      mtd_part->size = blocklen;
@@ -183,7 +183,7 @@ Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
 +                      continue;
 +
 +              if ((buf->names[i][0]) && (buf->names[i][0] != '\xff'))
-+                      strncpy(names, buf->names[i], PART_NAME_LEN);
++                      strscpy_pad(names, buf->names[i], PART_NAME_LEN);
 +              else
 +                      snprintf(names, PART_NAME_LEN, "partition%d", i);
 +
index c3b2f9dd50f85bd1f3666bffada5901e3b90d07a..636bf8f90e40da660c04d0a80950bc3a0356f530 100644 (file)
@@ -44,12 +44,12 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
 +      rootdev = strstr(command_line, "root=/dev/mtdblock");
 +
 +      if (rootdev)
-+              strncpy(rootdev, "mangled_rootblock=", 18);
++              memcpy(rootdev, "mangled_rootblock=", 18);
 +
 +      rootfs = strstr(command_line, "rootfstype");
 +
 +      if (rootfs)
-+              strncpy(rootfs, "mangled_fs", 10);
++              memcpy(rootfs, "mangled_fs", 10);
 +
 +}
 +#else
index e1fe9a46bc3bbfdfb116c694efc0f1b875d13d73..8d308c989e3cc2ec8b8864c278199e448ed88d7f 100644 (file)
@@ -160,7 +160,7 @@ Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
 +      mtd_part = mtd_parts;
 +      names = (char *)&mtd_parts[num_parts];
 +
-+      strncpy(names, "myloader", PART_NAME_LEN);
++      strscpy_pad(names, "myloader", PART_NAME_LEN);
 +      mtd_part->name = names;
 +      mtd_part->offset = 0;
 +      mtd_part->size = offset;
@@ -168,7 +168,7 @@ Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
 +      mtd_part++;
 +      names += PART_NAME_LEN;
 +
-+      strncpy(names, "partition_table", PART_NAME_LEN);
++      strscpy_pad(names, "partition_table", PART_NAME_LEN);
 +      mtd_part->name = names;
 +      mtd_part->offset = offset;
 +      mtd_part->size = blocklen;
@@ -183,7 +183,7 @@ Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
 +                      continue;
 +
 +              if ((buf->names[i][0]) && (buf->names[i][0] != '\xff'))
-+                      strncpy(names, buf->names[i], PART_NAME_LEN);
++                      strscpy_pad(names, buf->names[i], PART_NAME_LEN);
 +              else
 +                      snprintf(names, PART_NAME_LEN, "partition%d", i);
 +
index b91a9e10ac4517046e5f492bf6cdfb400d44a6a1..57942caced9079409d3418851556c0471f15b023 100644 (file)
@@ -44,12 +44,12 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
 +      rootdev = strstr(command_line, "root=/dev/mtdblock");
 +
 +      if (rootdev)
-+              strncpy(rootdev, "mangled_rootblock=", 18);
++              memcpy(rootdev, "mangled_rootblock=", 18);
 +
 +      rootfs = strstr(command_line, "rootfstype");
 +
 +      if (rootfs)
-+              strncpy(rootfs, "mangled_fs", 10);
++              memcpy(rootfs, "mangled_fs", 10);
 +
 +}
 +#else
index 8e72f181a653792260df958b1190400b2e900692..b376265a5cebb2090887537bf7bb718c713a6fff 100644 (file)
@@ -91,7 +91,7 @@ Signed-off-by: Qiyuan Zhang <zhang.github@outlook.com>
 +                                      *(cur_ptr + offset) = *cur_ptr;
 +                      }
 +
-+                      strncpy(s_ptr, p, r_len - 1);
++                      memcpy(s_ptr, p, r_len - 1);
 +
 +                      pr_info("Kernel command line after replacement: %s\n", cmdline);
 +              } else {