]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/6.1.83/wifi-brcmsmac-avoid-function-pointer-casts.patch
Linux 6.1.83
[thirdparty/kernel/stable-queue.git] / releases / 6.1.83 / wifi-brcmsmac-avoid-function-pointer-casts.patch
1 From da515e85aceb004ebe723869496e16a5e3e5ecbc Mon Sep 17 00:00:00 2001
2 From: Sasha Levin <sashal@kernel.org>
3 Date: Tue, 13 Feb 2024 11:05:37 +0100
4 Subject: wifi: brcmsmac: avoid function pointer casts
5
6 From: Arnd Bergmann <arnd@arndb.de>
7
8 [ Upstream commit e1ea6db35fc3ba5ff063f097385e9f7a88c25356 ]
9
10 An old cleanup went a little too far and causes a warning with clang-16
11 and higher as it breaks control flow integrity (KCFI) rules:
12
13 drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c:64:34: error: cast from 'void (*)(struct brcms_phy *)' to 'void (*)(void *)' converts to incompatible function type [-Werror,-Wcast-function-type-strict]
14 64 | brcms_init_timer(physhim->wl, (void (*)(void *))fn,
15 | ^~~~~~~~~~~~~~~~~~~~
16
17 Change this one instance back to passing a void pointer so it can be
18 used with the timer callback interface.
19
20 Fixes: d89a4c80601d ("staging: brcm80211: removed void * from softmac phy")
21 Signed-off-by: Arnd Bergmann <arnd@arndb.de>
22 Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
23 Signed-off-by: Kalle Valo <kvalo@kernel.org>
24 Link: https://msgid.link/20240213100548.457854-1-arnd@kernel.org
25 Signed-off-by: Sasha Levin <sashal@kernel.org>
26 ---
27 .../net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c | 3 ++-
28 drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c | 5 ++---
29 drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h | 2 +-
30 3 files changed, 5 insertions(+), 5 deletions(-)
31
32 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c
33 index ccc621b8ed9f2..4a1fe982a948e 100644
34 --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c
35 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c
36 @@ -383,8 +383,9 @@ struct shared_phy *wlc_phy_shared_attach(struct shared_phy_params *shp)
37 return sh;
38 }
39
40 -static void wlc_phy_timercb_phycal(struct brcms_phy *pi)
41 +static void wlc_phy_timercb_phycal(void *ptr)
42 {
43 + struct brcms_phy *pi = ptr;
44 uint delay = 5;
45
46 if (PHY_PERICAL_MPHASE_PENDING(pi)) {
47 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c
48 index a0de5db0cd646..b723817915365 100644
49 --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c
50 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c
51 @@ -57,12 +57,11 @@ void wlc_phy_shim_detach(struct phy_shim_info *physhim)
52 }
53
54 struct wlapi_timer *wlapi_init_timer(struct phy_shim_info *physhim,
55 - void (*fn)(struct brcms_phy *pi),
56 + void (*fn)(void *pi),
57 void *arg, const char *name)
58 {
59 return (struct wlapi_timer *)
60 - brcms_init_timer(physhim->wl, (void (*)(void *))fn,
61 - arg, name);
62 + brcms_init_timer(physhim->wl, fn, arg, name);
63 }
64
65 void wlapi_free_timer(struct wlapi_timer *t)
66 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h
67 index dd8774717adee..27d0934e600ed 100644
68 --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h
69 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h
70 @@ -131,7 +131,7 @@ void wlc_phy_shim_detach(struct phy_shim_info *physhim);
71
72 /* PHY to WL utility functions */
73 struct wlapi_timer *wlapi_init_timer(struct phy_shim_info *physhim,
74 - void (*fn)(struct brcms_phy *pi),
75 + void (*fn)(void *pi),
76 void *arg, const char *name);
77 void wlapi_free_timer(struct wlapi_timer *t);
78 void wlapi_add_timer(struct wlapi_timer *t, uint ms, int periodic);
79 --
80 2.43.0
81