From 1ccb6edda2e7a8a6200f533aa58e3acec13c13fd Mon Sep 17 00:00:00 2001 From: Jon Hunter Date: Mon, 22 Jan 2024 11:35:01 +0000 Subject: [PATCH] drivers: Don't use strlcpy() For Linux v6.8, the function strlcpy() has been removed. The function strscpy() was added in Linux v4.3 and has been preferred over strlcpy(). See upstream Linux commit 30035e45753b ("string: provide strscpy()") for more details. The Linux checkpatch.pl script warns against using strlcpy(). The function strscpy() takes the same arguments as strlcpy(), but returns a type of ssize_t instead of size_t. Update the drivers to use strscpy() instead of strlcpy(). Bug 4448428 Change-Id: Id6f196f0e81decf1545f9aa4f74f5c63a7f72a48 Signed-off-by: Jon Hunter Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3059457 (cherry picked from commit ecf383265b72ab92e8f5756775a6a8f369248753) Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3063000 Reviewed-by: Brad Griffis GVS: Gerrit_Virtual_Submit --- drivers/clk/tegra/clk-bpmp.c | 8 +++----- drivers/media/platform/tegra/camera/vi/channel.c | 16 +++++++++++----- .../media/platform/tegra/camera/vi/mc_common.c | 11 +++++++---- .../ethernet/microchip/5.15/lan743x_ethtool.c | 4 ++-- drivers/net/ethernet/realtek/r8168_n.c | 2 +- drivers/platform/tegra/nvadsp/app.c | 6 ++---- drivers/platform/tegra/nvadsp/mem_manager.c | 16 +++++++--------- drivers/platform/tegra/nvadsp/os.c | 8 ++++---- include/trace/events/tegra_capture.h | 8 ++++---- 9 files changed, 41 insertions(+), 38 deletions(-) diff --git a/drivers/clk/tegra/clk-bpmp.c b/drivers/clk/tegra/clk-bpmp.c index 28f514c4..542e602f 100644 --- a/drivers/clk/tegra/clk-bpmp.c +++ b/drivers/clk/tegra/clk-bpmp.c @@ -1,7 +1,5 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved. - */ +// SPDX-License-Identifier: GPL-2.0-only +// SPDX-FileCopyrightText: Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. #include #include @@ -366,7 +364,7 @@ static int tegra_bpmp_clk_get_info(struct tegra_bpmp *bpmp, unsigned int id, if (err < 0) return err; - strlcpy(info->name, response.name, MRQ_CLK_NAME_MAXLEN); + strscpy(info->name, response.name, MRQ_CLK_NAME_MAXLEN); info->num_parents = response.num_parents; for (i = 0; i < info->num_parents; i++) diff --git a/drivers/media/platform/tegra/camera/vi/channel.c b/drivers/media/platform/tegra/camera/vi/channel.c index c4da4119..91f8d5f8 100644 --- a/drivers/media/platform/tegra/camera/vi/channel.c +++ b/drivers/media/platform/tegra/camera/vi/channel.c @@ -1,8 +1,7 @@ -// SPDX-License-Identifier: GPL-2.0 +// SPDX-License-Identifier: GPL-2.0-only +// SPDX-FileCopyrightText: Copyright (c) 2015-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. /* * NVIDIA Tegra Video Input Device - * - * Copyright (c) 2015-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. */ #include @@ -1023,14 +1022,21 @@ static int tegra_channel_querycap(struct file *file, void *fh, struct v4l2_capability *cap) { struct tegra_channel *chan = video_drvdata(file); + ssize_t len; int ret = 0; cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; cap->device_caps |= V4L2_CAP_EXT_PIX_FORMAT; cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS; - strlcpy(cap->driver, "tegra-video", sizeof(cap->driver)); - strlcpy(cap->card, chan->video->name, sizeof(cap->card)); + len = strscpy(cap->driver, "tegra-video", sizeof(cap->driver)); + if (len < 0) + return -ENAMETOOLONG; + + len = strscpy(cap->card, chan->video->name, sizeof(cap->card)); + if (len < 0) + return -ENAMETOOLONG; + ret = snprintf(cap->bus_info, sizeof(cap->bus_info), "platform:%s:%u", dev_name(chan->vi->dev), chan->port[0]); if (ret < 0) diff --git a/drivers/media/platform/tegra/camera/vi/mc_common.c b/drivers/media/platform/tegra/camera/vi/mc_common.c index 57c2d61a..ae6b4927 100644 --- a/drivers/media/platform/tegra/camera/vi/mc_common.c +++ b/drivers/media/platform/tegra/camera/vi/mc_common.c @@ -1,8 +1,7 @@ -// SPDX-License-Identifier: GPL-2.0 +// SPDX-License-Identifier: GPL-2.0-only +// SPDX-FileCopyrightText: Copyright (c) 2015-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. /* * Tegra Video Input device common APIs - * - * Copyright (c) 2015-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. */ #include @@ -116,11 +115,15 @@ static void tegra_vi_notify(struct v4l2_subdev *sd, int tegra_vi_v4l2_init(struct tegra_mc_vi *vi) { + ssize_t len; int ret; vi->media_dev.dev = vi->dev; - strlcpy(vi->media_dev.model, "NVIDIA Tegra Video Input Device", + len = strscpy(vi->media_dev.model, "NVIDIA Tegra Video Input Device", sizeof(vi->media_dev.model)); + if (len < 0) + return -ENAMETOOLONG; + vi->media_dev.hw_revision = 3; media_device_init(&vi->media_dev); diff --git a/drivers/net/ethernet/microchip/5.15/lan743x_ethtool.c b/drivers/net/ethernet/microchip/5.15/lan743x_ethtool.c index 91a755ef..5552a8a7 100644 --- a/drivers/net/ethernet/microchip/5.15/lan743x_ethtool.c +++ b/drivers/net/ethernet/microchip/5.15/lan743x_ethtool.c @@ -268,8 +268,8 @@ static void lan743x_ethtool_get_drvinfo(struct net_device *netdev, { struct lan743x_adapter *adapter = netdev_priv(netdev); - strlcpy(info->driver, DRIVER_NAME, sizeof(info->driver)); - strlcpy(info->bus_info, + strscpy(info->driver, DRIVER_NAME, sizeof(info->driver)); + strscpy(info->bus_info, pci_name(adapter->pdev), sizeof(info->bus_info)); } diff --git a/drivers/net/ethernet/realtek/r8168_n.c b/drivers/net/ethernet/realtek/r8168_n.c index 4239a007..60a12bd6 100644 --- a/drivers/net/ethernet/realtek/r8168_n.c +++ b/drivers/net/ethernet/realtek/r8168_n.c @@ -5232,7 +5232,7 @@ rtl8168_get_drvinfo(struct net_device *dev, info->eedump_len = tp->eeprom_len; BUILD_BUG_ON(sizeof(info->fw_version) < sizeof(rtl_fw->version)); if (rtl_fw) - strlcpy(info->fw_version, rtl_fw->version, + strscpy(info->fw_version, rtl_fw->version, sizeof(info->fw_version)); } diff --git a/drivers/platform/tegra/nvadsp/app.c b/drivers/platform/tegra/nvadsp/app.c index 6b725495..32f4deb7 100644 --- a/drivers/platform/tegra/nvadsp/app.c +++ b/drivers/platform/tegra/nvadsp/app.c @@ -1,7 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-only -/** - * Copyright (c) 2014-2023, NVIDIA CORPORATION. All rights reserved. - */ +// Copyright (c) 2014-2024, NVIDIA CORPORATION. All rights reserved. #include #include @@ -310,7 +308,7 @@ static nvadsp_app_handle_t app_load(const char *appfile, ser = devm_kzalloc(dev, sizeof(*ser), GFP_KERNEL); if (!ser) goto err; - strlcpy(ser->name, appname, NVADSP_NAME_SZ); + strscpy(ser->name, appname, NVADSP_NAME_SZ); /*load the module in to memory */ ser->mod = dynamic ? diff --git a/drivers/platform/tegra/nvadsp/mem_manager.c b/drivers/platform/tegra/nvadsp/mem_manager.c index 371cd8e2..777d8db8 100644 --- a/drivers/platform/tegra/nvadsp/mem_manager.c +++ b/drivers/platform/tegra/nvadsp/mem_manager.c @@ -1,7 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-only -/** - * Copyright (c) 2014-2023, NVIDIA CORPORATION. All rights reserved. - */ +// Copyright (c) 2014-2024, NVIDIA CORPORATION. All rights reserved. #define pr_fmt(fmt) "%s : %d, " fmt, __func__, __LINE__ @@ -56,14 +54,14 @@ void *mem_request(void *mem_handle, const char *name, size_t size) if (best_match_chunk->address < mc_iterator->address) { list_add_tail(&best_match_chunk->node, &mc_iterator->node); - strlcpy(best_match_chunk->name, name, + strscpy(best_match_chunk->name, name, NAME_SIZE); spin_unlock_irqrestore(&mm_info->lock, flags); return best_match_chunk; } } list_add(&best_match_chunk->node, mm_info->alloc_list); - strlcpy(best_match_chunk->name, name, NAME_SIZE); + strscpy(best_match_chunk->name, name, NAME_SIZE); spin_unlock_irqrestore(&mm_info->lock, flags); return best_match_chunk; } else { @@ -76,7 +74,7 @@ void *mem_request(void *mem_handle, const char *name, size_t size) } new_mc->address = best_match_chunk->address; new_mc->size = size; - strlcpy(new_mc->name, name, NAME_SIZE); + strscpy(new_mc->name, name, NAME_SIZE); best_match_chunk->address += size; best_match_chunk->size -= size; list_for_each_entry(mc_iterator, mm_info->alloc_list, node) { @@ -112,7 +110,7 @@ bool mem_release(void *mem_handle, void *handle) list_for_each_entry(mc_curr, mm_info->free_list, node) { if (mc_free->address < mc_curr->address) { - strlcpy(mc_free->name, "FREE", NAME_SIZE); + strscpy(mc_free->name, "FREE", NAME_SIZE); /* adjacent next free node */ if (mc_curr->address == @@ -235,7 +233,7 @@ void *create_mem_manager(const char *name, unsigned long start_address, return ERR_PTR(-ENOMEM); } - strlcpy(mm_info->name, name, NAME_SIZE); + strscpy(mm_info->name, name, NAME_SIZE); mm_info->alloc_list = kzalloc(sizeof(struct list_head), GFP_KERNEL); if (unlikely(!mm_info->alloc_list)) { @@ -267,7 +265,7 @@ void *create_mem_manager(const char *name, unsigned long start_address, mc->address = mm_info->start_address; mc->size = mm_info->size; - strlcpy(mc->name, "FREE", NAME_SIZE); + strscpy(mc->name, "FREE", NAME_SIZE); list_add(&mc->node, mm_info->free_list); spin_lock_init(&mm_info->lock); diff --git a/drivers/platform/tegra/nvadsp/os.c b/drivers/platform/tegra/nvadsp/os.c index 6c07eabb..77657ce8 100644 --- a/drivers/platform/tegra/nvadsp/os.c +++ b/drivers/platform/tegra/nvadsp/os.c @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-only -// SPDX-FileCopyrightText: Copyright (c) 2014-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2014-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. #include @@ -498,7 +498,7 @@ __maybe_unused create_global_symbol_table(const struct firmware *fw) ((type == STT_OBJECT) || (type == STT_FUNC))) { char *name = priv.adsp_glo_sym_tbl[i].name; - strlcpy(name, name_table + sym->st_name, SYM_NAME_SZ); + strscpy(name, name_table + sym->st_name, SYM_NAME_SZ); priv.adsp_glo_sym_tbl[i].addr = sym->st_value; priv.adsp_glo_sym_tbl[i].info = info; i++; @@ -2519,9 +2519,9 @@ void nvadsp_get_os_version(char *buf, int buf_size) shared_mem = drv_data->shared_adsp_os_data; if (shared_mem) { os_info = &shared_mem->os_info; - strlcpy(buf, os_info->version, buf_size); + strscpy(buf, os_info->version, buf_size); } else { - strlcpy(buf, "unavailable", buf_size); + strscpy(buf, "unavailable", buf_size); } } EXPORT_SYMBOL(nvadsp_get_os_version); diff --git a/include/trace/events/tegra_capture.h b/include/trace/events/tegra_capture.h index ab0e9b98..999942f8 100644 --- a/include/trace/events/tegra_capture.h +++ b/include/trace/events/tegra_capture.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * Copyright (c) 2022-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * Copyright (c) 2022-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. */ #undef TRACE_SYSTEM @@ -27,7 +27,7 @@ DECLARE_EVENT_CLASS(capture__msg, __field(u32, ch_id) ), TP_fast_assign( - strlcpy(__entry->ivc_name, ivc_name, sizeof(__entry->ivc_name)); + strscpy(__entry->ivc_name, ivc_name, sizeof(__entry->ivc_name)); __entry->msg_id = msg_id; __entry->ch_id = ch_id; ), @@ -47,7 +47,7 @@ TRACE_EVENT(capture_ivc_notify, __array(char, ivc_name, IVC_NAME_LEN) ), TP_fast_assign( - strlcpy(__entry->ivc_name, ivc_name, sizeof(__entry->ivc_name)); + strscpy(__entry->ivc_name, ivc_name, sizeof(__entry->ivc_name)); ), TP_printk("ivc:\"%s\"", __entry->ivc_name) ); @@ -72,7 +72,7 @@ TRACE_EVENT(capture_ivc_send_error, __field(int, err) ), TP_fast_assign( - strlcpy(__entry->ivc_name, ivc_name, sizeof(__entry->ivc_name)); + strscpy(__entry->ivc_name, ivc_name, sizeof(__entry->ivc_name)); __entry->msg_id = msg_id; __entry->ch_id = ch_id; __entry->err = err;