wl3501_cs-fix-misspelling-and-provide-missing-docume.patch
net-create-netdev-dev_addr-assignment-helpers.patch
wl3501_cs-use-eth_hw_addr_set.patch
-wifi-move-from-strlcpy-with-unused-retval-to-strscpy.patch
wifi-wl3501_cs-fix-an-error-handling-path-in-wl3501_.patch
wifi-ray_cs-utilize-strnlen-in-parse_addr.patch
wifi-ray_cs-drop-useless-status-variable-in-parse_ad.patch
+++ /dev/null
-From 0581b1356066b97de4b37695f9b4f2d0afd60be1 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Tue, 30 Aug 2022 22:14:53 +0200
-Subject: wifi: move from strlcpy with unused retval to strscpy
-
-From: Wolfram Sang <wsa+renesas@sang-engineering.com>
-
-[ Upstream commit bf99f11df4de45fcba6f6c441b411a16bccaccf6 ]
-
-Follow the advice of the below link and prefer 'strscpy' in this
-subsystem. Conversion is 1:1 because the return value is not used.
-Generated by a coccinelle script.
-
-Link: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/
-Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
-Signed-off-by: Kalle Valo <kvalo@kernel.org>
-Link: https://lore.kernel.org/r/20220830201457.7984-2-wsa+renesas@sang-engineering.com
-Stable-dep-of: 391af06a02e7 ("wifi: wl3501_cs: Fix an error handling path in wl3501_probe()")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/wireless/ath/ath6kl/init.c | 2 +-
- drivers/net/wireless/ath/carl9170/fw.c | 2 +-
- drivers/net/wireless/ath/wil6210/main.c | 2 +-
- drivers/net/wireless/ath/wil6210/netdev.c | 2 +-
- drivers/net/wireless/ath/wil6210/wmi.c | 2 +-
- drivers/net/wireless/atmel/atmel.c | 2 +-
- drivers/net/wireless/broadcom/b43/leds.c | 2 +-
- drivers/net/wireless/broadcom/b43legacy/leds.c | 2 +-
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c | 8 ++++----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 8 ++++----
- .../net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | 2 +-
- .../net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c | 2 +-
- drivers/net/wireless/intel/ipw2x00/ipw2100.c | 6 +++---
- drivers/net/wireless/intel/ipw2x00/ipw2200.c | 6 +++---
- drivers/net/wireless/intel/iwlegacy/3945-mac.c | 2 +-
- drivers/net/wireless/intersil/hostap/hostap_ioctl.c | 2 +-
- drivers/net/wireless/marvell/libertas/ethtool.c | 4 ++--
- drivers/net/wireless/microchip/wilc1000/mon.c | 2 +-
- drivers/net/wireless/quantenna/qtnfmac/cfg80211.c | 2 +-
- drivers/net/wireless/quantenna/qtnfmac/commands.c | 2 +-
- drivers/net/wireless/realtek/rtl818x/rtl8187/leds.c | 2 +-
- drivers/net/wireless/wl3501_cs.c | 8 ++++----
- 22 files changed, 36 insertions(+), 36 deletions(-)
-
-diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c
-index 39bf196861751..b9e9808634610 100644
---- a/drivers/net/wireless/ath/ath6kl/init.c
-+++ b/drivers/net/wireless/ath/ath6kl/init.c
-@@ -1014,7 +1014,7 @@ static int ath6kl_fetch_fw_apin(struct ath6kl *ar, const char *name)
-
- switch (ie_id) {
- case ATH6KL_FW_IE_FW_VERSION:
-- strlcpy(ar->wiphy->fw_version, data,
-+ strscpy(ar->wiphy->fw_version, data,
- min(sizeof(ar->wiphy->fw_version), ie_len+1));
-
- ath6kl_dbg(ATH6KL_DBG_BOOT,
-diff --git a/drivers/net/wireless/ath/carl9170/fw.c b/drivers/net/wireless/ath/carl9170/fw.c
-index 1ab09e1c9ec57..4c1aecd1163ce 100644
---- a/drivers/net/wireless/ath/carl9170/fw.c
-+++ b/drivers/net/wireless/ath/carl9170/fw.c
-@@ -105,7 +105,7 @@ static void carl9170_fw_info(struct ar9170 *ar)
- CARL9170FW_GET_MONTH(fw_date),
- CARL9170FW_GET_DAY(fw_date));
-
-- strlcpy(ar->hw->wiphy->fw_version, motd_desc->release,
-+ strscpy(ar->hw->wiphy->fw_version, motd_desc->release,
- sizeof(ar->hw->wiphy->fw_version));
- }
- }
-diff --git a/drivers/net/wireless/ath/wil6210/main.c b/drivers/net/wireless/ath/wil6210/main.c
-index 3ba5b2550a8c1..bb532c6866beb 100644
---- a/drivers/net/wireless/ath/wil6210/main.c
-+++ b/drivers/net/wireless/ath/wil6210/main.c
-@@ -1305,7 +1305,7 @@ void wil_get_board_file(struct wil6210_priv *wil, char *buf, size_t len)
- board_file = WIL_BOARD_FILE_NAME;
- }
-
-- strlcpy(buf, board_file, len);
-+ strscpy(buf, board_file, len);
- }
-
- static int wil_get_bl_info(struct wil6210_priv *wil)
-diff --git a/drivers/net/wireless/ath/wil6210/netdev.c b/drivers/net/wireless/ath/wil6210/netdev.c
-index 07b4a252a23c9..41fd4e548a513 100644
---- a/drivers/net/wireless/ath/wil6210/netdev.c
-+++ b/drivers/net/wireless/ath/wil6210/netdev.c
-@@ -445,7 +445,7 @@ int wil_if_add(struct wil6210_priv *wil)
-
- wil_dbg_misc(wil, "entered");
-
-- strlcpy(wiphy->fw_version, wil->fw_version, sizeof(wiphy->fw_version));
-+ strscpy(wiphy->fw_version, wil->fw_version, sizeof(wiphy->fw_version));
-
- rc = wiphy_register(wiphy);
- if (rc < 0) {
-diff --git a/drivers/net/wireless/ath/wil6210/wmi.c b/drivers/net/wireless/ath/wil6210/wmi.c
-index 421aebbb49e54..a2c0f14bf74ef 100644
---- a/drivers/net/wireless/ath/wil6210/wmi.c
-+++ b/drivers/net/wireless/ath/wil6210/wmi.c
-@@ -780,7 +780,7 @@ static void wmi_evt_ready(struct wil6210_vif *vif, int id, void *d, int len)
- return; /* FW load will fail after timeout */
- }
- /* ignore MAC address, we already have it from the boot loader */
-- strlcpy(wiphy->fw_version, wil->fw_version, sizeof(wiphy->fw_version));
-+ strscpy(wiphy->fw_version, wil->fw_version, sizeof(wiphy->fw_version));
-
- if (len > offsetof(struct wmi_ready_event, rfc_read_calib_result)) {
- wil_dbg_wmi(wil, "rfc calibration result %d\n",
-diff --git a/drivers/net/wireless/atmel/atmel.c b/drivers/net/wireless/atmel/atmel.c
-index 707fe66727f8d..2a445fefedd7a 100644
---- a/drivers/net/wireless/atmel/atmel.c
-+++ b/drivers/net/wireless/atmel/atmel.c
-@@ -1519,7 +1519,7 @@ struct net_device *init_atmel_card(unsigned short irq, unsigned long port,
- priv->firmware = NULL;
- priv->firmware_type = fw_type;
- if (firmware) /* module parameter */
-- strlcpy(priv->firmware_id, firmware, sizeof(priv->firmware_id));
-+ strscpy(priv->firmware_id, firmware, sizeof(priv->firmware_id));
- priv->bus_type = card_present ? BUS_TYPE_PCCARD : BUS_TYPE_PCI;
- priv->station_state = STATION_STATE_DOWN;
- priv->do_rx_crc = 0;
-diff --git a/drivers/net/wireless/broadcom/b43/leds.c b/drivers/net/wireless/broadcom/b43/leds.c
-index 982a772a9d879..bfe1be345844d 100644
---- a/drivers/net/wireless/broadcom/b43/leds.c
-+++ b/drivers/net/wireless/broadcom/b43/leds.c
-@@ -118,7 +118,7 @@ static int b43_register_led(struct b43_wldev *dev, struct b43_led *led,
- led->wl = dev->wl;
- led->index = led_index;
- led->activelow = activelow;
-- strlcpy(led->name, name, sizeof(led->name));
-+ strscpy(led->name, name, sizeof(led->name));
- atomic_set(&led->state, 0);
-
- led->led_dev.name = led->name;
-diff --git a/drivers/net/wireless/broadcom/b43legacy/leds.c b/drivers/net/wireless/broadcom/b43legacy/leds.c
-index 38b5be3a84e2c..79e6fd205bfb7 100644
---- a/drivers/net/wireless/broadcom/b43legacy/leds.c
-+++ b/drivers/net/wireless/broadcom/b43legacy/leds.c
-@@ -88,7 +88,7 @@ static int b43legacy_register_led(struct b43legacy_wldev *dev,
- led->dev = dev;
- led->index = led_index;
- led->activelow = activelow;
-- strlcpy(led->name, name, sizeof(led->name));
-+ strscpy(led->name, name, sizeof(led->name));
-
- led->led_dev.name = led->name;
- led->led_dev.default_trigger = default_trigger;
-diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-index f29de630908d7..a964f9f0c4435 100644
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-@@ -219,7 +219,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
- &revinfo, sizeof(revinfo));
- if (err < 0) {
- bphy_err(drvr, "retrieving revision info failed, %d\n", err);
-- strlcpy(ri->chipname, "UNKNOWN", sizeof(ri->chipname));
-+ strscpy(ri->chipname, "UNKNOWN", sizeof(ri->chipname));
- } else {
- ri->vendorid = le32_to_cpu(revinfo.vendorid);
- ri->deviceid = le32_to_cpu(revinfo.deviceid);
-@@ -273,7 +273,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
-
- /* locate firmware version number for ethtool */
- ptr = strrchr(buf, ' ') + 1;
-- strlcpy(ifp->drvr->fwver, ptr, sizeof(ifp->drvr->fwver));
-+ strscpy(ifp->drvr->fwver, ptr, sizeof(ifp->drvr->fwver));
-
- /* Query for 'clmver' to get CLM version info from firmware */
- memset(buf, 0, sizeof(buf));
-@@ -385,11 +385,11 @@ static void brcmf_mp_attach(void)
- * if not set then if available use the platform data version. To make
- * sure it gets initialized at all, always copy the module param version
- */
-- strlcpy(brcmf_mp_global.firmware_path, brcmf_firmware_path,
-+ strscpy(brcmf_mp_global.firmware_path, brcmf_firmware_path,
- BRCMF_FW_ALTPATH_LEN);
- if ((brcmfmac_pdata) && (brcmfmac_pdata->fw_alternative_path) &&
- (brcmf_mp_global.firmware_path[0] == '\0')) {
-- strlcpy(brcmf_mp_global.firmware_path,
-+ strscpy(brcmf_mp_global.firmware_path,
- brcmfmac_pdata->fw_alternative_path,
- BRCMF_FW_ALTPATH_LEN);
- }
-diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-index 3d544eedc1a39..3d3ee350fdfb3 100644
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-@@ -569,10 +569,10 @@ static void brcmf_ethtool_get_drvinfo(struct net_device *ndev,
-
- if (drvr->revinfo.result == 0)
- brcmu_dotrev_str(drvr->revinfo.driverrev, drev);
-- strlcpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
-- strlcpy(info->version, drev, sizeof(info->version));
-- strlcpy(info->fw_version, drvr->fwver, sizeof(info->fw_version));
-- strlcpy(info->bus_info, dev_name(drvr->bus_if->dev),
-+ strscpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
-+ strscpy(info->version, drev, sizeof(info->version));
-+ strscpy(info->fw_version, drvr->fwver, sizeof(info->fw_version));
-+ strscpy(info->bus_info, dev_name(drvr->bus_if->dev),
- sizeof(info->bus_info));
- }
-
-diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-index 060889bf6d053..b9cd9d7482a1e 100644
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-@@ -740,7 +740,7 @@ brcmf_fw_alloc_request(u32 chip, u32 chiprev,
- fwnames[j].path[0] = '\0';
- /* check if firmware path is provided by module parameter */
- if (brcmf_mp_global.firmware_path[0] != '\0') {
-- strlcpy(fwnames[j].path, mp_path,
-+ strscpy(fwnames[j].path, mp_path,
- BRCMF_FW_NAME_LEN);
-
- if (end != '/') {
-diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
-index 437e83ea8902d..4ff5432a36cb2 100644
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
-@@ -688,7 +688,7 @@ static void brcmf_fws_macdesc_set_name(struct brcmf_fws_info *fws,
- struct brcmf_fws_mac_descriptor *desc)
- {
- if (desc == &fws->desc.other)
-- strlcpy(desc->name, "MAC-OTHER", sizeof(desc->name));
-+ strscpy(desc->name, "MAC-OTHER", sizeof(desc->name));
- else if (desc->mac_handle)
- scnprintf(desc->name, sizeof(desc->name), "MAC-%d:%d",
- desc->mac_handle, desc->interface_id);
-diff --git a/drivers/net/wireless/intel/ipw2x00/ipw2100.c b/drivers/net/wireless/intel/ipw2x00/ipw2100.c
-index 23fbddd0c1f8e..24a0cea9d64e8 100644
---- a/drivers/net/wireless/intel/ipw2x00/ipw2100.c
-+++ b/drivers/net/wireless/intel/ipw2x00/ipw2100.c
-@@ -5907,8 +5907,8 @@ static void ipw_ethtool_get_drvinfo(struct net_device *dev,
- struct ipw2100_priv *priv = libipw_priv(dev);
- char fw_ver[64], ucode_ver[64];
-
-- strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
-- strlcpy(info->version, DRV_VERSION, sizeof(info->version));
-+ strscpy(info->driver, DRV_NAME, sizeof(info->driver));
-+ strscpy(info->version, DRV_VERSION, sizeof(info->version));
-
- ipw2100_get_fwversion(priv, fw_ver, sizeof(fw_ver));
- ipw2100_get_ucodeversion(priv, ucode_ver, sizeof(ucode_ver));
-@@ -5916,7 +5916,7 @@ static void ipw_ethtool_get_drvinfo(struct net_device *dev,
- snprintf(info->fw_version, sizeof(info->fw_version), "%s:%d:%s",
- fw_ver, priv->eeprom_version, ucode_ver);
-
-- strlcpy(info->bus_info, pci_name(priv->pci_dev),
-+ strscpy(info->bus_info, pci_name(priv->pci_dev),
- sizeof(info->bus_info));
- }
-
-diff --git a/drivers/net/wireless/intel/ipw2x00/ipw2200.c b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
-index bb728fb24b8a4..706cd36a43055 100644
---- a/drivers/net/wireless/intel/ipw2x00/ipw2200.c
-+++ b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
-@@ -10427,8 +10427,8 @@ static void ipw_ethtool_get_drvinfo(struct net_device *dev,
- char date[32];
- u32 len;
-
-- strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
-- strlcpy(info->version, DRV_VERSION, sizeof(info->version));
-+ strscpy(info->driver, DRV_NAME, sizeof(info->driver));
-+ strscpy(info->version, DRV_VERSION, sizeof(info->version));
-
- len = sizeof(vers);
- ipw_get_ordinal(p, IPW_ORD_STAT_FW_VERSION, vers, &len);
-@@ -10437,7 +10437,7 @@ static void ipw_ethtool_get_drvinfo(struct net_device *dev,
-
- snprintf(info->fw_version, sizeof(info->fw_version), "%s (%s)",
- vers, date);
-- strlcpy(info->bus_info, pci_name(p->pci_dev),
-+ strscpy(info->bus_info, pci_name(p->pci_dev),
- sizeof(info->bus_info));
- }
-
-diff --git a/drivers/net/wireless/intel/iwlegacy/3945-mac.c b/drivers/net/wireless/intel/iwlegacy/3945-mac.c
-index ef0ac42a55a2a..e786bd9f3163a 100644
---- a/drivers/net/wireless/intel/iwlegacy/3945-mac.c
-+++ b/drivers/net/wireless/intel/iwlegacy/3945-mac.c
-@@ -3256,7 +3256,7 @@ il3945_store_measurement(struct device *d, struct device_attribute *attr,
-
- if (count) {
- char *p = buffer;
-- strlcpy(buffer, buf, sizeof(buffer));
-+ strscpy(buffer, buf, sizeof(buffer));
- channel = simple_strtoul(p, NULL, 0);
- if (channel)
- params.channel = channel;
-diff --git a/drivers/net/wireless/intersil/hostap/hostap_ioctl.c b/drivers/net/wireless/intersil/hostap/hostap_ioctl.c
-index 514c7b01dbf6f..293a081b0dc75 100644
---- a/drivers/net/wireless/intersil/hostap/hostap_ioctl.c
-+++ b/drivers/net/wireless/intersil/hostap/hostap_ioctl.c
-@@ -3859,7 +3859,7 @@ static void prism2_get_drvinfo(struct net_device *dev,
- iface = netdev_priv(dev);
- local = iface->local;
-
-- strlcpy(info->driver, "hostap", sizeof(info->driver));
-+ strscpy(info->driver, "hostap", sizeof(info->driver));
- snprintf(info->fw_version, sizeof(info->fw_version),
- "%d.%d.%d", (local->sta_fw_ver >> 16) & 0xff,
- (local->sta_fw_ver >> 8) & 0xff,
-diff --git a/drivers/net/wireless/marvell/libertas/ethtool.c b/drivers/net/wireless/marvell/libertas/ethtool.c
-index 1bb8746a0b23b..d580e6a95d7a0 100644
---- a/drivers/net/wireless/marvell/libertas/ethtool.c
-+++ b/drivers/net/wireless/marvell/libertas/ethtool.c
-@@ -20,8 +20,8 @@ static void lbs_ethtool_get_drvinfo(struct net_device *dev,
- priv->fwrelease >> 16 & 0xff,
- priv->fwrelease >> 8 & 0xff,
- priv->fwrelease & 0xff);
-- strlcpy(info->driver, "libertas", sizeof(info->driver));
-- strlcpy(info->version, lbs_driver_version, sizeof(info->version));
-+ strscpy(info->driver, "libertas", sizeof(info->driver));
-+ strscpy(info->version, lbs_driver_version, sizeof(info->version));
- }
-
- /*
-diff --git a/drivers/net/wireless/microchip/wilc1000/mon.c b/drivers/net/wireless/microchip/wilc1000/mon.c
-index b5a1b65c087ca..03b7229a0ff5a 100644
---- a/drivers/net/wireless/microchip/wilc1000/mon.c
-+++ b/drivers/net/wireless/microchip/wilc1000/mon.c
-@@ -229,7 +229,7 @@ struct net_device *wilc_wfi_init_mon_interface(struct wilc *wl,
- return NULL;
-
- wl->monitor_dev->type = ARPHRD_IEEE80211_RADIOTAP;
-- strlcpy(wl->monitor_dev->name, name, IFNAMSIZ);
-+ strscpy(wl->monitor_dev->name, name, IFNAMSIZ);
- wl->monitor_dev->netdev_ops = &wilc_wfi_netdev_ops;
- wl->monitor_dev->needs_free_netdev = true;
-
-diff --git a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
-index 54cdf3ad09d75..7b555bd365271 100644
---- a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
-+++ b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
-@@ -1236,7 +1236,7 @@ int qtnf_wiphy_register(struct qtnf_hw_info *hw_info, struct qtnf_wmac *mac)
- mac->macinfo.extended_capabilities_len;
- }
-
-- strlcpy(wiphy->fw_version, hw_info->fw_version,
-+ strscpy(wiphy->fw_version, hw_info->fw_version,
- sizeof(wiphy->fw_version));
- wiphy->hw_version = hw_info->hw_version;
-
-diff --git a/drivers/net/wireless/quantenna/qtnfmac/commands.c b/drivers/net/wireless/quantenna/qtnfmac/commands.c
-index f3ccbd2b10847..c75241f505835 100644
---- a/drivers/net/wireless/quantenna/qtnfmac/commands.c
-+++ b/drivers/net/wireless/quantenna/qtnfmac/commands.c
-@@ -979,7 +979,7 @@ qtnf_cmd_resp_proc_hw_info(struct qtnf_bus *bus,
- hwinfo->total_rx_chain, hwinfo->total_tx_chain,
- hwinfo->fw_ver);
-
-- strlcpy(hwinfo->fw_version, bld_label, sizeof(hwinfo->fw_version));
-+ strscpy(hwinfo->fw_version, bld_label, sizeof(hwinfo->fw_version));
- hwinfo->hw_version = hw_ver;
-
- return 0;
-diff --git a/drivers/net/wireless/realtek/rtl818x/rtl8187/leds.c b/drivers/net/wireless/realtek/rtl818x/rtl8187/leds.c
-index 49421d10e22bc..f7d95c9624a01 100644
---- a/drivers/net/wireless/realtek/rtl818x/rtl8187/leds.c
-+++ b/drivers/net/wireless/realtek/rtl818x/rtl8187/leds.c
-@@ -143,7 +143,7 @@ static int rtl8187_register_led(struct ieee80211_hw *dev,
- led->dev = dev;
- led->ledpin = ledpin;
- led->is_radio = is_radio;
-- strlcpy(led->name, name, sizeof(led->name));
-+ strscpy(led->name, name, sizeof(led->name));
-
- led->led_dev.name = led->name;
- led->led_dev.default_trigger = default_trigger;
-diff --git a/drivers/net/wireless/wl3501_cs.c b/drivers/net/wireless/wl3501_cs.c
-index 7351a2c127adc..7fb2f95134760 100644
---- a/drivers/net/wireless/wl3501_cs.c
-+++ b/drivers/net/wireless/wl3501_cs.c
-@@ -1441,7 +1441,7 @@ static void wl3501_detach(struct pcmcia_device *link)
- static int wl3501_get_name(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
- {
-- strlcpy(wrqu->name, "IEEE 802.11-DS", sizeof(wrqu->name));
-+ strscpy(wrqu->name, "IEEE 802.11-DS", sizeof(wrqu->name));
- return 0;
- }
-
-@@ -1652,7 +1652,7 @@ static int wl3501_set_nick(struct net_device *dev, struct iw_request_info *info,
-
- if (wrqu->data.length > sizeof(this->nick))
- return -E2BIG;
-- strlcpy(this->nick, extra, wrqu->data.length);
-+ strscpy(this->nick, extra, wrqu->data.length);
- return 0;
- }
-
-@@ -1661,7 +1661,7 @@ static int wl3501_get_nick(struct net_device *dev, struct iw_request_info *info,
- {
- struct wl3501_card *this = netdev_priv(dev);
-
-- strlcpy(extra, this->nick, 32);
-+ strscpy(extra, this->nick, 32);
- wrqu->data.length = strlen(extra);
- return 0;
- }
-@@ -1965,7 +1965,7 @@ static int wl3501_config(struct pcmcia_device *link)
- this->firmware_date[0] = '\0';
- this->rssi = 255;
- this->chan = iw_default_channel(this->reg_domain);
-- strlcpy(this->nick, "Planet WL3501", sizeof(this->nick));
-+ strscpy(this->nick, "Planet WL3501", sizeof(this->nick));
- spin_lock_init(&this->lock);
- init_waitqueue_head(&this->wait);
- netif_start_queue(dev);
---
-2.39.2
-
+++ /dev/null
-From 43d0645eab6b643c4b3c2f587320ba8b8f907abe Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Tue, 30 May 2023 12:39:13 +0300
-Subject: clk: clocking-wizard: check return value of devm_kasprintf()
-
-From: Claudiu Beznea <claudiu.beznea@microchip.com>
-
-[ Upstream commit b1356ed1a4461de06dfdc02bf549c3e8750162e5 ]
-
-devm_kasprintf() returns a pointer to dynamically allocated memory.
-Pointer could be NULL in case allocation fails. Check pointer validity.
-Identified with coccinelle (kmerr.cocci script).
-
-Fixes: 2046338dcbc6 ("ARM: mxs: Use soc bus infrastructure")
-Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
-Link: https://lore.kernel.org/r/20230530093913.1656095-9-claudiu.beznea@microchip.com
-Signed-off-by: Stephen Boyd <sboyd@kernel.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/staging/clocking-wizard/clk-xlnx-clock-wizard.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/drivers/staging/clocking-wizard/clk-xlnx-clock-wizard.c b/drivers/staging/clocking-wizard/clk-xlnx-clock-wizard.c
-index cda1e5be305a4..09a95c02ec5f6 100644
---- a/drivers/staging/clocking-wizard/clk-xlnx-clock-wizard.c
-+++ b/drivers/staging/clocking-wizard/clk-xlnx-clock-wizard.c
-@@ -645,6 +645,11 @@ static int clk_wzrd_probe(struct platform_device *pdev)
- }
-
- clkout_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_out0", dev_name(&pdev->dev));
-+ if (!clkout_name) {
-+ ret = -ENOMEM;
-+ goto err_disable_clk;
-+ }
-+
- if (nr_outputs == 1) {
- clk_wzrd->clkout[0] = clk_wzrd_register_divider
- (&pdev->dev, clkout_name,
---
-2.39.2
-
+++ /dev/null
-From dffa103f0b6b7b25e958cf2f0c71cb9096d7dfed Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 11 Apr 2022 15:34:41 +0530
-Subject: clk: clocking-wizard: Rename nr-outputs to xlnx,nr-outputs
-
-From: Shubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
-
-[ Upstream commit 787ddddcbc43ab158cc15c36986c2c64b6fc84aa ]
-
-Rename nr-outputs to xlnx,output.
-
-Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
-Link: https://lore.kernel.org/r/20220411100443.15132-4-shubhrajyoti.datta@xilinx.com
-Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Stephen Boyd <sboyd@kernel.org>
-Stable-dep-of: b1356ed1a446 ("clk: clocking-wizard: check return value of devm_kasprintf()")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/staging/clocking-wizard/clk-xlnx-clock-wizard.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/staging/clocking-wizard/clk-xlnx-clock-wizard.c b/drivers/staging/clocking-wizard/clk-xlnx-clock-wizard.c
-index 8c1934df70dea..e5c5a7c25bbc9 100644
---- a/drivers/staging/clocking-wizard/clk-xlnx-clock-wizard.c
-+++ b/drivers/staging/clocking-wizard/clk-xlnx-clock-wizard.c
-@@ -479,7 +479,7 @@ static int clk_wzrd_probe(struct platform_device *pdev)
- goto err_disable_clk;
- }
-
-- ret = of_property_read_u32(np, "nr-outputs", &nr_outputs);
-+ ret = of_property_read_u32(np, "xlnx,nr-outputs", &nr_outputs);
- if (ret || nr_outputs > WZRD_NUM_OUTPUTS) {
- ret = -EINVAL;
- goto err_disable_clk;
---
-2.39.2
-
+++ /dev/null
-From 23721925927e8c4ea6a163f54f4fd7d2d1006f43 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 27 Mar 2023 11:56:37 +0530
-Subject: clocking-wizard: Support higher frequency accuracy
-
-From: Shubhrajyoti Datta <shubhrajyoti.datta@amd.com>
-
-[ Upstream commit 595c88cda65d30c6b36277c232193295a45406dc ]
-
-Change the multipliers and divisors to support a higher
-frequency accuracy if there is only one output.
-Currently only O is changed now we are changing M, D and O.
-For multiple output case the earlier behavior is retained.
-
-Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@amd.com>
-Link: https://lore.kernel.org/r/20230327062637.22237-1-shubhrajyoti.datta@amd.com
-Signed-off-by: Stephen Boyd <sboyd@kernel.org>
-Stable-dep-of: b1356ed1a446 ("clk: clocking-wizard: check return value of devm_kasprintf()")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- .../clocking-wizard/clk-xlnx-clock-wizard.c | 228 ++++++++++++++++--
- 1 file changed, 204 insertions(+), 24 deletions(-)
-
-diff --git a/drivers/staging/clocking-wizard/clk-xlnx-clock-wizard.c b/drivers/staging/clocking-wizard/clk-xlnx-clock-wizard.c
-index e5c5a7c25bbc9..cda1e5be305a4 100644
---- a/drivers/staging/clocking-wizard/clk-xlnx-clock-wizard.c
-+++ b/drivers/staging/clocking-wizard/clk-xlnx-clock-wizard.c
-@@ -7,12 +7,14 @@
- * Sören Brinkmann <soren.brinkmann@xilinx.com>
- */
-
-+#include <linux/bitfield.h>
- #include <linux/platform_device.h>
- #include <linux/clk.h>
- #include <linux/clk-provider.h>
- #include <linux/slab.h>
- #include <linux/io.h>
- #include <linux/of.h>
-+#include <linux/math64.h>
- #include <linux/module.h>
- #include <linux/err.h>
- #include <linux/iopoll.h>
-@@ -36,6 +38,7 @@
- #define WZRD_CLKOUT_DIVIDE_MASK (0xff << WZRD_DIVCLK_DIVIDE_SHIFT)
- #define WZRD_CLKOUT_FRAC_SHIFT 8
- #define WZRD_CLKOUT_FRAC_MASK 0x3ff
-+#define WZRD_CLKOUT0_FRAC_MASK GENMASK(17, 8)
-
- #define WZRD_DR_MAX_INT_DIV_VALUE 255
- #define WZRD_DR_STATUS_REG_OFFSET 0x04
-@@ -46,6 +49,22 @@
-
- #define WZRD_USEC_POLL 10
- #define WZRD_TIMEOUT_POLL 1000
-+
-+/* Divider limits, from UG572 Table 3-4 for Ultrascale+ */
-+#define DIV_O 0x01
-+#define DIV_ALL 0x03
-+
-+#define WZRD_M_MIN 2
-+#define WZRD_M_MAX 128
-+#define WZRD_D_MIN 1
-+#define WZRD_D_MAX 106
-+#define WZRD_VCO_MIN 800000000
-+#define WZRD_VCO_MAX 1600000000
-+#define WZRD_O_MIN 1
-+#define WZRD_O_MAX 128
-+#define WZRD_MIN_ERR 20000
-+#define WZRD_FRAC_POINTS 1000
-+
- /* Get the mask from width */
- #define div_mask(width) ((1 << (width)) - 1)
-
-@@ -94,6 +113,9 @@ struct clk_wzrd {
- * @width: width of the divider bit field
- * @flags: clk_wzrd divider flags
- * @table: array of value/divider pairs, last entry should have div = 0
-+ * @m: value of the multiplier
-+ * @d: value of the common divider
-+ * @o: value of the leaf divider
- * @lock: register lock
- */
- struct clk_wzrd_divider {
-@@ -104,6 +126,9 @@ struct clk_wzrd_divider {
- u8 width;
- u8 flags;
- const struct clk_div_table *table;
-+ u32 m;
-+ u32 d;
-+ u32 o;
- spinlock_t *lock; /* divider lock */
- };
-
-@@ -193,12 +218,155 @@ static long clk_wzrd_round_rate(struct clk_hw *hw, unsigned long rate,
- return *prate / div;
- }
-
-+static int clk_wzrd_get_divisors(struct clk_hw *hw, unsigned long rate,
-+ unsigned long parent_rate)
-+{
-+ struct clk_wzrd_divider *divider = to_clk_wzrd_divider(hw);
-+ unsigned long vco_freq, freq, diff;
-+ u32 m, d, o;
-+
-+ for (m = WZRD_M_MIN; m <= WZRD_M_MAX; m++) {
-+ for (d = WZRD_D_MIN; d <= WZRD_D_MAX; d++) {
-+ vco_freq = DIV_ROUND_CLOSEST((parent_rate * m), d);
-+ if (vco_freq >= WZRD_VCO_MIN && vco_freq <= WZRD_VCO_MAX) {
-+ for (o = WZRD_O_MIN; o <= WZRD_O_MAX; o++) {
-+ freq = DIV_ROUND_CLOSEST_ULL(vco_freq, o);
-+ diff = abs(freq - rate);
-+
-+ if (diff < WZRD_MIN_ERR) {
-+ divider->m = m;
-+ divider->d = d;
-+ divider->o = o;
-+ return 0;
-+ }
-+ }
-+ }
-+ }
-+ }
-+ return -EBUSY;
-+}
-+
-+static int clk_wzrd_dynamic_all_nolock(struct clk_hw *hw, unsigned long rate,
-+ unsigned long parent_rate)
-+{
-+ struct clk_wzrd_divider *divider = to_clk_wzrd_divider(hw);
-+ unsigned long vco_freq, rate_div, clockout0_div;
-+ u32 reg, pre, value, f;
-+ int err;
-+
-+ err = clk_wzrd_get_divisors(hw, rate, parent_rate);
-+ if (err)
-+ return err;
-+
-+ vco_freq = DIV_ROUND_CLOSEST(parent_rate * divider->m, divider->d);
-+ rate_div = DIV_ROUND_CLOSEST_ULL((vco_freq * WZRD_FRAC_POINTS), rate);
-+
-+ clockout0_div = div_u64(rate_div, WZRD_FRAC_POINTS);
-+
-+ pre = DIV_ROUND_CLOSEST_ULL(vco_freq * WZRD_FRAC_POINTS, rate);
-+ f = (pre - (clockout0_div * WZRD_FRAC_POINTS));
-+ f &= WZRD_CLKOUT_FRAC_MASK;
-+
-+ reg = FIELD_PREP(WZRD_CLKOUT_DIVIDE_MASK, clockout0_div) |
-+ FIELD_PREP(WZRD_CLKOUT0_FRAC_MASK, f);
-+
-+ writel(reg, divider->base + WZRD_CLK_CFG_REG(2));
-+ /* Set divisor and clear phase offset */
-+ reg = FIELD_PREP(WZRD_CLKFBOUT_MULT_MASK, divider->m) |
-+ FIELD_PREP(WZRD_DIVCLK_DIVIDE_MASK, divider->d);
-+ writel(reg, divider->base + WZRD_CLK_CFG_REG(0));
-+ writel(divider->o, divider->base + WZRD_CLK_CFG_REG(2));
-+ writel(0, divider->base + WZRD_CLK_CFG_REG(3));
-+ /* Check status register */
-+ err = readl_poll_timeout(divider->base + WZRD_DR_STATUS_REG_OFFSET, value,
-+ value & WZRD_DR_LOCK_BIT_MASK,
-+ WZRD_USEC_POLL, WZRD_TIMEOUT_POLL);
-+ if (err)
-+ return -ETIMEDOUT;
-+
-+ /* Initiate reconfiguration */
-+ writel(WZRD_DR_BEGIN_DYNA_RECONF,
-+ divider->base + WZRD_DR_INIT_REG_OFFSET);
-+
-+ /* Check status register */
-+ return readl_poll_timeout(divider->base + WZRD_DR_STATUS_REG_OFFSET, value,
-+ value & WZRD_DR_LOCK_BIT_MASK,
-+ WZRD_USEC_POLL, WZRD_TIMEOUT_POLL);
-+}
-+
-+static int clk_wzrd_dynamic_all(struct clk_hw *hw, unsigned long rate,
-+ unsigned long parent_rate)
-+{
-+ struct clk_wzrd_divider *divider = to_clk_wzrd_divider(hw);
-+ unsigned long flags = 0;
-+ int ret;
-+
-+ spin_lock_irqsave(divider->lock, flags);
-+
-+ ret = clk_wzrd_dynamic_all_nolock(hw, rate, parent_rate);
-+
-+ spin_unlock_irqrestore(divider->lock, flags);
-+
-+ return ret;
-+}
-+
-+static unsigned long clk_wzrd_recalc_rate_all(struct clk_hw *hw,
-+ unsigned long parent_rate)
-+{
-+ struct clk_wzrd_divider *divider = to_clk_wzrd_divider(hw);
-+ u32 m, d, o, div, reg, f;
-+
-+ reg = readl(divider->base + WZRD_CLK_CFG_REG(0));
-+ d = FIELD_GET(WZRD_DIVCLK_DIVIDE_MASK, reg);
-+ m = FIELD_GET(WZRD_CLKFBOUT_MULT_MASK, reg);
-+ reg = readl(divider->base + WZRD_CLK_CFG_REG(2));
-+ o = FIELD_GET(WZRD_DIVCLK_DIVIDE_MASK, reg);
-+ f = FIELD_GET(WZRD_CLKOUT0_FRAC_MASK, reg);
-+
-+ div = DIV_ROUND_CLOSEST(d * (WZRD_FRAC_POINTS * o + f), WZRD_FRAC_POINTS);
-+ return divider_recalc_rate(hw, parent_rate * m, div, divider->table,
-+ divider->flags, divider->width);
-+}
-+
-+static long clk_wzrd_round_rate_all(struct clk_hw *hw, unsigned long rate,
-+ unsigned long *prate)
-+{
-+ struct clk_wzrd_divider *divider = to_clk_wzrd_divider(hw);
-+ unsigned long int_freq;
-+ u32 m, d, o, div, f;
-+ int err;
-+
-+ err = clk_wzrd_get_divisors(hw, rate, *prate);
-+ if (err)
-+ return err;
-+
-+ m = divider->m;
-+ d = divider->d;
-+ o = divider->o;
-+
-+ div = d * o;
-+ int_freq = divider_recalc_rate(hw, *prate * m, div, divider->table,
-+ divider->flags, divider->width);
-+
-+ if (rate > int_freq) {
-+ f = DIV_ROUND_CLOSEST_ULL(rate * WZRD_FRAC_POINTS, int_freq);
-+ rate = DIV_ROUND_CLOSEST(int_freq * f, WZRD_FRAC_POINTS);
-+ }
-+ return rate;
-+}
-+
- static const struct clk_ops clk_wzrd_clk_divider_ops = {
- .round_rate = clk_wzrd_round_rate,
- .set_rate = clk_wzrd_dynamic_reconfig,
- .recalc_rate = clk_wzrd_recalc_rate,
- };
-
-+static const struct clk_ops clk_wzrd_clk_div_all_ops = {
-+ .round_rate = clk_wzrd_round_rate_all,
-+ .set_rate = clk_wzrd_dynamic_all,
-+ .recalc_rate = clk_wzrd_recalc_rate_all,
-+};
-+
- static unsigned long clk_wzrd_recalc_ratef(struct clk_hw *hw,
- unsigned long parent_rate)
- {
-@@ -273,7 +441,7 @@ static struct clk *clk_wzrd_register_divf(struct device *dev,
- void __iomem *base, u16 offset,
- u8 shift, u8 width,
- u8 clk_divider_flags,
-- const struct clk_div_table *table,
-+ u32 div_type,
- spinlock_t *lock)
- {
- struct clk_wzrd_divider *div;
-@@ -300,7 +468,6 @@ static struct clk *clk_wzrd_register_divf(struct device *dev,
- div->flags = clk_divider_flags;
- div->lock = lock;
- div->hw.init = &init;
-- div->table = table;
-
- hw = &div->hw;
- ret = devm_clk_hw_register(dev, hw);
-@@ -317,7 +484,7 @@ static struct clk *clk_wzrd_register_divider(struct device *dev,
- void __iomem *base, u16 offset,
- u8 shift, u8 width,
- u8 clk_divider_flags,
-- const struct clk_div_table *table,
-+ u32 div_type,
- spinlock_t *lock)
- {
- struct clk_wzrd_divider *div;
-@@ -330,7 +497,12 @@ static struct clk *clk_wzrd_register_divider(struct device *dev,
- return ERR_PTR(-ENOMEM);
-
- init.name = name;
-- init.ops = &clk_wzrd_clk_divider_ops;
-+ if (clk_divider_flags & CLK_DIVIDER_READ_ONLY)
-+ init.ops = &clk_divider_ro_ops;
-+ else if (div_type == DIV_O)
-+ init.ops = &clk_wzrd_clk_divider_ops;
-+ else
-+ init.ops = &clk_wzrd_clk_div_all_ops;
- init.flags = flags;
- init.parent_names = &parent_name;
- init.num_parents = 1;
-@@ -342,7 +514,6 @@ static struct clk *clk_wzrd_register_divider(struct device *dev,
- div->flags = clk_divider_flags;
- div->lock = lock;
- div->hw.init = &init;
-- div->table = table;
-
- hw = &div->hw;
- ret = devm_clk_hw_register(dev, hw);
-@@ -418,6 +589,7 @@ static int clk_wzrd_probe(struct platform_device *pdev)
- const char *clk_name;
- void __iomem *ctrl_reg;
- struct clk_wzrd *clk_wzrd;
-+ const char *clkout_name;
- struct device_node *np = pdev->dev.of_node;
- int nr_outputs;
- unsigned long flags = 0;
-@@ -466,6 +638,26 @@ static int clk_wzrd_probe(struct platform_device *pdev)
- goto err_disable_clk;
- }
-
-+ ret = of_property_read_u32(np, "xlnx,nr-outputs", &nr_outputs);
-+ if (ret || nr_outputs > WZRD_NUM_OUTPUTS) {
-+ ret = -EINVAL;
-+ goto err_disable_clk;
-+ }
-+
-+ clkout_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_out0", dev_name(&pdev->dev));
-+ if (nr_outputs == 1) {
-+ clk_wzrd->clkout[0] = clk_wzrd_register_divider
-+ (&pdev->dev, clkout_name,
-+ __clk_get_name(clk_wzrd->clk_in1), 0,
-+ clk_wzrd->base, WZRD_CLK_CFG_REG(3),
-+ WZRD_CLKOUT_DIVIDE_SHIFT,
-+ WZRD_CLKOUT_DIVIDE_WIDTH,
-+ CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO,
-+ DIV_ALL, &clkwzrd_lock);
-+
-+ goto out;
-+ }
-+
- reg = readl(clk_wzrd->base + WZRD_CLK_CFG_REG(0));
- reg_f = reg & WZRD_CLKFBOUT_FRAC_MASK;
- reg_f = reg_f >> WZRD_CLKFBOUT_FRAC_SHIFT;
-@@ -473,20 +665,11 @@ static int clk_wzrd_probe(struct platform_device *pdev)
- reg = reg & WZRD_CLKFBOUT_MULT_MASK;
- reg = reg >> WZRD_CLKFBOUT_MULT_SHIFT;
- mult = (reg * 1000) + reg_f;
-- clk_name = kasprintf(GFP_KERNEL, "%s_mul", dev_name(&pdev->dev));
-+ clk_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_mul", dev_name(&pdev->dev));
- if (!clk_name) {
- ret = -ENOMEM;
- goto err_disable_clk;
- }
--
-- ret = of_property_read_u32(np, "xlnx,nr-outputs", &nr_outputs);
-- if (ret || nr_outputs > WZRD_NUM_OUTPUTS) {
-- ret = -EINVAL;
-- goto err_disable_clk;
-- }
-- if (nr_outputs == 1)
-- flags = CLK_SET_RATE_PARENT;
--
- clk_wzrd->clks_internal[wzrd_clk_mul] = clk_register_fixed_factor
- (&pdev->dev, clk_name,
- __clk_get_name(clk_wzrd->clk_in1),
-@@ -497,7 +680,7 @@ static int clk_wzrd_probe(struct platform_device *pdev)
- goto err_disable_clk;
- }
-
-- clk_name = kasprintf(GFP_KERNEL, "%s_mul_div", dev_name(&pdev->dev));
-+ clk_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_mul_div", dev_name(&pdev->dev));
- if (!clk_name) {
- ret = -ENOMEM;
- goto err_rm_int_clk;
-@@ -518,9 +701,8 @@ static int clk_wzrd_probe(struct platform_device *pdev)
-
- /* register div per output */
- for (i = nr_outputs - 1; i >= 0 ; i--) {
-- const char *clkout_name;
--
-- clkout_name = kasprintf(GFP_KERNEL, "%s_out%d", dev_name(&pdev->dev), i);
-+ clkout_name = devm_kasprintf(&pdev->dev, GFP_KERNEL,
-+ "%s_out%d", dev_name(&pdev->dev), i);
- if (!clkout_name) {
- ret = -ENOMEM;
- goto err_rm_int_clk;
-@@ -534,7 +716,7 @@ static int clk_wzrd_probe(struct platform_device *pdev)
- WZRD_CLKOUT_DIVIDE_SHIFT,
- WZRD_CLKOUT_DIVIDE_WIDTH,
- CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO,
-- NULL, &clkwzrd_lock);
-+ DIV_O, &clkwzrd_lock);
- else
- clk_wzrd->clkout[i] = clk_wzrd_register_divider
- (&pdev->dev, clkout_name,
-@@ -543,7 +725,7 @@ static int clk_wzrd_probe(struct platform_device *pdev)
- WZRD_CLKOUT_DIVIDE_SHIFT,
- WZRD_CLKOUT_DIVIDE_WIDTH,
- CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO,
-- NULL, &clkwzrd_lock);
-+ DIV_O, &clkwzrd_lock);
- if (IS_ERR(clk_wzrd->clkout[i])) {
- int j;
-
-@@ -556,8 +738,7 @@ static int clk_wzrd_probe(struct platform_device *pdev)
- }
- }
-
-- kfree(clk_name);
--
-+out:
- clk_wzrd->clk_data.clks = clk_wzrd->clkout;
- clk_wzrd->clk_data.clk_num = ARRAY_SIZE(clk_wzrd->clkout);
- of_clk_add_provider(np, of_clk_src_onecell_get, &clk_wzrd->clk_data);
-@@ -582,7 +763,6 @@ static int clk_wzrd_probe(struct platform_device *pdev)
- err_rm_int_clks:
- clk_unregister(clk_wzrd->clks_internal[1]);
- err_rm_int_clk:
-- kfree(clk_name);
- clk_unregister(clk_wzrd->clks_internal[0]);
- err_disable_clk:
- clk_disable_unprepare(clk_wzrd->axi_clk);
---
-2.39.2
-
+++ /dev/null
-From 4008f7dee8b5c9cff7304fc72a24f6954949cebb Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 26 Apr 2023 00:47:11 +0800
-Subject: f2fs: do not allow to defragment files have FI_COMPRESS_RELEASED
-
-From: Yangtao Li <frank.li@vivo.com>
-
-[ Upstream commit 7cd2e5f75b86a1befa99834f3ed1d735eeff69e6 ]
-
-If a file has FI_COMPRESS_RELEASED, all writes for it should not be
-allowed.
-
-Fixes: 5fdb322ff2c2 ("f2fs: add F2FS_IOC_DECOMPRESS_FILE and F2FS_IOC_COMPRESS_FILE")
-Signed-off-by: Qi Han <hanqi@vivo.com>
-Signed-off-by: Yangtao Li <frank.li@vivo.com>
-Reviewed-by: Chao Yu <chao@kernel.org>
-Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- fs/f2fs/file.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
-index f76d8a79716ef..a954983916c73 100644
---- a/fs/f2fs/file.c
-+++ b/fs/f2fs/file.c
-@@ -2568,6 +2568,11 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
-
- inode_lock(inode);
-
-+ if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
-+ err = -EINVAL;
-+ goto unlock_out;
-+ }
-+
- /* if in-place-update policy is enabled, don't waste time here */
- set_inode_flag(inode, FI_OPU_WRITE);
- if (f2fs_should_update_inplace(inode, NULL)) {
-@@ -2692,6 +2697,7 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
- clear_inode_flag(inode, FI_SKIP_WRITES);
- out:
- clear_inode_flag(inode, FI_OPU_WRITE);
-+unlock_out:
- inode_unlock(inode);
- if (!err)
- range->len = (u64)total << PAGE_SHIFT;
---
-2.39.2
-
+++ /dev/null
-From 658d7b4e41fd38911414a031d647f24f218c6df8 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 4 Feb 2022 15:19:46 +0800
-Subject: f2fs: introduce F2FS_IPU_HONOR_OPU_WRITE ipu policy
-
-From: Chao Yu <chao@kernel.org>
-
-[ Upstream commit 1018a5463a063715365784704c4e8cdf2eec4b04 ]
-
-Once F2FS_IPU_FORCE policy is enabled in some cases:
-a) f2fs forces to use F2FS_IPU_FORCE in a small-sized volume
-b) user sets F2FS_IPU_FORCE policy via sysfs
-
-Then we may fail to defragment file due to IPU policy check, it doesn't
-make sense, let's introduce a new IPU policy to allow OPU during file
-defragmentation.
-
-In small-sized volume, let's enable F2FS_IPU_HONOR_OPU_WRITE policy
-by default.
-
-Signed-off-by: Chao Yu <chao@kernel.org>
-Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-Stable-dep-of: 7cd2e5f75b86 ("f2fs: do not allow to defragment files have FI_COMPRESS_RELEASED")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- Documentation/ABI/testing/sysfs-fs-f2fs | 3 ++-
- fs/f2fs/data.c | 18 +++++++++++++-----
- fs/f2fs/f2fs.h | 3 ++-
- fs/f2fs/file.c | 18 +++++++++++-------
- fs/f2fs/segment.h | 5 ++++-
- fs/f2fs/super.c | 3 ++-
- 6 files changed, 34 insertions(+), 16 deletions(-)
-
-diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs
-index 48d41b6696270..89dec1f3ea6d9 100644
---- a/Documentation/ABI/testing/sysfs-fs-f2fs
-+++ b/Documentation/ABI/testing/sysfs-fs-f2fs
-@@ -55,8 +55,9 @@ Description: Controls the in-place-update policy.
- 0x04 F2FS_IPU_UTIL
- 0x08 F2FS_IPU_SSR_UTIL
- 0x10 F2FS_IPU_FSYNC
-- 0x20 F2FS_IPU_ASYNC,
-+ 0x20 F2FS_IPU_ASYNC
- 0x40 F2FS_IPU_NOCACHE
-+ 0x80 F2FS_IPU_HONOR_OPU_WRITE
- ==== =================
-
- Refer segment.h for details.
-diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
-index 3956852ad1de0..141e59246da5d 100644
---- a/fs/f2fs/data.c
-+++ b/fs/f2fs/data.c
-@@ -2514,6 +2514,9 @@ static inline bool check_inplace_update_policy(struct inode *inode,
- struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
- unsigned int policy = SM_I(sbi)->ipu_policy;
-
-+ if (policy & (0x1 << F2FS_IPU_HONOR_OPU_WRITE) &&
-+ is_inode_flag_set(inode, FI_OPU_WRITE))
-+ return false;
- if (policy & (0x1 << F2FS_IPU_FORCE))
- return true;
- if (policy & (0x1 << F2FS_IPU_SSR) && f2fs_need_SSR(sbi))
-@@ -2584,6 +2587,9 @@ bool f2fs_should_update_outplace(struct inode *inode, struct f2fs_io_info *fio)
- if (is_inode_flag_set(inode, FI_ALIGNED_WRITE))
- return true;
-
-+ if (is_inode_flag_set(inode, FI_OPU_WRITE))
-+ return true;
-+
- if (fio) {
- if (page_private_gcing(fio->page))
- return true;
-@@ -3209,8 +3215,8 @@ static int __f2fs_write_data_pages(struct address_space *mapping,
- f2fs_available_free_memory(sbi, DIRTY_DENTS))
- goto skip_write;
-
-- /* skip writing during file defragment */
-- if (is_inode_flag_set(inode, FI_DO_DEFRAG))
-+ /* skip writing in file defragment preparing stage */
-+ if (is_inode_flag_set(inode, FI_SKIP_WRITES))
- goto skip_write;
-
- trace_f2fs_writepages(mapping->host, wbc, DATA);
-@@ -3944,6 +3950,7 @@ static int f2fs_migrate_blocks(struct inode *inode, block_t start_blk,
- filemap_invalidate_lock(inode->i_mapping);
-
- set_inode_flag(inode, FI_ALIGNED_WRITE);
-+ set_inode_flag(inode, FI_OPU_WRITE);
-
- for (; secidx < end_sec; secidx++) {
- down_write(&sbi->pin_sem);
-@@ -3952,7 +3959,7 @@ static int f2fs_migrate_blocks(struct inode *inode, block_t start_blk,
- f2fs_allocate_new_section(sbi, CURSEG_COLD_DATA_PINNED, false);
- f2fs_unlock_op(sbi);
-
-- set_inode_flag(inode, FI_DO_DEFRAG);
-+ set_inode_flag(inode, FI_SKIP_WRITES);
-
- for (blkofs = 0; blkofs < blk_per_sec; blkofs++) {
- struct page *page;
-@@ -3969,7 +3976,7 @@ static int f2fs_migrate_blocks(struct inode *inode, block_t start_blk,
- f2fs_put_page(page, 1);
- }
-
-- clear_inode_flag(inode, FI_DO_DEFRAG);
-+ clear_inode_flag(inode, FI_SKIP_WRITES);
-
- ret = filemap_fdatawrite(inode->i_mapping);
-
-@@ -3980,7 +3987,8 @@ static int f2fs_migrate_blocks(struct inode *inode, block_t start_blk,
- }
-
- done:
-- clear_inode_flag(inode, FI_DO_DEFRAG);
-+ clear_inode_flag(inode, FI_SKIP_WRITES);
-+ clear_inode_flag(inode, FI_OPU_WRITE);
- clear_inode_flag(inode, FI_ALIGNED_WRITE);
-
- filemap_invalidate_unlock(inode->i_mapping);
-diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
-index 5c0920e11e4ba..cc1115b5c08de 100644
---- a/fs/f2fs/f2fs.h
-+++ b/fs/f2fs/f2fs.h
-@@ -712,7 +712,8 @@ enum {
- FI_DROP_CACHE, /* drop dirty page cache */
- FI_DATA_EXIST, /* indicate data exists */
- FI_INLINE_DOTS, /* indicate inline dot dentries */
-- FI_DO_DEFRAG, /* indicate defragment is running */
-+ FI_SKIP_WRITES, /* should skip data page writeback */
-+ FI_OPU_WRITE, /* used for opu per file */
- FI_DIRTY_FILE, /* indicate regular/symlink has dirty pages */
- FI_NO_PREALLOC, /* indicate skipped preallocated blocks */
- FI_HOT_DATA, /* indicate file is hot */
-diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
-index 2c24162f72f0c..f76d8a79716ef 100644
---- a/fs/f2fs/file.c
-+++ b/fs/f2fs/file.c
-@@ -2561,10 +2561,6 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
- bool fragmented = false;
- int err;
-
-- /* if in-place-update policy is enabled, don't waste time here */
-- if (f2fs_should_update_inplace(inode, NULL))
-- return -EINVAL;
--
- pg_start = range->start >> PAGE_SHIFT;
- pg_end = (range->start + range->len) >> PAGE_SHIFT;
-
-@@ -2572,6 +2568,13 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
-
- inode_lock(inode);
-
-+ /* if in-place-update policy is enabled, don't waste time here */
-+ set_inode_flag(inode, FI_OPU_WRITE);
-+ if (f2fs_should_update_inplace(inode, NULL)) {
-+ err = -EINVAL;
-+ goto out;
-+ }
-+
- /* writeback all dirty pages in the range */
- err = filemap_write_and_wait_range(inode->i_mapping, range->start,
- range->start + range->len - 1);
-@@ -2653,7 +2656,7 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
- goto check;
- }
-
-- set_inode_flag(inode, FI_DO_DEFRAG);
-+ set_inode_flag(inode, FI_SKIP_WRITES);
-
- idx = map.m_lblk;
- while (idx < map.m_lblk + map.m_len && cnt < blk_per_seg) {
-@@ -2679,15 +2682,16 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
- if (map.m_lblk < pg_end && cnt < blk_per_seg)
- goto do_map;
-
-- clear_inode_flag(inode, FI_DO_DEFRAG);
-+ clear_inode_flag(inode, FI_SKIP_WRITES);
-
- err = filemap_fdatawrite(inode->i_mapping);
- if (err)
- goto out;
- }
- clear_out:
-- clear_inode_flag(inode, FI_DO_DEFRAG);
-+ clear_inode_flag(inode, FI_SKIP_WRITES);
- out:
-+ clear_inode_flag(inode, FI_OPU_WRITE);
- inode_unlock(inode);
- if (!err)
- range->len = (u64)total << PAGE_SHIFT;
-diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
-index 04f448ddf49ea..2c1165e8f1283 100644
---- a/fs/f2fs/segment.h
-+++ b/fs/f2fs/segment.h
-@@ -665,7 +665,9 @@ static inline int utilization(struct f2fs_sb_info *sbi)
- * pages over min_fsync_blocks. (=default option)
- * F2FS_IPU_ASYNC - do IPU given by asynchronous write requests.
- * F2FS_IPU_NOCACHE - disable IPU bio cache.
-- * F2FS_IPUT_DISABLE - disable IPU. (=default option in LFS mode)
-+ * F2FS_IPU_HONOR_OPU_WRITE - use OPU write prior to IPU write if inode has
-+ * FI_OPU_WRITE flag.
-+ * F2FS_IPU_DISABLE - disable IPU. (=default option in LFS mode)
- */
- #define DEF_MIN_IPU_UTIL 70
- #define DEF_MIN_FSYNC_BLOCKS 8
-@@ -681,6 +683,7 @@ enum {
- F2FS_IPU_FSYNC,
- F2FS_IPU_ASYNC,
- F2FS_IPU_NOCACHE,
-+ F2FS_IPU_HONOR_OPU_WRITE,
- };
-
- static inline unsigned int curseg_segno(struct f2fs_sb_info *sbi,
-diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
-index 5c0b2b300aa1b..f8830b00bd26e 100644
---- a/fs/f2fs/super.c
-+++ b/fs/f2fs/super.c
-@@ -3935,7 +3935,8 @@ static void f2fs_tuning_parameters(struct f2fs_sb_info *sbi)
- F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_REUSE;
- if (f2fs_block_unit_discard(sbi))
- sm_i->dcc_info->discard_granularity = 1;
-- sm_i->ipu_policy = 1 << F2FS_IPU_FORCE;
-+ sm_i->ipu_policy = 1 << F2FS_IPU_FORCE |
-+ 1 << F2FS_IPU_HONOR_OPU_WRITE;
- }
-
- sbi->readdir_ra = 1;
---
-2.39.2
-
wifi-orinoco-fix-an-error-handling-path-in-orinoco_c.patch
wifi-atmel-fix-an-error-handling-path-in-atmel_probe.patch
wl3501_cs-use-eth_hw_addr_set.patch
-wifi-move-from-strlcpy-with-unused-retval-to-strscpy.patch
wifi-wl3501_cs-fix-an-error-handling-path-in-wl3501_.patch
wifi-ray_cs-utilize-strnlen-in-parse_addr.patch
wifi-ray_cs-drop-useless-status-variable-in-parse_ad.patch
clk-si5341-free-unused-memory-on-probe-failure.patch
clk-keystone-sci-clk-check-return-value-of-kasprintf.patch
clk-ti-clkctrl-check-return-value-of-kasprintf.patch
-clk-clocking-wizard-rename-nr-outputs-to-xlnx-nr-out.patch
-clocking-wizard-support-higher-frequency-accuracy.patch
-clk-clocking-wizard-check-return-value-of-devm_kaspr.patch
drivers-meson-secure-pwrc-always-enable-dma-domain.patch
ovl-update-of-dentry-revalidate-flags-after-copy-up.patch
asoc-imx-audmix-check-return-value-of-devm_kasprintf.patch
sunrpc-fix-uaf-in-svc_tcp_listen_data_ready.patch
w1-w1_therm-fix-locking-behavior-in-convert_t.patch
w1-fix-loop-in-w1_fini.patch
-f2fs-introduce-f2fs_ipu_honor_opu_write-ipu-policy.patch
-f2fs-do-not-allow-to-defragment-files-have-fi_compre.patch
sh-j2-use-ioremap-to-translate-device-tree-address-i.patch
usb-dwc2-platform-improve-error-reporting-for-proble.patch
usb-dwc2-fix-some-error-handling-paths.patch
+++ /dev/null
-From b6a205272571445ac1ce647ffdd2feb1f1470724 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Tue, 30 Aug 2022 22:14:53 +0200
-Subject: wifi: move from strlcpy with unused retval to strscpy
-
-From: Wolfram Sang <wsa+renesas@sang-engineering.com>
-
-[ Upstream commit bf99f11df4de45fcba6f6c441b411a16bccaccf6 ]
-
-Follow the advice of the below link and prefer 'strscpy' in this
-subsystem. Conversion is 1:1 because the return value is not used.
-Generated by a coccinelle script.
-
-Link: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/
-Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
-Signed-off-by: Kalle Valo <kvalo@kernel.org>
-Link: https://lore.kernel.org/r/20220830201457.7984-2-wsa+renesas@sang-engineering.com
-Stable-dep-of: 391af06a02e7 ("wifi: wl3501_cs: Fix an error handling path in wl3501_probe()")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/wireless/ath/ath6kl/init.c | 2 +-
- drivers/net/wireless/ath/carl9170/fw.c | 2 +-
- drivers/net/wireless/ath/wil6210/main.c | 2 +-
- drivers/net/wireless/ath/wil6210/netdev.c | 2 +-
- drivers/net/wireless/ath/wil6210/wmi.c | 2 +-
- drivers/net/wireless/atmel/atmel.c | 2 +-
- drivers/net/wireless/broadcom/b43/leds.c | 2 +-
- drivers/net/wireless/broadcom/b43legacy/leds.c | 2 +-
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c | 8 ++++----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 8 ++++----
- .../net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | 2 +-
- .../net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c | 2 +-
- drivers/net/wireless/intel/ipw2x00/ipw2100.c | 6 +++---
- drivers/net/wireless/intel/ipw2x00/ipw2200.c | 6 +++---
- drivers/net/wireless/intel/iwlegacy/3945-mac.c | 2 +-
- drivers/net/wireless/intersil/hostap/hostap_ioctl.c | 2 +-
- drivers/net/wireless/marvell/libertas/ethtool.c | 4 ++--
- drivers/net/wireless/microchip/wilc1000/mon.c | 2 +-
- drivers/net/wireless/quantenna/qtnfmac/cfg80211.c | 2 +-
- drivers/net/wireless/quantenna/qtnfmac/commands.c | 2 +-
- drivers/net/wireless/realtek/rtl818x/rtl8187/leds.c | 2 +-
- drivers/net/wireless/wl3501_cs.c | 8 ++++----
- 22 files changed, 36 insertions(+), 36 deletions(-)
-
-diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c
-index 9b5c7d8f2b95e..201e455540706 100644
---- a/drivers/net/wireless/ath/ath6kl/init.c
-+++ b/drivers/net/wireless/ath/ath6kl/init.c
-@@ -1014,7 +1014,7 @@ static int ath6kl_fetch_fw_apin(struct ath6kl *ar, const char *name)
-
- switch (ie_id) {
- case ATH6KL_FW_IE_FW_VERSION:
-- strlcpy(ar->wiphy->fw_version, data,
-+ strscpy(ar->wiphy->fw_version, data,
- min(sizeof(ar->wiphy->fw_version), ie_len+1));
-
- ath6kl_dbg(ATH6KL_DBG_BOOT,
-diff --git a/drivers/net/wireless/ath/carl9170/fw.c b/drivers/net/wireless/ath/carl9170/fw.c
-index 1ab09e1c9ec57..4c1aecd1163ce 100644
---- a/drivers/net/wireless/ath/carl9170/fw.c
-+++ b/drivers/net/wireless/ath/carl9170/fw.c
-@@ -105,7 +105,7 @@ static void carl9170_fw_info(struct ar9170 *ar)
- CARL9170FW_GET_MONTH(fw_date),
- CARL9170FW_GET_DAY(fw_date));
-
-- strlcpy(ar->hw->wiphy->fw_version, motd_desc->release,
-+ strscpy(ar->hw->wiphy->fw_version, motd_desc->release,
- sizeof(ar->hw->wiphy->fw_version));
- }
- }
-diff --git a/drivers/net/wireless/ath/wil6210/main.c b/drivers/net/wireless/ath/wil6210/main.c
-index 3ba5b2550a8c1..bb532c6866beb 100644
---- a/drivers/net/wireless/ath/wil6210/main.c
-+++ b/drivers/net/wireless/ath/wil6210/main.c
-@@ -1305,7 +1305,7 @@ void wil_get_board_file(struct wil6210_priv *wil, char *buf, size_t len)
- board_file = WIL_BOARD_FILE_NAME;
- }
-
-- strlcpy(buf, board_file, len);
-+ strscpy(buf, board_file, len);
- }
-
- static int wil_get_bl_info(struct wil6210_priv *wil)
-diff --git a/drivers/net/wireless/ath/wil6210/netdev.c b/drivers/net/wireless/ath/wil6210/netdev.c
-index 0913f0bf60e79..960e97cedcdf2 100644
---- a/drivers/net/wireless/ath/wil6210/netdev.c
-+++ b/drivers/net/wireless/ath/wil6210/netdev.c
-@@ -445,7 +445,7 @@ int wil_if_add(struct wil6210_priv *wil)
-
- wil_dbg_misc(wil, "entered");
-
-- strlcpy(wiphy->fw_version, wil->fw_version, sizeof(wiphy->fw_version));
-+ strscpy(wiphy->fw_version, wil->fw_version, sizeof(wiphy->fw_version));
-
- rc = wiphy_register(wiphy);
- if (rc < 0) {
-diff --git a/drivers/net/wireless/ath/wil6210/wmi.c b/drivers/net/wireless/ath/wil6210/wmi.c
-index 2dc8406736f48..e3a94983faf1c 100644
---- a/drivers/net/wireless/ath/wil6210/wmi.c
-+++ b/drivers/net/wireless/ath/wil6210/wmi.c
-@@ -780,7 +780,7 @@ static void wmi_evt_ready(struct wil6210_vif *vif, int id, void *d, int len)
- return; /* FW load will fail after timeout */
- }
- /* ignore MAC address, we already have it from the boot loader */
-- strlcpy(wiphy->fw_version, wil->fw_version, sizeof(wiphy->fw_version));
-+ strscpy(wiphy->fw_version, wil->fw_version, sizeof(wiphy->fw_version));
-
- if (len > offsetof(struct wmi_ready_event, rfc_read_calib_result)) {
- wil_dbg_wmi(wil, "rfc calibration result %d\n",
-diff --git a/drivers/net/wireless/atmel/atmel.c b/drivers/net/wireless/atmel/atmel.c
-index febce4e8b3dd3..2a40fda28a89b 100644
---- a/drivers/net/wireless/atmel/atmel.c
-+++ b/drivers/net/wireless/atmel/atmel.c
-@@ -1518,7 +1518,7 @@ struct net_device *init_atmel_card(unsigned short irq, unsigned long port,
- priv->firmware = NULL;
- priv->firmware_type = fw_type;
- if (firmware) /* module parameter */
-- strlcpy(priv->firmware_id, firmware, sizeof(priv->firmware_id));
-+ strscpy(priv->firmware_id, firmware, sizeof(priv->firmware_id));
- priv->bus_type = card_present ? BUS_TYPE_PCCARD : BUS_TYPE_PCI;
- priv->station_state = STATION_STATE_DOWN;
- priv->do_rx_crc = 0;
-diff --git a/drivers/net/wireless/broadcom/b43/leds.c b/drivers/net/wireless/broadcom/b43/leds.c
-index 982a772a9d879..bfe1be345844d 100644
---- a/drivers/net/wireless/broadcom/b43/leds.c
-+++ b/drivers/net/wireless/broadcom/b43/leds.c
-@@ -118,7 +118,7 @@ static int b43_register_led(struct b43_wldev *dev, struct b43_led *led,
- led->wl = dev->wl;
- led->index = led_index;
- led->activelow = activelow;
-- strlcpy(led->name, name, sizeof(led->name));
-+ strscpy(led->name, name, sizeof(led->name));
- atomic_set(&led->state, 0);
-
- led->led_dev.name = led->name;
-diff --git a/drivers/net/wireless/broadcom/b43legacy/leds.c b/drivers/net/wireless/broadcom/b43legacy/leds.c
-index 38b5be3a84e2c..79e6fd205bfb7 100644
---- a/drivers/net/wireless/broadcom/b43legacy/leds.c
-+++ b/drivers/net/wireless/broadcom/b43legacy/leds.c
-@@ -88,7 +88,7 @@ static int b43legacy_register_led(struct b43legacy_wldev *dev,
- led->dev = dev;
- led->index = led_index;
- led->activelow = activelow;
-- strlcpy(led->name, name, sizeof(led->name));
-+ strscpy(led->name, name, sizeof(led->name));
-
- led->led_dev.name = led->name;
- led->led_dev.default_trigger = default_trigger;
-diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-index f29de630908d7..a964f9f0c4435 100644
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-@@ -219,7 +219,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
- &revinfo, sizeof(revinfo));
- if (err < 0) {
- bphy_err(drvr, "retrieving revision info failed, %d\n", err);
-- strlcpy(ri->chipname, "UNKNOWN", sizeof(ri->chipname));
-+ strscpy(ri->chipname, "UNKNOWN", sizeof(ri->chipname));
- } else {
- ri->vendorid = le32_to_cpu(revinfo.vendorid);
- ri->deviceid = le32_to_cpu(revinfo.deviceid);
-@@ -273,7 +273,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
-
- /* locate firmware version number for ethtool */
- ptr = strrchr(buf, ' ') + 1;
-- strlcpy(ifp->drvr->fwver, ptr, sizeof(ifp->drvr->fwver));
-+ strscpy(ifp->drvr->fwver, ptr, sizeof(ifp->drvr->fwver));
-
- /* Query for 'clmver' to get CLM version info from firmware */
- memset(buf, 0, sizeof(buf));
-@@ -385,11 +385,11 @@ static void brcmf_mp_attach(void)
- * if not set then if available use the platform data version. To make
- * sure it gets initialized at all, always copy the module param version
- */
-- strlcpy(brcmf_mp_global.firmware_path, brcmf_firmware_path,
-+ strscpy(brcmf_mp_global.firmware_path, brcmf_firmware_path,
- BRCMF_FW_ALTPATH_LEN);
- if ((brcmfmac_pdata) && (brcmfmac_pdata->fw_alternative_path) &&
- (brcmf_mp_global.firmware_path[0] == '\0')) {
-- strlcpy(brcmf_mp_global.firmware_path,
-+ strscpy(brcmf_mp_global.firmware_path,
- brcmfmac_pdata->fw_alternative_path,
- BRCMF_FW_ALTPATH_LEN);
- }
-diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-index f03fc6f1f8333..bdf1e494414bf 100644
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-@@ -574,10 +574,10 @@ static void brcmf_ethtool_get_drvinfo(struct net_device *ndev,
-
- if (drvr->revinfo.result == 0)
- brcmu_dotrev_str(drvr->revinfo.driverrev, drev);
-- strlcpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
-- strlcpy(info->version, drev, sizeof(info->version));
-- strlcpy(info->fw_version, drvr->fwver, sizeof(info->fw_version));
-- strlcpy(info->bus_info, dev_name(drvr->bus_if->dev),
-+ strscpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
-+ strscpy(info->version, drev, sizeof(info->version));
-+ strscpy(info->fw_version, drvr->fwver, sizeof(info->fw_version));
-+ strscpy(info->bus_info, dev_name(drvr->bus_if->dev),
- sizeof(info->bus_info));
- }
-
-diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-index c54d8722e755c..7b2911f49cce3 100644
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-@@ -783,7 +783,7 @@ brcmf_fw_alloc_request(u32 chip, u32 chiprev,
- fwnames[j].path[0] = '\0';
- /* check if firmware path is provided by module parameter */
- if (brcmf_mp_global.firmware_path[0] != '\0') {
-- strlcpy(fwnames[j].path, mp_path,
-+ strscpy(fwnames[j].path, mp_path,
- BRCMF_FW_NAME_LEN);
-
- if (end != '/') {
-diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
-index 19b0f318f93ed..50b4da0e9e15d 100644
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
-@@ -688,7 +688,7 @@ static void brcmf_fws_macdesc_set_name(struct brcmf_fws_info *fws,
- struct brcmf_fws_mac_descriptor *desc)
- {
- if (desc == &fws->desc.other)
-- strlcpy(desc->name, "MAC-OTHER", sizeof(desc->name));
-+ strscpy(desc->name, "MAC-OTHER", sizeof(desc->name));
- else if (desc->mac_handle)
- scnprintf(desc->name, sizeof(desc->name), "MAC-%d:%d",
- desc->mac_handle, desc->interface_id);
-diff --git a/drivers/net/wireless/intel/ipw2x00/ipw2100.c b/drivers/net/wireless/intel/ipw2x00/ipw2100.c
-index 47eb89b773cf7..4d5c1e142af11 100644
---- a/drivers/net/wireless/intel/ipw2x00/ipw2100.c
-+++ b/drivers/net/wireless/intel/ipw2x00/ipw2100.c
-@@ -5907,8 +5907,8 @@ static void ipw_ethtool_get_drvinfo(struct net_device *dev,
- struct ipw2100_priv *priv = libipw_priv(dev);
- char fw_ver[64], ucode_ver[64];
-
-- strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
-- strlcpy(info->version, DRV_VERSION, sizeof(info->version));
-+ strscpy(info->driver, DRV_NAME, sizeof(info->driver));
-+ strscpy(info->version, DRV_VERSION, sizeof(info->version));
-
- ipw2100_get_fwversion(priv, fw_ver, sizeof(fw_ver));
- ipw2100_get_ucodeversion(priv, ucode_ver, sizeof(ucode_ver));
-@@ -5916,7 +5916,7 @@ static void ipw_ethtool_get_drvinfo(struct net_device *dev,
- snprintf(info->fw_version, sizeof(info->fw_version), "%s:%d:%s",
- fw_ver, priv->eeprom_version, ucode_ver);
-
-- strlcpy(info->bus_info, pci_name(priv->pci_dev),
-+ strscpy(info->bus_info, pci_name(priv->pci_dev),
- sizeof(info->bus_info));
- }
-
-diff --git a/drivers/net/wireless/intel/ipw2x00/ipw2200.c b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
-index bb728fb24b8a4..706cd36a43055 100644
---- a/drivers/net/wireless/intel/ipw2x00/ipw2200.c
-+++ b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
-@@ -10427,8 +10427,8 @@ static void ipw_ethtool_get_drvinfo(struct net_device *dev,
- char date[32];
- u32 len;
-
-- strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
-- strlcpy(info->version, DRV_VERSION, sizeof(info->version));
-+ strscpy(info->driver, DRV_NAME, sizeof(info->driver));
-+ strscpy(info->version, DRV_VERSION, sizeof(info->version));
-
- len = sizeof(vers);
- ipw_get_ordinal(p, IPW_ORD_STAT_FW_VERSION, vers, &len);
-@@ -10437,7 +10437,7 @@ static void ipw_ethtool_get_drvinfo(struct net_device *dev,
-
- snprintf(info->fw_version, sizeof(info->fw_version), "%s (%s)",
- vers, date);
-- strlcpy(info->bus_info, pci_name(p->pci_dev),
-+ strscpy(info->bus_info, pci_name(p->pci_dev),
- sizeof(info->bus_info));
- }
-
-diff --git a/drivers/net/wireless/intel/iwlegacy/3945-mac.c b/drivers/net/wireless/intel/iwlegacy/3945-mac.c
-index 04c149ff745e9..00fa3c80a46f6 100644
---- a/drivers/net/wireless/intel/iwlegacy/3945-mac.c
-+++ b/drivers/net/wireless/intel/iwlegacy/3945-mac.c
-@@ -3254,7 +3254,7 @@ il3945_store_measurement(struct device *d, struct device_attribute *attr,
-
- if (count) {
- char *p = buffer;
-- strlcpy(buffer, buf, sizeof(buffer));
-+ strscpy(buffer, buf, sizeof(buffer));
- channel = simple_strtoul(p, NULL, 0);
- if (channel)
- params.channel = channel;
-diff --git a/drivers/net/wireless/intersil/hostap/hostap_ioctl.c b/drivers/net/wireless/intersil/hostap/hostap_ioctl.c
-index 0a376f112db9f..4e0a0c8816979 100644
---- a/drivers/net/wireless/intersil/hostap/hostap_ioctl.c
-+++ b/drivers/net/wireless/intersil/hostap/hostap_ioctl.c
-@@ -3848,7 +3848,7 @@ static void prism2_get_drvinfo(struct net_device *dev,
- iface = netdev_priv(dev);
- local = iface->local;
-
-- strlcpy(info->driver, "hostap", sizeof(info->driver));
-+ strscpy(info->driver, "hostap", sizeof(info->driver));
- snprintf(info->fw_version, sizeof(info->fw_version),
- "%d.%d.%d", (local->sta_fw_ver >> 16) & 0xff,
- (local->sta_fw_ver >> 8) & 0xff,
-diff --git a/drivers/net/wireless/marvell/libertas/ethtool.c b/drivers/net/wireless/marvell/libertas/ethtool.c
-index d8e4f29b690d1..9f53308a99357 100644
---- a/drivers/net/wireless/marvell/libertas/ethtool.c
-+++ b/drivers/net/wireless/marvell/libertas/ethtool.c
-@@ -20,8 +20,8 @@ static void lbs_ethtool_get_drvinfo(struct net_device *dev,
- priv->fwrelease >> 16 & 0xff,
- priv->fwrelease >> 8 & 0xff,
- priv->fwrelease & 0xff);
-- strlcpy(info->driver, "libertas", sizeof(info->driver));
-- strlcpy(info->version, lbs_driver_version, sizeof(info->version));
-+ strscpy(info->driver, "libertas", sizeof(info->driver));
-+ strscpy(info->version, lbs_driver_version, sizeof(info->version));
- }
-
- /*
-diff --git a/drivers/net/wireless/microchip/wilc1000/mon.c b/drivers/net/wireless/microchip/wilc1000/mon.c
-index b5a1b65c087ca..03b7229a0ff5a 100644
---- a/drivers/net/wireless/microchip/wilc1000/mon.c
-+++ b/drivers/net/wireless/microchip/wilc1000/mon.c
-@@ -229,7 +229,7 @@ struct net_device *wilc_wfi_init_mon_interface(struct wilc *wl,
- return NULL;
-
- wl->monitor_dev->type = ARPHRD_IEEE80211_RADIOTAP;
-- strlcpy(wl->monitor_dev->name, name, IFNAMSIZ);
-+ strscpy(wl->monitor_dev->name, name, IFNAMSIZ);
- wl->monitor_dev->netdev_ops = &wilc_wfi_netdev_ops;
- wl->monitor_dev->needs_free_netdev = true;
-
-diff --git a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
-index 84b15a655eab1..45ef582880d2c 100644
---- a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
-+++ b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
-@@ -1221,7 +1221,7 @@ int qtnf_wiphy_register(struct qtnf_hw_info *hw_info, struct qtnf_wmac *mac)
- mac->macinfo.extended_capabilities_len;
- }
-
-- strlcpy(wiphy->fw_version, hw_info->fw_version,
-+ strscpy(wiphy->fw_version, hw_info->fw_version,
- sizeof(wiphy->fw_version));
- wiphy->hw_version = hw_info->hw_version;
-
-diff --git a/drivers/net/wireless/quantenna/qtnfmac/commands.c b/drivers/net/wireless/quantenna/qtnfmac/commands.c
-index c68563c830981..e0ebe19ee2d8c 100644
---- a/drivers/net/wireless/quantenna/qtnfmac/commands.c
-+++ b/drivers/net/wireless/quantenna/qtnfmac/commands.c
-@@ -965,7 +965,7 @@ qtnf_cmd_resp_proc_hw_info(struct qtnf_bus *bus,
- hwinfo->total_rx_chain, hwinfo->total_tx_chain,
- hwinfo->fw_ver);
-
-- strlcpy(hwinfo->fw_version, bld_label, sizeof(hwinfo->fw_version));
-+ strscpy(hwinfo->fw_version, bld_label, sizeof(hwinfo->fw_version));
- hwinfo->hw_version = hw_ver;
-
- return 0;
-diff --git a/drivers/net/wireless/realtek/rtl818x/rtl8187/leds.c b/drivers/net/wireless/realtek/rtl818x/rtl8187/leds.c
-index 49421d10e22bc..f7d95c9624a01 100644
---- a/drivers/net/wireless/realtek/rtl818x/rtl8187/leds.c
-+++ b/drivers/net/wireless/realtek/rtl818x/rtl8187/leds.c
-@@ -143,7 +143,7 @@ static int rtl8187_register_led(struct ieee80211_hw *dev,
- led->dev = dev;
- led->ledpin = ledpin;
- led->is_radio = is_radio;
-- strlcpy(led->name, name, sizeof(led->name));
-+ strscpy(led->name, name, sizeof(led->name));
-
- led->led_dev.name = led->name;
- led->led_dev.default_trigger = default_trigger;
-diff --git a/drivers/net/wireless/wl3501_cs.c b/drivers/net/wireless/wl3501_cs.c
-index 7351a2c127adc..7fb2f95134760 100644
---- a/drivers/net/wireless/wl3501_cs.c
-+++ b/drivers/net/wireless/wl3501_cs.c
-@@ -1441,7 +1441,7 @@ static void wl3501_detach(struct pcmcia_device *link)
- static int wl3501_get_name(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
- {
-- strlcpy(wrqu->name, "IEEE 802.11-DS", sizeof(wrqu->name));
-+ strscpy(wrqu->name, "IEEE 802.11-DS", sizeof(wrqu->name));
- return 0;
- }
-
-@@ -1652,7 +1652,7 @@ static int wl3501_set_nick(struct net_device *dev, struct iw_request_info *info,
-
- if (wrqu->data.length > sizeof(this->nick))
- return -E2BIG;
-- strlcpy(this->nick, extra, wrqu->data.length);
-+ strscpy(this->nick, extra, wrqu->data.length);
- return 0;
- }
-
-@@ -1661,7 +1661,7 @@ static int wl3501_get_nick(struct net_device *dev, struct iw_request_info *info,
- {
- struct wl3501_card *this = netdev_priv(dev);
-
-- strlcpy(extra, this->nick, 32);
-+ strscpy(extra, this->nick, 32);
- wrqu->data.length = strlen(extra);
- return 0;
- }
-@@ -1965,7 +1965,7 @@ static int wl3501_config(struct pcmcia_device *link)
- this->firmware_date[0] = '\0';
- this->rssi = 255;
- this->chan = iw_default_channel(this->reg_domain);
-- strlcpy(this->nick, "Planet WL3501", sizeof(this->nick));
-+ strscpy(this->nick, "Planet WL3501", sizeof(this->nick));
- spin_lock_init(&this->lock);
- init_waitqueue_head(&this->wait);
- netif_start_queue(dev);
---
-2.39.2
-
Link: https://lore.kernel.org/r/7cc9c9316489b7d69b36aeb0edd3123538500b41.1684569865.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
- drivers/net/wireless/wl3501_cs.c | 16 +++++++++++-----
+ drivers/net/wireless/wl3501_cs.c | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
-diff --git a/drivers/net/wireless/wl3501_cs.c b/drivers/net/wireless/wl3501_cs.c
-index 7fb2f95134760..c45c4b7cbbaf1 100644
--- a/drivers/net/wireless/wl3501_cs.c
+++ b/drivers/net/wireless/wl3501_cs.c
-@@ -1862,6 +1862,7 @@ static int wl3501_probe(struct pcmcia_device *p_dev)
+@@ -1862,6 +1862,7 @@ static int wl3501_probe(struct pcmcia_de
{
struct net_device *dev;
struct wl3501_card *this;
/* The io structure describes IO port mapping */
p_dev->resource[0]->end = 16;
-@@ -1873,8 +1874,7 @@ static int wl3501_probe(struct pcmcia_device *p_dev)
+@@ -1873,8 +1874,7 @@ static int wl3501_probe(struct pcmcia_de
dev = alloc_etherdev(sizeof(struct wl3501_card));
if (!dev)
dev->netdev_ops = &wl3501_netdev_ops;
dev->watchdog_timeo = 5 * HZ;
-@@ -1887,9 +1887,15 @@ static int wl3501_probe(struct pcmcia_device *p_dev)
+@@ -1887,9 +1887,15 @@ static int wl3501_probe(struct pcmcia_de
netif_stop_queue(dev);
p_dev->priv = dev;
}
static int wl3501_config(struct pcmcia_device *link)
---
-2.39.2
-