if (tb[RDMA_NLDEV_ATTR_DEV_NAME]) {
                char name[IB_DEVICE_NAME_MAX] = {};
 
-               nla_strlcpy(name, tb[RDMA_NLDEV_ATTR_DEV_NAME],
+               nla_strscpy(name, tb[RDMA_NLDEV_ATTR_DEV_NAME],
                            IB_DEVICE_NAME_MAX);
                if (strlen(name) == 0) {
                        err = -EINVAL;
            !tb[RDMA_NLDEV_ATTR_LINK_TYPE] || !tb[RDMA_NLDEV_ATTR_NDEV_NAME])
                return -EINVAL;
 
-       nla_strlcpy(ibdev_name, tb[RDMA_NLDEV_ATTR_DEV_NAME],
+       nla_strscpy(ibdev_name, tb[RDMA_NLDEV_ATTR_DEV_NAME],
                    sizeof(ibdev_name));
        if (strchr(ibdev_name, '%') || strlen(ibdev_name) == 0)
                return -EINVAL;
 
-       nla_strlcpy(type, tb[RDMA_NLDEV_ATTR_LINK_TYPE], sizeof(type));
-       nla_strlcpy(ndev_name, tb[RDMA_NLDEV_ATTR_NDEV_NAME],
+       nla_strscpy(type, tb[RDMA_NLDEV_ATTR_LINK_TYPE], sizeof(type));
+       nla_strscpy(ndev_name, tb[RDMA_NLDEV_ATTR_NDEV_NAME],
                    sizeof(ndev_name));
 
        ndev = dev_get_by_name(sock_net(skb->sk), ndev_name);
        if (err || !tb[RDMA_NLDEV_ATTR_CHARDEV_TYPE])
                return -EINVAL;
 
-       nla_strlcpy(client_name, tb[RDMA_NLDEV_ATTR_CHARDEV_TYPE],
+       nla_strscpy(client_name, tb[RDMA_NLDEV_ATTR_CHARDEV_TYPE],
                    sizeof(client_name));
 
        if (tb[RDMA_NLDEV_ATTR_DEV_INDEX]) {
 
        }
 
        if (ifmp && tbp[IFLA_IFNAME]) {
-               nla_strlcpy(ifname, tbp[IFLA_IFNAME], IFNAMSIZ);
+               nla_strscpy(ifname, tbp[IFLA_IFNAME], IFNAMSIZ);
                name_assign_type = NET_NAME_USER;
        } else {
                snprintf(ifname, IFNAMSIZ, DRV_NAME "%%d");
 
        /* register first device */
        if (tb[IFLA_IFNAME])
-               nla_strlcpy(dev->name, tb[IFLA_IFNAME], IFNAMSIZ);
+               nla_strscpy(dev->name, tb[IFLA_IFNAME], IFNAMSIZ);
        else
                snprintf(dev->name, IFNAMSIZ, DRV_NAME "%%d");
 
 
        }
 
        if (ifmp && tbp[IFLA_IFNAME]) {
-               nla_strlcpy(ifname, tbp[IFLA_IFNAME], IFNAMSIZ);
+               nla_strscpy(ifname, tbp[IFLA_IFNAME], IFNAMSIZ);
                name_assign_type = NET_NAME_USER;
        } else {
                snprintf(ifname, IFNAMSIZ, DRV_NAME "%%d");
                eth_hw_addr_random(dev);
 
        if (tb[IFLA_IFNAME])
-               nla_strlcpy(dev->name, tb[IFLA_IFNAME], IFNAMSIZ);
+               nla_strscpy(dev->name, tb[IFLA_IFNAME], IFNAMSIZ);
        else
                snprintf(dev->name, IFNAMSIZ, DRV_NAME "%%d");
 
 
                        nla_get_u64, nla_put_u64_0pad, false)
 #define __str_field(attr_nr, attr_flag, name, maxlen) \
        __array(attr_nr, attr_flag, name, NLA_NUL_STRING, char, maxlen, \
-                       nla_strlcpy, nla_put, false)
+                       nla_strscpy, nla_put, false)
 #define __bin_field(attr_nr, attr_flag, name, maxlen) \
        __array(attr_nr, attr_flag, name, NLA_BINARY, char, maxlen, \
                        nla_memcpy, nla_put, false)
 
  * Attribute Misc:
  *   nla_memcpy(dest, nla, count)      copy attribute into memory
  *   nla_memcmp(nla, data, size)       compare attribute with memory area
- *   nla_strlcpy(dst, nla, size)       copy attribute to a sized string
+ *   nla_strscpy(dst, nla, size)       copy attribute to a sized string
  *   nla_strcmp(nla, str)              compare attribute with string
  *
  * Attribute Parsing:
                struct netlink_ext_ack *extack);
 int nla_policy_len(const struct nla_policy *, int);
 struct nlattr *nla_find(const struct nlattr *head, int len, int attrtype);
-ssize_t nla_strlcpy(char *dst, const struct nlattr *nla, size_t dstsize);
+ssize_t nla_strscpy(char *dst, const struct nlattr *nla, size_t dstsize);
 char *nla_strdup(const struct nlattr *nla, gfp_t flags);
 int nla_memcpy(void *dest, const struct nlattr *src, int count);
 int nla_memcmp(const struct nlattr *nla, const void *data, size_t size);
 
        char indev[IFNAMSIZ];
        struct net_device *dev;
 
-       if (nla_strlcpy(indev, indev_tlv, IFNAMSIZ) < 0) {
+       if (nla_strscpy(indev, indev_tlv, IFNAMSIZ) < 0) {
                NL_SET_ERR_MSG_ATTR(extack, indev_tlv,
                                    "Interface name too long");
                return -EINVAL;
 
        data = kmalloc(len, GFP_KERNEL);
        if (!data)
                return -ENOMEM;
-       nla_strlcpy(data, na, len);
+       nla_strscpy(data, na, len);
        ret = cpulist_parse(data, mask);
        kfree(data);
        return ret;
 
 EXPORT_SYMBOL(nla_find);
 
 /**
- * nla_strlcpy - Copy string attribute payload into a sized buffer
+ * nla_strscpy - Copy string attribute payload into a sized buffer
  * @dst: Where to copy the string to.
  * @nla: Attribute to copy the string from.
  * @dstsize: Size of destination buffer.
  * * -E2BIG - If @dstsize is 0 or greater than U16_MAX or @nla length greater
  *            than @dstsize.
  */
-ssize_t nla_strlcpy(char *dst, const struct nlattr *nla, size_t dstsize)
+ssize_t nla_strscpy(char *dst, const struct nlattr *nla, size_t dstsize)
 {
        size_t srclen = nla_len(nla);
        char *src = nla_data(nla);
 
        return ret;
 }
-EXPORT_SYMBOL(nla_strlcpy);
+EXPORT_SYMBOL(nla_strscpy);
 
 /**
  * nla_strdup - Copy string attribute payload into a newly allocated buffer
 
                struct net_device *dev;
 
                nlrule->iifindex = -1;
-               nla_strlcpy(nlrule->iifname, tb[FRA_IIFNAME], IFNAMSIZ);
+               nla_strscpy(nlrule->iifname, tb[FRA_IIFNAME], IFNAMSIZ);
                dev = __dev_get_by_name(net, nlrule->iifname);
                if (dev)
                        nlrule->iifindex = dev->ifindex;
                struct net_device *dev;
 
                nlrule->oifindex = -1;
-               nla_strlcpy(nlrule->oifname, tb[FRA_OIFNAME], IFNAMSIZ);
+               nla_strscpy(nlrule->oifname, tb[FRA_OIFNAME], IFNAMSIZ);
                dev = __dev_get_by_name(net, nlrule->oifname);
                if (dev)
                        nlrule->oifindex = dev->ifindex;
 
        if (linfo[IFLA_INFO_KIND]) {
                char kind[MODULE_NAME_LEN];
 
-               nla_strlcpy(kind, linfo[IFLA_INFO_KIND], sizeof(kind));
+               nla_strscpy(kind, linfo[IFLA_INFO_KIND], sizeof(kind));
                ops = rtnl_link_ops_get(kind);
        }
 
        if (!ifname) {
                ifname = buffer;
                if (ifname_attr)
-                       nla_strlcpy(ifname, ifname_attr, IFNAMSIZ);
+                       nla_strscpy(ifname, ifname_attr, IFNAMSIZ);
                else if (altifname_attr)
-                       nla_strlcpy(ifname, altifname_attr, ALTIFNAMSIZ);
+                       nla_strscpy(ifname, altifname_attr, ALTIFNAMSIZ);
                else
                        return NULL;
        }
                goto errout;
 
        if (tb[IFLA_IFNAME])
-               nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
+               nla_strscpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
        else
                ifname[0] = '\0';
 
                return err;
 
        if (tb[IFLA_IFNAME])
-               nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
+               nla_strscpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
        else
                ifname[0] = '\0';
 
                memset(linkinfo, 0, sizeof(linkinfo));
 
        if (linkinfo[IFLA_INFO_KIND]) {
-               nla_strlcpy(kind, linkinfo[IFLA_INFO_KIND], sizeof(kind));
+               nla_strscpy(kind, linkinfo[IFLA_INFO_KIND], sizeof(kind));
                ops = rtnl_link_ops_get(kind);
        } else {
                kind[0] = '\0';
 
        ifa->ifa_dev = dn_db;
 
        if (tb[IFA_LABEL])
-               nla_strlcpy(ifa->ifa_label, tb[IFA_LABEL], IFNAMSIZ);
+               nla_strscpy(ifa->ifa_label, tb[IFA_LABEL], IFNAMSIZ);
        else
                memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
 
 
        if (info->attrs[IEEE802154_ATTR_DEV_NAME]) {
                char name[IFNAMSIZ + 1];
 
-               nla_strlcpy(name, info->attrs[IEEE802154_ATTR_DEV_NAME],
+               nla_strscpy(name, info->attrs[IEEE802154_ATTR_DEV_NAME],
                            sizeof(name));
                dev = dev_get_by_name(&init_net, name);
        } else if (info->attrs[IEEE802154_ATTR_DEV_INDEX]) {
 
                ifa->ifa_broadcast = nla_get_in_addr(tb[IFA_BROADCAST]);
 
        if (tb[IFA_LABEL])
-               nla_strlcpy(ifa->ifa_label, tb[IFA_LABEL], IFNAMSIZ);
+               nla_strscpy(ifa->ifa_label, tb[IFA_LABEL], IFNAMSIZ);
        else
                memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
 
 
                        char tmp[TCP_CA_NAME_MAX];
                        bool ecn_ca = false;
 
-                       nla_strlcpy(tmp, nla, sizeof(tmp));
+                       nla_strscpy(tmp, nla, sizeof(tmp));
                        val = tcp_ca_get_key_by_name(fi->fib_net, tmp, &ecn_ca);
                } else {
                        if (nla_len(nla) != sizeof(u32))
 
                if (type == RTAX_CC_ALGO) {
                        char tmp[TCP_CA_NAME_MAX];
 
-                       nla_strlcpy(tmp, nla, sizeof(tmp));
+                       nla_strscpy(tmp, nla, sizeof(tmp));
                        val = tcp_ca_get_key_by_name(net, tmp, &ecn_ca);
                        if (val == TCP_CA_UNSPEC) {
                                NL_SET_ERR_MSG(extack, "Unknown tcp congestion algorithm");
 
                if (e.cidr > HOST_MASK)
                        return -IPSET_ERR_INVALID_CIDR;
        }
-       nla_strlcpy(e.iface, tb[IPSET_ATTR_IFACE], IFNAMSIZ);
+       nla_strscpy(e.iface, tb[IPSET_ATTR_IFACE], IFNAMSIZ);
 
        if (tb[IPSET_ATTR_CADT_FLAGS]) {
                u32 cadt_flags = ip_set_get_h32(tb[IPSET_ATTR_CADT_FLAGS]);
 
        ip6_netmask(&e.ip, e.cidr);
 
-       nla_strlcpy(e.iface, tb[IPSET_ATTR_IFACE], IFNAMSIZ);
+       nla_strscpy(e.iface, tb[IPSET_ATTR_IFACE], IFNAMSIZ);
 
        if (tb[IPSET_ATTR_CADT_FLAGS]) {
                u32 cadt_flags = ip_set_get_h32(tb[IPSET_ATTR_CADT_FLAGS]);
 
        if (nla == NULL)
                return ERR_PTR(-EINVAL);
 
-       nla_strlcpy(search, nla, sizeof(search));
+       nla_strscpy(search, nla, sizeof(search));
 
        WARN_ON(!rcu_read_lock_held() &&
                !lockdep_commit_lock_is_held(net));
                goto err_hook_alloc;
        }
 
-       nla_strlcpy(ifname, attr, IFNAMSIZ);
+       nla_strscpy(ifname, attr, IFNAMSIZ);
        dev = __dev_get_by_name(net, ifname);
        if (!dev) {
                err = -ENOENT;
        struct rhlist_head *tmp, *list;
        struct nft_object *obj;
 
-       nla_strlcpy(search, nla, sizeof(search));
+       nla_strscpy(search, nla, sizeof(search));
        k.name = search;
 
        WARN_ON_ONCE(!rcu_read_lock_held() &&
 
                nfacct->flags = flags;
        }
 
-       nla_strlcpy(nfacct->name, tb[NFACCT_NAME], NFACCT_NAME_MAX);
+       nla_strscpy(nfacct->name, tb[NFACCT_NAME], NFACCT_NAME_MAX);
 
        if (tb[NFACCT_BYTES]) {
                atomic64_set(&nfacct->bytes,
 
            !tb[NFCTH_POLICY_EXPECT_TIMEOUT])
                return -EINVAL;
 
-       nla_strlcpy(expect_policy->name,
+       nla_strscpy(expect_policy->name,
                    tb[NFCTH_POLICY_NAME], NF_CT_HELPER_NAME_LEN);
        expect_policy->max_expected =
                ntohl(nla_get_be32(tb[NFCTH_POLICY_EXPECT_MAX]));
        if (ret < 0)
                goto err1;
 
-       nla_strlcpy(helper->name,
+       nla_strscpy(helper->name,
                    tb[NFCTH_NAME], NF_CT_HELPER_NAME_LEN);
        size = ntohl(nla_get_be32(tb[NFCTH_PRIV_DATA_LEN]));
        if (size > sizeof_field(struct nf_conn_help, data)) {
 
        if (!priv->l4proto)
                return -ENOENT;
 
-       nla_strlcpy(name, tb[NFTA_CT_HELPER_NAME], sizeof(name));
+       nla_strscpy(name, tb[NFTA_CT_HELPER_NAME], sizeof(name));
 
        if (tb[NFTA_CT_HELPER_L3PROTO])
                family = ntohs(nla_get_be16(tb[NFTA_CT_HELPER_L3PROTO]));
 
                priv->prefix = kmalloc(nla_len(nla) + 1, GFP_KERNEL);
                if (priv->prefix == NULL)
                        return -ENOMEM;
-               nla_strlcpy(priv->prefix, nla, nla_len(nla) + 1);
+               nla_strscpy(priv->prefix, nla, nla_len(nla) + 1);
        } else {
                priv->prefix = (char *)nft_log_null_prefix;
        }
 
                        ret_val = -ENOMEM;
                        goto add_free_entry;
                }
-               nla_strlcpy(entry->domain,
+               nla_strscpy(entry->domain,
                            info->attrs[NLBL_MGMT_A_DOMAIN], tmp_size);
        }
 
 
        if (!dev)
                return -ENODEV;
 
-       nla_strlcpy(firmware_name, info->attrs[NFC_ATTR_FIRMWARE_NAME],
+       nla_strscpy(firmware_name, info->attrs[NFC_ATTR_FIRMWARE_NAME],
                    sizeof(firmware_name));
 
        rc = nfc_fw_download(dev, firmware_name);
 
                        NL_SET_ERR_MSG(extack, "TC action kind must be specified");
                        goto err_out;
                }
-               if (nla_strlcpy(act_name, kind, IFNAMSIZ) < 0) {
+               if (nla_strscpy(act_name, kind, IFNAMSIZ) < 0) {
                        NL_SET_ERR_MSG(extack, "TC action name too long");
                        goto err_out;
                }
 
        if (unlikely(!tname))
                goto err1;
        if (tb[TCA_IPT_TABLE] == NULL ||
-           nla_strlcpy(tname, tb[TCA_IPT_TABLE], IFNAMSIZ) >= IFNAMSIZ)
+           nla_strscpy(tname, tb[TCA_IPT_TABLE], IFNAMSIZ) >= IFNAMSIZ)
                strcpy(tname, "mangle");
 
        t = kmemdup(td, td->u.target_size, GFP_KERNEL);
 
        d->tcfd_defdata = kzalloc(SIMP_MAX_DATA, GFP_KERNEL);
        if (unlikely(!d->tcfd_defdata))
                return -ENOMEM;
-       nla_strlcpy(d->tcfd_defdata, defdata, SIMP_MAX_DATA);
+       nla_strscpy(d->tcfd_defdata, defdata, SIMP_MAX_DATA);
        return 0;
 }
 
        spin_lock_bh(&d->tcf_lock);
        goto_ch = tcf_action_set_ctrlact(a, p->action, goto_ch);
        memset(d->tcfd_defdata, 0, SIMP_MAX_DATA);
-       nla_strlcpy(d->tcfd_defdata, defdata, SIMP_MAX_DATA);
+       nla_strscpy(d->tcfd_defdata, defdata, SIMP_MAX_DATA);
        spin_unlock_bh(&d->tcf_lock);
        if (goto_ch)
                tcf_chain_put_by_act(goto_ch);
 
 static bool tcf_proto_check_kind(struct nlattr *kind, char *name)
 {
        if (kind)
-               return nla_strlcpy(name, kind, IFNAMSIZ) < 0;
+               return nla_strscpy(name, kind, IFNAMSIZ) < 0;
        memset(name, 0, IFNAMSIZ);
        return false;
 }
 
 #ifdef CONFIG_MODULES
        if (ops == NULL && kind != NULL) {
                char name[IFNAMSIZ];
-               if (nla_strlcpy(name, kind, IFNAMSIZ) >= 0) {
+               if (nla_strscpy(name, kind, IFNAMSIZ) >= 0) {
                        /* We dropped the RTNL semaphore in order to
                         * perform the module load.  So, even if we
                         * succeeded in loading the module we have to
 
 
        link_info.dest = nla_get_flag(link[TIPC_NLA_LINK_DEST]);
        link_info.up = htonl(nla_get_flag(link[TIPC_NLA_LINK_UP]));
-       nla_strlcpy(link_info.str, link[TIPC_NLA_LINK_NAME],
+       nla_strscpy(link_info.str, link[TIPC_NLA_LINK_NAME],
                    TIPC_MAX_LINK_NAME);
 
        return tipc_add_tlv(msg->rep, TIPC_TLV_LINK_INFO,