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 <jonathanh@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3059457
(cherry picked from commit ecf383265b)
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3063000
Reviewed-by: Brad Griffis <bgriffis@nvidia.com>
GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
Jon Hunter
2024-01-22 11:35:01 +00:00
committed by mobile promotions
parent 1b6db0ce3c
commit 1ccb6edda2
9 changed files with 41 additions and 38 deletions

View File

@@ -1,7 +1,5 @@
// SPDX-License-Identifier: GPL-2.0 // SPDX-License-Identifier: GPL-2.0-only
/* // SPDX-FileCopyrightText: Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
*/
#include <linux/clk-provider.h> #include <linux/clk-provider.h>
#include <linux/device.h> #include <linux/device.h>
@@ -366,7 +364,7 @@ static int tegra_bpmp_clk_get_info(struct tegra_bpmp *bpmp, unsigned int id,
if (err < 0) if (err < 0)
return err; 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; info->num_parents = response.num_parents;
for (i = 0; i < info->num_parents; i++) for (i = 0; i < info->num_parents; i++)

View File

@@ -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 * NVIDIA Tegra Video Input Device
*
* Copyright (c) 2015-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
*/ */
#include <linux/atomic.h> #include <linux/atomic.h>
@@ -1023,14 +1022,21 @@ static int
tegra_channel_querycap(struct file *file, void *fh, struct v4l2_capability *cap) tegra_channel_querycap(struct file *file, void *fh, struct v4l2_capability *cap)
{ {
struct tegra_channel *chan = video_drvdata(file); struct tegra_channel *chan = video_drvdata(file);
ssize_t len;
int ret = 0; int ret = 0;
cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
cap->device_caps |= V4L2_CAP_EXT_PIX_FORMAT; cap->device_caps |= V4L2_CAP_EXT_PIX_FORMAT;
cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS; cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
strlcpy(cap->driver, "tegra-video", sizeof(cap->driver)); len = strscpy(cap->driver, "tegra-video", sizeof(cap->driver));
strlcpy(cap->card, chan->video->name, sizeof(cap->card)); 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", ret = snprintf(cap->bus_info, sizeof(cap->bus_info), "platform:%s:%u",
dev_name(chan->vi->dev), chan->port[0]); dev_name(chan->vi->dev), chan->port[0]);
if (ret < 0) if (ret < 0)

View File

@@ -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 * Tegra Video Input device common APIs
*
* Copyright (c) 2015-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
*/ */
#include <linux/init.h> #include <linux/init.h>
@@ -116,11 +115,15 @@ static void tegra_vi_notify(struct v4l2_subdev *sd,
int tegra_vi_v4l2_init(struct tegra_mc_vi *vi) int tegra_vi_v4l2_init(struct tegra_mc_vi *vi)
{ {
ssize_t len;
int ret; int ret;
vi->media_dev.dev = vi->dev; 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)); sizeof(vi->media_dev.model));
if (len < 0)
return -ENAMETOOLONG;
vi->media_dev.hw_revision = 3; vi->media_dev.hw_revision = 3;
media_device_init(&vi->media_dev); media_device_init(&vi->media_dev);

View File

@@ -268,8 +268,8 @@ static void lan743x_ethtool_get_drvinfo(struct net_device *netdev,
{ {
struct lan743x_adapter *adapter = netdev_priv(netdev); struct lan743x_adapter *adapter = netdev_priv(netdev);
strlcpy(info->driver, DRIVER_NAME, sizeof(info->driver)); strscpy(info->driver, DRIVER_NAME, sizeof(info->driver));
strlcpy(info->bus_info, strscpy(info->bus_info,
pci_name(adapter->pdev), sizeof(info->bus_info)); pci_name(adapter->pdev), sizeof(info->bus_info));
} }

View File

@@ -5232,7 +5232,7 @@ rtl8168_get_drvinfo(struct net_device *dev,
info->eedump_len = tp->eeprom_len; info->eedump_len = tp->eeprom_len;
BUILD_BUG_ON(sizeof(info->fw_version) < sizeof(rtl_fw->version)); BUILD_BUG_ON(sizeof(info->fw_version) < sizeof(rtl_fw->version));
if (rtl_fw) if (rtl_fw)
strlcpy(info->fw_version, rtl_fw->version, strscpy(info->fw_version, rtl_fw->version,
sizeof(info->fw_version)); sizeof(info->fw_version));
} }

View File

@@ -1,7 +1,5 @@
// SPDX-License-Identifier: GPL-2.0-only // SPDX-License-Identifier: GPL-2.0-only
/** // Copyright (c) 2014-2024, NVIDIA CORPORATION. All rights reserved.
* Copyright (c) 2014-2023, NVIDIA CORPORATION. All rights reserved.
*/
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/tegra_nvadsp.h> #include <linux/tegra_nvadsp.h>
@@ -310,7 +308,7 @@ static nvadsp_app_handle_t app_load(const char *appfile,
ser = devm_kzalloc(dev, sizeof(*ser), GFP_KERNEL); ser = devm_kzalloc(dev, sizeof(*ser), GFP_KERNEL);
if (!ser) if (!ser)
goto err; goto err;
strlcpy(ser->name, appname, NVADSP_NAME_SZ); strscpy(ser->name, appname, NVADSP_NAME_SZ);
/*load the module in to memory */ /*load the module in to memory */
ser->mod = dynamic ? ser->mod = dynamic ?

View File

@@ -1,7 +1,5 @@
// SPDX-License-Identifier: GPL-2.0-only // SPDX-License-Identifier: GPL-2.0-only
/** // Copyright (c) 2014-2024, NVIDIA CORPORATION. All rights reserved.
* Copyright (c) 2014-2023, NVIDIA CORPORATION. All rights reserved.
*/
#define pr_fmt(fmt) "%s : %d, " fmt, __func__, __LINE__ #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) { if (best_match_chunk->address < mc_iterator->address) {
list_add_tail(&best_match_chunk->node, list_add_tail(&best_match_chunk->node,
&mc_iterator->node); &mc_iterator->node);
strlcpy(best_match_chunk->name, name, strscpy(best_match_chunk->name, name,
NAME_SIZE); NAME_SIZE);
spin_unlock_irqrestore(&mm_info->lock, flags); spin_unlock_irqrestore(&mm_info->lock, flags);
return best_match_chunk; return best_match_chunk;
} }
} }
list_add(&best_match_chunk->node, mm_info->alloc_list); 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); spin_unlock_irqrestore(&mm_info->lock, flags);
return best_match_chunk; return best_match_chunk;
} else { } 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->address = best_match_chunk->address;
new_mc->size = size; 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->address += size;
best_match_chunk->size -= size; best_match_chunk->size -= size;
list_for_each_entry(mc_iterator, mm_info->alloc_list, node) { 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) { list_for_each_entry(mc_curr, mm_info->free_list, node) {
if (mc_free->address < mc_curr->address) { 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 */ /* adjacent next free node */
if (mc_curr->address == if (mc_curr->address ==
@@ -235,7 +233,7 @@ void *create_mem_manager(const char *name, unsigned long start_address,
return ERR_PTR(-ENOMEM); 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); mm_info->alloc_list = kzalloc(sizeof(struct list_head), GFP_KERNEL);
if (unlikely(!mm_info->alloc_list)) { 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->address = mm_info->start_address;
mc->size = mm_info->size; 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); list_add(&mc->node, mm_info->free_list);
spin_lock_init(&mm_info->lock); spin_lock_init(&mm_info->lock);

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: GPL-2.0-only // 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 <nvidia/conftest.h> #include <nvidia/conftest.h>
@@ -498,7 +498,7 @@ __maybe_unused create_global_symbol_table(const struct firmware *fw)
((type == STT_OBJECT) || (type == STT_FUNC))) { ((type == STT_OBJECT) || (type == STT_FUNC))) {
char *name = priv.adsp_glo_sym_tbl[i].name; 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].addr = sym->st_value;
priv.adsp_glo_sym_tbl[i].info = info; priv.adsp_glo_sym_tbl[i].info = info;
i++; i++;
@@ -2519,9 +2519,9 @@ void nvadsp_get_os_version(char *buf, int buf_size)
shared_mem = drv_data->shared_adsp_os_data; shared_mem = drv_data->shared_adsp_os_data;
if (shared_mem) { if (shared_mem) {
os_info = &shared_mem->os_info; os_info = &shared_mem->os_info;
strlcpy(buf, os_info->version, buf_size); strscpy(buf, os_info->version, buf_size);
} else { } else {
strlcpy(buf, "unavailable", buf_size); strscpy(buf, "unavailable", buf_size);
} }
} }
EXPORT_SYMBOL(nvadsp_get_os_version); EXPORT_SYMBOL(nvadsp_get_os_version);

View File

@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0-only */ /* 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 #undef TRACE_SYSTEM
@@ -27,7 +27,7 @@ DECLARE_EVENT_CLASS(capture__msg,
__field(u32, ch_id) __field(u32, ch_id)
), ),
TP_fast_assign( 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->msg_id = msg_id;
__entry->ch_id = ch_id; __entry->ch_id = ch_id;
), ),
@@ -47,7 +47,7 @@ TRACE_EVENT(capture_ivc_notify,
__array(char, ivc_name, IVC_NAME_LEN) __array(char, ivc_name, IVC_NAME_LEN)
), ),
TP_fast_assign( 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) TP_printk("ivc:\"%s\"", __entry->ivc_name)
); );
@@ -72,7 +72,7 @@ TRACE_EVENT(capture_ivc_send_error,
__field(int, err) __field(int, err)
), ),
TP_fast_assign( 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->msg_id = msg_id;
__entry->ch_id = ch_id; __entry->ch_id = ch_id;
__entry->err = err; __entry->err = err;