6.6.2-rc1 review
Subsystems (7)
Greg Kroah-Hartman
maintainerPATCH 534/603 drm/amdgpu/gfx10,11: use memcpy_to/fromio for MQDs
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <[email protected]>
[ Upstream commit b3c942bb6c32a8ddc1d52ee6bc24b8cf732dddf4 ]
Since they were moved to VRAM, we need to use the IO variants of memcpy.
--- drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 12 ++++++------ drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-)
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c +6 -6
@@ -6457,11 +6457,11 @@ static int gfx_v10_0_gfx_init_queue(struct amdgpu_ring *ring)nv_grbm_select (adev,0 ,0 ,0 ,0 );mutex_unlock (&adev->srbm_mutex);if (adev->gfx.me.mqd_backup[mqd_idx]) -memcpy (adev->gfx.me.mqd_backup[mqd_idx], mqd,sizeof (*mqd)); +memcpy_fromio (adev->gfx.me.mqd_backup[mqd_idx], mqd,sizeof (*mqd)); }else {/* restore mqd with the backup copy */ if (adev->gfx.me.mqd_backup[mqd_idx]) -memcpy (mqd, adev->gfx.me.mqd_backup[mqd_idx],sizeof (*mqd)); +memcpy_toio (mqd, adev->gfx.me.mqd_backup[mqd_idx],sizeof (*mqd));/* reset the ring */ ring->wptr =0 ; *ring->wptr_cpu_addr =0 ;
@@ -6735,7 +6735,7 @@ static int gfx_v10_0_kiq_init_queue(struct amdgpu_ring *ring)if (amdgpu_in_reset (adev)) {/* for GPU_RESET case */ /* reset MQD to a clean status */ if (adev->gfx.kiq[0 ].mqd_backup) -memcpy (mqd, adev->gfx.kiq[0 ].mqd_backup,sizeof (*mqd)); +memcpy_toio (mqd, adev->gfx.kiq[0 ].mqd_backup,sizeof (*mqd));/* reset ring buffer */ ring->wptr =0 ;
@@ -6758,7 +6758,7 @@ static int gfx_v10_0_kiq_init_queue(struct amdgpu_ring *ring)mutex_unlock (&adev->srbm_mutex);if (adev->gfx.kiq[0 ].mqd_backup) -memcpy (adev->gfx.kiq[0 ].mqd_backup, mqd,sizeof (*mqd)); +memcpy_fromio (adev->gfx.kiq[0 ].mqd_backup, mqd,sizeof (*mqd)); }return 0 ;
@@ -6779,11 +6779,11 @@ static int gfx_v10_0_kcq_init_queue(struct amdgpu_ring *ring)mutex_unlock (&adev->srbm_mutex);if (adev->gfx.mec.mqd_backup[mqd_idx]) -memcpy (adev->gfx.mec.mqd_backup[mqd_idx], mqd,sizeof (*mqd)); +memcpy_fromio (adev->gfx.mec.mqd_backup[mqd_idx], mqd,sizeof (*mqd)); }else {/* restore MQD to a clean status */ if (adev->gfx.mec.mqd_backup[mqd_idx]) -memcpy (mqd, adev->gfx.mec.mqd_backup[mqd_idx],sizeof (*mqd)); +memcpy_toio (mqd, adev->gfx.mec.mqd_backup[mqd_idx],sizeof (*mqd));/* reset ring buffer */ ring->wptr =0 ;atomic64_set ((atomic64_t *)ring->wptr_cpu_addr,0 );
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c +6 -6
@@ -3684,11 +3684,11 @@ static int gfx_v11_0_gfx_init_queue(struct amdgpu_ring *ring)soc21_grbm_select (adev,0 ,0 ,0 ,0 );mutex_unlock (&adev->srbm_mutex);if (adev->gfx.me.mqd_backup[mqd_idx]) -memcpy (adev->gfx.me.mqd_backup[mqd_idx], mqd,sizeof (*mqd)); +memcpy_fromio (adev->gfx.me.mqd_backup[mqd_idx], mqd,sizeof (*mqd)); }else {/* restore mqd with the backup copy */ if (adev->gfx.me.mqd_backup[mqd_idx]) -memcpy (mqd, adev->gfx.me.mqd_backup[mqd_idx],sizeof (*mqd)); +memcpy_toio (mqd, adev->gfx.me.mqd_backup[mqd_idx],sizeof (*mqd));/* reset the ring */ ring->wptr =0 ; *ring->wptr_cpu_addr =0 ;
@@ -3977,7 +3977,7 @@ static int gfx_v11_0_kiq_init_queue(struct amdgpu_ring *ring)if (amdgpu_in_reset (adev)) {/* for GPU_RESET case */ /* reset MQD to a clean status */ if (adev->gfx.kiq[0 ].mqd_backup) -memcpy (mqd, adev->gfx.kiq[0 ].mqd_backup,sizeof (*mqd)); +memcpy_toio (mqd, adev->gfx.kiq[0 ].mqd_backup,sizeof (*mqd));/* reset ring buffer */ ring->wptr =0 ;
@@ -4000,7 +4000,7 @@ static int gfx_v11_0_kiq_init_queue(struct amdgpu_ring *ring)mutex_unlock (&adev->srbm_mutex);if (adev->gfx.kiq[0 ].mqd_backup) -memcpy (adev->gfx.kiq[0 ].mqd_backup, mqd,sizeof (*mqd)); +memcpy_fromio (adev->gfx.kiq[0 ].mqd_backup, mqd,sizeof (*mqd)); }return 0 ;
@@ -4021,11 +4021,11 @@ static int gfx_v11_0_kcq_init_queue(struct amdgpu_ring *ring)mutex_unlock (&adev->srbm_mutex);if (adev->gfx.mec.mqd_backup[mqd_idx]) -memcpy (adev->gfx.mec.mqd_backup[mqd_idx], mqd,sizeof (*mqd)); +memcpy_fromio (adev->gfx.mec.mqd_backup[mqd_idx], mqd,sizeof (*mqd)); }else {/* restore MQD to a clean status */ if (adev->gfx.mec.mqd_backup[mqd_idx]) -memcpy (mqd, adev->gfx.mec.mqd_backup[mqd_idx],sizeof (*mqd)); +memcpy_toio (mqd, adev->gfx.mec.mqd_backup[mqd_idx],sizeof (*mqd));/* reset ring buffer */ ring->wptr =0 ;atomic64_set ((atomic64_t *)ring->wptr_cpu_addr,0 );
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 535/603 drm/amdgpu: dont put MQDs in VRAM on ARM | ARM64
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <[email protected]>
[ Upstream commit ba0fb4b48c19a2d2380fc16ca4af236a0871d279 ]
Issues were reported with commit 1cfb4d612127 ("drm/amdgpu: put MQDs in VRAM") on an ADLINK Ampere Altra Developer Platform (AVA developer platform).
Various ARM systems seem to have problems related to PCIe and MMIO access. In this case, I'm not sure if this is specific to the ADLINK platform or ARM in general. Seems to be some coherency issue with VRAM. For now, just don't put MQDs in VRAM on ARM.
--- drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c +2 -0
@@ -384,9 +384,11 @@ int amdgpu_gfx_mqd_sw_init(struct amdgpu_device *adev,struct amdgpu_ring *ring = &kiq->ring;u32 domain =AMDGPU_GEM_DOMAIN_GTT ; +#if !defined(CONFIG_ARM ) && !defined(CONFIG_ARM64 )/* Only enable on gfx10 and 11 for now to avoid changing behavior on older chips */ if (adev->ip_versions[GC_HWIP ][0 ] >=IP_VERSION (10 ,0 ,0 )) domain |=AMDGPU_GEM_DOMAIN_VRAM ; +#endif /* create MQD for KIQ */ if (!adev->enable_mes_kiq && !ring->mqd_obj) {
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 536/603 pwm: sti: Reduce number of allocations and drop usage of chip_data
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Uwe Kleine-König <[email protected]>
[ Upstream commit 2d6812b41e0d832919d72c72ebddf361df53ba1b ]
Instead of using one allocation per capture channel, use a single one. Also store it in driver data instead of chip data.
This has several advantages:
- driver data isn't cleared when pwm_put() is called
- Reduces memory fragmentation
Also register the pwm chip only after the per capture channel data is initialized as the capture callback relies on this initialization and it might be called even before pwmchip_add() returns.
It would be still better to have struct sti_pwm_compat_data and the per-channel data struct sti_cpt_ddata in a single memory chunk, but that's not easily possible because the number of capture channels isn't known yet when the driver data struct is allocated.
--- drivers/pwm/pwm-sti.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-)
drivers/pwm/pwm-sti.c +14 -15
@@ -79,6 +79,7 @@ struct sti_pwm_compat_data {unsigned int cpt_num_devs;unsigned int max_pwm_cnt;unsigned int max_prescale; +struct sti_cpt_ddata *ddata; };struct sti_pwm_chip {
@@ -314,7 +315,7 @@ static int sti_pwm_capture(struct pwm_chip *chip, struct pwm_device *pwm, {struct sti_pwm_chip *pc =to_sti_pwmchip (chip);struct sti_pwm_compat_data *cdata = pc->cdata; -struct sti_cpt_ddata *ddata =pwm_get_chip_data (pwm); +struct sti_cpt_ddata *ddata = &cdata->ddata[pwm->hwpwm];struct device *dev = pc->dev;unsigned int effective_ticks;unsigned long long high, low;
@@ -440,7 +441,7 @@ static irqreturn_t sti_pwm_interrupt(int irq, void *data)while (cpt_int_stat) { devicenum =ffs (cpt_int_stat) -1 ; - ddata =pwm_get_chip_data (&pc->chip.pwms[devicenum]); + ddata = &pc->cdata->ddata[devicenum];/* * Capture input:
@@ -638,30 +639,28 @@ static int sti_pwm_probe(struct platform_device *pdev)dev_err (dev,"failed to prepare clock\n" );return ret; } + + cdata->ddata =devm_kzalloc (dev, cdata->cpt_num_devs *sizeof (*cdata->ddata),GFP_KERNEL ); +if (!cdata->ddata) +return -ENOMEM ; } pc->chip.dev = dev; pc->chip.ops = &sti_pwm_ops; pc->chip.npwm = pc->cdata->pwm_num_devs; - ret =pwmchip_add (&pc->chip); -if (ret <0 ) { -clk_unprepare (pc->pwm_clk); -clk_unprepare (pc->cpt_clk); -return ret; - } -for (i =0 ; i < cdata->cpt_num_devs; i++) { -struct sti_cpt_ddata *ddata; - - ddata =devm_kzalloc (dev,sizeof (*ddata),GFP_KERNEL ); -if (!ddata) -return -ENOMEM ; +struct sti_cpt_ddata *ddata = &cdata->ddata[i];init_waitqueue_head (&ddata->wait);mutex_init (&ddata->lock); + } -pwm_set_chip_data (&pc->chip.pwms[i], ddata); + ret =pwmchip_add (&pc->chip); +if (ret <0 ) { +clk_unprepare (pc->pwm_clk); +clk_unprepare (pc->cpt_clk); +return ret; }platform_set_drvdata (pdev, pc);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 537/603 pwm: brcmstb: Utilize appropriate clock APIs in suspend/resume
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Florian Fainelli <[email protected]>
[ Upstream commit e9bc4411548aaa738905d37851a0146c16b3bb21 ]
The suspend/resume functions currently utilize clk_disable()/clk_enable() respectively which may be no-ops with certain clock providers such as SCMI. Fix this to use clk_disable_unprepare() and clk_prepare_enable() respectively as we should.
--- drivers/pwm/pwm-brcmstb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/pwm/pwm-brcmstb.c +2 -2
@@ -288,7 +288,7 @@ static int brcmstb_pwm_suspend(struct device *dev) {struct brcmstb_pwm *p =dev_get_drvdata (dev); -clk_disable (p->clk); +clk_disable_unprepare (p->clk);return 0 ; }
@@ -297,7 +297,7 @@ static int brcmstb_pwm_resume(struct device *dev) {struct brcmstb_pwm *p =dev_get_drvdata (dev); -clk_enable (p->clk); +clk_prepare_enable (p->clk);return 0 ; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 538/603 Input: synaptics-rmi4 - fix use after free in rmi_unregister_function()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <[email protected]>
[ Upstream commit eb988e46da2e4eae89f5337e047ce372fe33d5b1 ]
The put_device() calls rmi_release_function() which frees "fn" so the dereference on the next line "fn->num_of_irqs" is a use after free. Move the put_device() to the end to fix this.
--- drivers/input/rmi4/rmi_bus.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/input/rmi4/rmi_bus.c +1 -1
@@ -277,11 +277,11 @@ void rmi_unregister_function(struct rmi_function *fn)device_del (&fn->dev);of_node_put (fn->dev.of_node); -put_device (&fn->dev);for (i =0 ; i < fn->num_of_irqs; i++)irq_dispose_mapping (fn->irq[i]); +put_device (&fn->dev); }/**
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 539/603 watchdog: marvell_gti_wdt: Fix error code in probe()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <[email protected]>
[ Upstream commit 4b2b39f9395bc66c616d8d5a83642950fc3719b1 ]
This error path accidentally returns success. Return -EINVAL instead.
--- drivers/watchdog/marvell_gti_wdt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/watchdog/marvell_gti_wdt.c +1 -1
@@ -271,7 +271,7 @@ static int gti_wdt_probe(struct platform_device *pdev) &wdt_idx);if (!err) {if (wdt_idx >= priv->data->gti_num_timers) -return dev_err_probe (&pdev->dev, err, +return dev_err_probe (&pdev->dev, -EINVAL ,"GTI wdog timer index not valid" ); priv->wdt_timer_idx = wdt_idx;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 540/603 watchdog: ixp4xx: Make sure restart always works
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Linus Walleij <[email protected]>
[ Upstream commit b4075ecfe348a44209534c75ad72392c63a489a6 ]
The IXP4xx watchdog in early "A0" silicon is unreliable and cannot be registered, however for some systems such as the USRobotics USR8200 the watchdog is the only restart option, so implement a "dummy" watchdog that can only support restart in this case.
--- drivers/watchdog/ixp4xx_wdt.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-)
drivers/watchdog/ixp4xx_wdt.c +25 -3
@@ -105,6 +105,25 @@ static const struct watchdog_ops ixp4xx_wdt_ops = { .owner = THIS_MODULE, }; +/* +* The A0 version of the IXP422 had a bug in the watchdog making +* is useless, but we still need to use it to restart the system +* as it is the only way, so in this special case we register a +* "dummy" watchdog that doesn't really work, but will support +* the restart operation. +*/ +static int ixp4xx_wdt_dummy (struct watchdog_device *wdd) +{ +return 0 ; +} + +static const struct watchdog_ops ixp4xx_wdt_restart_only_ops = { + .start = ixp4xx_wdt_dummy, + .stop = ixp4xx_wdt_dummy, + .restart = ixp4xx_wdt_restart, + .owner =THIS_MODULE , +}; +static const struct watchdog_info ixp4xx_wdt_info = { .options =WDIOF_KEEPALIVEPING |WDIOF_MAGICCLOSE
@@ -114,14 +133,17 @@ static const struct watchdog_info ixp4xx_wdt_info = {static int ixp4xx_wdt_probe (struct platform_device *pdev) { +static const struct watchdog_ops *iwdt_ops;struct device *dev = &pdev->dev;struct ixp4xx_wdt *iwdt;struct clk *clk;int ret;if (!(read_cpuid_id () &0xf ) && !cpu_is_ixp46x ()) { -dev_err (dev,"Rev. A0 IXP42x CPU detected - watchdog disabled\n" ); -return -ENODEV ; +dev_info (dev,"Rev. A0 IXP42x CPU detected - only restart supported\n" ); + iwdt_ops = &ixp4xx_wdt_restart_only_ops; + }else { + iwdt_ops = &ixp4xx_wdt_ops; } iwdt =devm_kzalloc (dev,sizeof (*iwdt),GFP_KERNEL );
@@ -141,7 +163,7 @@ static int ixp4xx_wdt_probe(struct platform_device *pdev) iwdt->rate =IXP4XX_TIMER_FREQ ; iwdt->wdd.info = &ixp4xx_wdt_info; - iwdt->wdd.ops = &ixp4xx_wdt_ops; + iwdt->wdd.ops = iwdt_ops; iwdt->wdd.min_timeout =1 ; iwdt->wdd.max_timeout =U32_MAX / iwdt->rate; iwdt->wdd.parent = dev;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 541/603 llc: verify mac len before reading mac header
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Willem de Bruijn <[email protected]>
[ Upstream commit 7b3ba18703a63f6fd487183b9262b08e5632da1b ]
LLC reads the mac header with eth_hdr without verifying that the skb has an Ethernet header.
Syzbot was able to enter llc_rcv on a tun device. Tun can insert packets without mac len and with user configurable skb->protocol (passing a tun_pi header when not configuring IFF_NO_PI).
BUG: KMSAN: uninit-value in llc_station_ac_send_test_r net/llc/llc_station.c:81 [inline]
BUG: KMSAN: uninit-value in llc_station_rcv+0x6fb/0x1290 net/llc/llc_station.c:111
llc_station_ac_send_test_r net/llc/llc_station.c:81 [inline]
llc_station_rcv+0x6fb/0x1290 net/llc/llc_station.c:111
llc_rcv+0xc5d/0x14a0 net/llc/llc_input.c:218
__netif_receive_skb_one_core net/core/dev.c:5523 [inline]
__netif_receive_skb+0x1a6/0x5a0 net/core/dev.c:5637
netif_receive_skb_internal net/core/dev.c:5723 [inline]
netif_receive_skb+0x58/0x660 net/core/dev.c:5782
tun_rx_batched+0x3ee/0x980 drivers/net/tun.c:1555
tun_get_user+0x54c5/0x69c0 drivers/net/tun.c:2002Add a mac_len test before all three eth_hdr(skb) calls under net/llc.
There are further uses in include/net/llc_pdu.h. All these are protected by a test skb->protocol == ETH_P_802_2. Which does not protect against this tun scenario.
But the mac_len test added in this patch in llc_fixup_skb will indirectly protect those too. That is called from llc_rcv before any other LLC code.
It is tempting to just add a blanket mac_len check in llc_rcv, but not sure whether that could break valid LLC paths that do not assume an Ethernet header. 802.2 LLC may be used on top of non-802.3 protocols in principle. The below referenced commit shows that used to, on top of Token Ring.
At least one of the three eth_hdr uses goes back to before the start of git history. But the one that syzbot exercises is introduced in this commit. That commit is old enough (2008), that effectively all stable kernels should receive this.
--- net/llc/llc_input.c | 10 ++++++++-- net/llc/llc_s_ac.c | 3 +++ net/llc/llc_station.c | 3 +++ 3 files changed, 14 insertions(+), 2 deletions(-)
net/llc/llc_input.c +8 -2
@@ -127,8 +127,14 @@ static inline int llc_fixup_skb(struct sk_buff *skb) skb->transport_header += llc_len;skb_pull (skb, llc_len);if (skb->protocol ==htons (ETH_P_802_2 )) { -__be16 pdulen =eth_hdr (skb)->h_proto; -s32 data_size =ntohs (pdulen) - llc_len; +__be16 pdulen; +s32 data_size; + +if (skb->mac_len <ETH_HLEN ) +return 0 ; + + pdulen =eth_hdr (skb)->h_proto; + data_size =ntohs (pdulen) - llc_len;if (data_size <0 || !pskb_may_pull (skb, data_size))
net/llc/llc_s_ac.c +3 -0
@@ -153,6 +153,9 @@ int llc_sap_action_send_test_r(struct llc_sap *sap, struct sk_buff *skb)int rc =1 ;u32 data_size; +if (skb->mac_len <ETH_HLEN ) +return 1 ; +llc_pdu_decode_sa (skb, mac_da);llc_pdu_decode_da (skb, mac_sa);llc_pdu_decode_ssap (skb, &dsap);
net/llc/llc_station.c +3 -0
@@ -76,6 +76,9 @@ static int llc_station_ac_send_test_r(struct sk_buff *skb)u32 data_size;struct sk_buff *nskb; +if (skb->mac_len <ETH_HLEN ) + goto out; +/* The test request command is type U (llc_len = 3) */ data_size =ntohs (eth_hdr (skb)->h_proto) -3 ; nskb =llc_alloc_frame (NULL , skb->dev,LLC_PDU_TYPE_U , data_size);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 542/603 hsr: Prevent use after free in prp_create_tagged_frame()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <[email protected]>
[ Upstream commit 876f8ab52363f649bcc74072157dfd7adfbabc0d ]
The prp_fill_rct() function can fail. In that situation, it frees the skb and returns NULL. Meanwhile on the success path, it returns the original skb. So it's straight forward to fix bug by using the returned value.
--- net/hsr/hsr_forward.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
net/hsr/hsr_forward.c +1 -3
@@ -342,9 +342,7 @@ struct sk_buff *prp_create_tagged_frame(struct hsr_frame_info *frame, skb =skb_copy_expand (frame->skb_std,0 ,skb_tailroom (frame->skb_std) +HSR_HLEN ,GFP_ATOMIC ); -prp_fill_rct (skb, frame, port); - -return skb; +return prp_fill_rct (skb, frame, port); } static void hsr_deliver_master(struct sk_buff *skb, struct net_device *dev,
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 543/603 tipc: Change nla_policy for bearer-related names to NLA_NUL_STRING
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Shigeru Yoshida <[email protected]>
[ Upstream commit 19b3f72a41a8751e26bffc093bb7e1cef29ad579 ]
syzbot reported the following uninit-value access issue [1]:
=====================================================
BUG: KMSAN: uninit-value in strlen lib/string.c:418 [inline] BUG: KMSAN: uninit-value in strstr+0xb8/0x2f0 lib/string.c:756 strlen lib/string.c:418 [inline] strstr+0xb8/0x2f0 lib/string.c:756 tipc_nl_node_reset_link_stats+0x3ea/0xb50 net/tipc/node.c:2595 genl_family_rcv_msg_doit net/netlink/genetlink.c:971 [inline] genl_family_rcv_msg net/netlink/genetlink.c:1051 [inline] genl_rcv_msg+0x11ec/0x1290 net/netlink/genetlink.c:1066 netlink_rcv_skb+0x371/0x650 net/netlink/af_netlink.c:2545 genl_rcv+0x40/0x60 net/netlink/genetlink.c:1075 netlink_unicast_kernel net/netlink/af_netlink.c:1342 [inline] netlink_unicast+0xf47/0x1250 net/netlink/af_netlink.c:1368 netlink_sendmsg+0x1238/0x13d0 net/netlink/af_netlink.c:1910 sock_sendmsg_nosec net/socket.c:730 [inline] sock_sendmsg net/socket.c:753 [inline] ____sys_sendmsg+0x9c2/0xd60 net/socket.c:2541 ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2595 __sys_sendmsg net/socket.c:2624 [inline] __do_sys_sendmsg net/socket.c:2633 [inline] __se_sys_sendmsg net/socket.c:2631 [inline] __x64_sys_sendmsg+0x307/0x490 net/socket.c:2631 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd
Uninit was created at:
slab_post_alloc_hook+0x12f/0xb70 mm/slab.h:767 slab_alloc_node mm/slub.c:3478 [inline] kmem_cache_alloc_node+0x577/0xa80 mm/slub.c:3523 kmalloc_reserve+0x13d/0x4a0 net/core/skbuff.c:559 __alloc_skb+0x318/0x740 net/core/skbuff.c:650 alloc_skb include/linux/skbuff.h:1286 [inline] netlink_alloc_large_skb net/netlink/af_netlink.c:1214 [inline] netlink_sendmsg+0xb34/0x13d0 net/netlink/af_netlink.c:1885 sock_sendmsg_nosec net/socket.c:730 [inline] sock_sendmsg net/socket.c:753 [inline] ____sys_sendmsg+0x9c2/0xd60 net/socket.c:2541 ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2595 __sys_sendmsg net/socket.c:2624 [inline] __do_sys_sendmsg net/socket.c:2633 [inline] __se_sys_sendmsg net/socket.c:2631 [inline] __x64_sys_sendmsg+0x307/0x490 net/socket.c:2631 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd
TIPC bearer-related names including link names must be null-terminated strings. If a link name which is not null-terminated is passed through netlink, strstr() and similar functions can cause buffer overrun. This causes the above issue.
This patch changes the nla_policy for bearer-related names from NLA_STRING to NLA_NUL_STRING. This resolves the issue by ensuring that only null-terminated strings are accepted as bearer-related names.
syzbot reported similar uninit-value issue related to bearer names [2]. The root cause of this issue is that a non-null-terminated bearer name was passed. This patch also resolved this issue.
--- net/tipc/netlink.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
net/tipc/netlink.c +2 -2
@@ -88,7 +88,7 @@ const struct nla_policy tipc_nl_net_policy[TIPC_NLA_NET_MAX + 1] = {const struct nla_policy tipc_nl_link_policy[TIPC_NLA_LINK_MAX +1 ] = { [TIPC_NLA_LINK_UNSPEC ] = { .type =NLA_UNSPEC }, - [TIPC_NLA_LINK_NAME ] = { .type =NLA_STRING , + [TIPC_NLA_LINK_NAME ] = { .type =NLA_NUL_STRING , .len =TIPC_MAX_LINK_NAME }, [TIPC_NLA_LINK_MTU ] = { .type =NLA_U32 }, [TIPC_NLA_LINK_BROADCAST ] = { .type =NLA_FLAG },
@@ -125,7 +125,7 @@ const struct nla_policy tipc_nl_prop_policy[TIPC_NLA_PROP_MAX + 1] = {const struct nla_policy tipc_nl_bearer_policy[TIPC_NLA_BEARER_MAX +1 ] = { [TIPC_NLA_BEARER_UNSPEC ] = { .type =NLA_UNSPEC }, - [TIPC_NLA_BEARER_NAME ] = { .type =NLA_STRING , + [TIPC_NLA_BEARER_NAME ] = { .type =NLA_NUL_STRING , .len =TIPC_MAX_BEARER_NAME }, [TIPC_NLA_BEARER_PROP ] = { .type =NLA_NESTED }, [TIPC_NLA_BEARER_DOMAIN ] = { .type =NLA_U32 }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 544/603 rxrpc: Fix two connection reaping bugs
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Howells <[email protected]>
[ Upstream commit 61e4a86600029e6e8d468d1fad6b6c749bebed19 ]
Fix two connection reaping bugs:
(1) rxrpc_connection_expiry is in units of seconds, so rxrpc_disconnect_call() needs to multiply it by HZ when adding it to jiffies.
(2) rxrpc_client_conn_reap_timeout() should set RXRPC_CLIENT_REAP_TIMER if local->kill_all_client_conns is clear, not if it is set (in which case we don't need the timer). Without this, old client connections don't get cleaned up until the local endpoint is cleaned up.
--- net/rxrpc/conn_object.c | 2 +- net/rxrpc/local_object.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
net/rxrpc/conn_object.c +1 -1
@@ -212,7 +212,7 @@ void rxrpc_disconnect_call(struct rxrpc_call *call) conn->idle_timestamp = jiffies;if (atomic_dec_and_test (&conn->active))rxrpc_set_service_reap_timer (conn->rxnet, - jiffies + rxrpc_connection_expiry); + jiffies + rxrpc_connection_expiry *HZ ); }rxrpc_put_call (call, rxrpc_call_put_io_thread);
net/rxrpc/local_object.c +1 -1
@@ -87,7 +87,7 @@ static void rxrpc_client_conn_reap_timeout(struct timer_list *timer)struct rxrpc_local *local = container_of(timer, struct rxrpc_local, client_conn_reap_timer); -if (local->kill_all_client_conns && +if (!local->kill_all_client_conns &&test_and_set_bit (RXRPC_CLIENT_CONN_REAP_TIMER , &local->client_conn_flags))rxrpc_wake_up_io_thread (local); }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 545/603 bpf: Check map->usercnt after timer->timer is assigned
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hou Tao <[email protected]>
[ Upstream commit fd381ce60a2d79cc967506208085336d3d268ae0 ]
When there are concurrent uref release and bpf timer init operations, the following sequence diagram is possible. It will break the guarantee provided by bpf_timer: bpf_timer will still be alive after userspace application releases or unpins the map. It also will lead to kmemleak for old kernel version which doesn't release bpf_timer when map is released.
bpf program X:
bpf_timer_init()
lock timer->lock
read timer->timer as NULL
read map->usercnt != 0
process Y:
close(map_fd)
// put last uref
bpf_map_put_uref()
atomic_dec_and_test(map->usercnt)
array_map_free_timers()
bpf_timer_cancel_and_free()
// just return
read timer->timer is NULL
t = bpf_map_kmalloc_node()
timer->timer = t unlock timer->lock
Fix the problem by checking map->usercnt after timer->timer is assigned, so when there are concurrent uref release and bpf timer init, either bpf_timer_cancel_and_free() from uref release reads a no-NULL timer or the newly-added atomic64_read() returns a zero usercnt.
Because atomic_dec_and_test(map->usercnt) and READ_ONCE(timer->timer) in bpf_timer_cancel_and_free() are not protected by a lock, so add a memory barrier to guarantee the order between map->usercnt and timer->timer. Also use WRITE_ONCE(timer->timer, x) to match the lockless read of timer->timer in bpf_timer_cancel_and_free().
--- kernel/bpf/helpers.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-)
kernel/bpf/helpers.c +16 -9
@@ -1176,13 +1176,6 @@ BPF_CALL_3(bpf_timer_init, struct bpf_timer_kern *, timer, struct bpf_map *, map ret = -EBUSY ; goto out; } -if (!atomic64_read (&map->usercnt)) { -/* maps with timers must be either held by user space -* or pinned in bpffs. -*/ - ret = -EPERM ; - goto out; - }/* allocate hrtimer via map_kmalloc to use memcg accounting */ t =bpf_map_kmalloc_node (map,sizeof (*t),GFP_ATOMIC , map->numa_node);if (!t) {
@@ -1195,7 +1188,21 @@ BPF_CALL_3(bpf_timer_init, struct bpf_timer_kern *, timer, struct bpf_map *, maprcu_assign_pointer (t->callback_fn,NULL );hrtimer_init (&t->timer, clockid,HRTIMER_MODE_REL_SOFT ); t->timer.function = bpf_timer_cb; - timer->timer = t; +WRITE_ONCE (timer->timer, t); +/* Guarantee the order between timer->timer and map->usercnt. So +* when there are concurrent uref release and bpf timer init, either +* bpf_timer_cancel_and_free() called by uref release reads a no-NULL +* timer or atomic64_read() below returns a zero usercnt. +*/ +smp_mb (); +if (!atomic64_read (&map->usercnt)) { +/* maps with timers must be either held by user space +* or pinned in bpffs. +*/ +WRITE_ONCE (timer->timer,NULL ); +kfree (t); + ret = -EPERM ; + } out:__bpf_spin_unlock_irqrestore (&timer->lock);return ret;
@@ -1370,7 +1377,7 @@ void bpf_timer_cancel_and_free(void *val)/* The subsequent bpf_timer_start/cancel() helpers won't be able to use * this timer, since it won't be initialized. */ - timer->timer =NULL ; +WRITE_ONCE (timer->timer,NULL ); out:__bpf_spin_unlock_irqrestore (&timer->lock);if (!t)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 546/603 inet: shrink struct flowi_common
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <[email protected]>
[ Upstream commit 1726483b79a72e0150734d5367e4a0238bf8fcff ]
I am looking at syzbot reports triggering kernel stack overflows involving a cascade of ipvlan devices.
We can save 8 bytes in struct flowi_common.
This patch alone will not fix the issue, but is a start.
--- include/net/flow.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/net/flow.h +1 -1
@@ -40,8 +40,8 @@ struct flowi_common {#define FLOWI_FLAG_KNOWN_NH 0x02__u32 flowic_secid;kuid_t flowic_uid; -struct flowi_tunnel flowic_tun_key;__u32 flowic_multipath_hash; +struct flowi_tunnel flowic_tun_key; };union flowi_uli {
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 547/603 octeontx2-pf: Fix error codes
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ratheesh Kannoth <[email protected]>
[ Upstream commit 96b9a68d1a6e4f889d453874c9e359aa720b520f ]
Some of error codes were wrong. Fix the same.
--- .../marvell/octeontx2/nic/otx2_struct.h | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-)
drivers/net/ethernet/marvell/octeontx2/nic/otx2_struct.h +17 -17
@@ -318,23 +318,23 @@ enum nix_snd_status_e {NIX_SND_STATUS_EXT_ERR =0x6 ,NIX_SND_STATUS_JUMP_FAULT =0x7 ,NIX_SND_STATUS_JUMP_POISON =0x8 , -NIX_SND_STATUS_CRC_ERR =0x9 , -NIX_SND_STATUS_IMM_ERR =0x10 , -NIX_SND_STATUS_SG_ERR =0x11 , -NIX_SND_STATUS_MEM_ERR =0x12 , -NIX_SND_STATUS_INVALID_SUBDC =0x13 , -NIX_SND_STATUS_SUBDC_ORDER_ERR =0x14 , -NIX_SND_STATUS_DATA_FAULT =0x15 , -NIX_SND_STATUS_DATA_POISON =0x16 , -NIX_SND_STATUS_NPC_DROP_ACTION =0x17 , -NIX_SND_STATUS_LOCK_VIOL =0x18 , -NIX_SND_STATUS_NPC_UCAST_CHAN_ERR =0x19 , -NIX_SND_STATUS_NPC_MCAST_CHAN_ERR =0x20 , -NIX_SND_STATUS_NPC_MCAST_ABORT =0x21 , -NIX_SND_STATUS_NPC_VTAG_PTR_ERR =0x22 , -NIX_SND_STATUS_NPC_VTAG_SIZE_ERR =0x23 , -NIX_SND_STATUS_SEND_MEM_FAULT =0x24 , -NIX_SND_STATUS_SEND_STATS_ERR =0x25 , +NIX_SND_STATUS_CRC_ERR =0x10 , +NIX_SND_STATUS_IMM_ERR =0x11 , +NIX_SND_STATUS_SG_ERR =0x12 , +NIX_SND_STATUS_MEM_ERR =0x13 , +NIX_SND_STATUS_INVALID_SUBDC =0x14 , +NIX_SND_STATUS_SUBDC_ORDER_ERR =0x15 , +NIX_SND_STATUS_DATA_FAULT =0x16 , +NIX_SND_STATUS_DATA_POISON =0x17 , +NIX_SND_STATUS_NPC_DROP_ACTION =0x20 , +NIX_SND_STATUS_LOCK_VIOL =0x21 , +NIX_SND_STATUS_NPC_UCAST_CHAN_ERR =0x22 , +NIX_SND_STATUS_NPC_MCAST_CHAN_ERR =0x23 , +NIX_SND_STATUS_NPC_MCAST_ABORT =0x24 , +NIX_SND_STATUS_NPC_VTAG_PTR_ERR =0x25 , +NIX_SND_STATUS_NPC_VTAG_SIZE_ERR =0x26 , +NIX_SND_STATUS_SEND_MEM_FAULT =0x27 , +NIX_SND_STATUS_SEND_STATS_ERR =0x28 , NIX_SND_STATUS_MAX, };
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 548/603 octeontx2-pf: Fix holes in error code
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ratheesh Kannoth <[email protected]>
[ Upstream commit 7aeeb2cb7a2570bb69a87ad14018b03e06ce5be5 ]
Error code strings are not getting printed properly due to holes. Print error code as well.
--- .../ethernet/marvell/octeontx2/nic/otx2_pf.c | 80 +++++++++++-------- 1 file changed, 46 insertions(+), 34 deletions(-)
drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c +46 -34
@@ -1193,31 +1193,32 @@ static char *nix_mnqerr_e_str[NIX_MNQERR_MAX] = { };static char *nix_snd_status_e_str[NIX_SND_STATUS_MAX ] = { -"NIX_SND_STATUS_GOOD" , -"NIX_SND_STATUS_SQ_CTX_FAULT" , -"NIX_SND_STATUS_SQ_CTX_POISON" , -"NIX_SND_STATUS_SQB_FAULT" , -"NIX_SND_STATUS_SQB_POISON" , -"NIX_SND_STATUS_HDR_ERR" , -"NIX_SND_STATUS_EXT_ERR" , -"NIX_SND_STATUS_JUMP_FAULT" , -"NIX_SND_STATUS_JUMP_POISON" , -"NIX_SND_STATUS_CRC_ERR" , -"NIX_SND_STATUS_IMM_ERR" , -"NIX_SND_STATUS_SG_ERR" , -"NIX_SND_STATUS_MEM_ERR" , -"NIX_SND_STATUS_INVALID_SUBDC" , -"NIX_SND_STATUS_SUBDC_ORDER_ERR" , -"NIX_SND_STATUS_DATA_FAULT" , -"NIX_SND_STATUS_DATA_POISON" , -"NIX_SND_STATUS_NPC_DROP_ACTION" , -"NIX_SND_STATUS_LOCK_VIOL" , -"NIX_SND_STATUS_NPC_UCAST_CHAN_ERR" , -"NIX_SND_STATUS_NPC_MCAST_CHAN_ERR" , -"NIX_SND_STATUS_NPC_MCAST_ABORT" , -"NIX_SND_STATUS_NPC_VTAG_PTR_ERR" , -"NIX_SND_STATUS_NPC_VTAG_SIZE_ERR" , -"NIX_SND_STATUS_SEND_STATS_ERR" , + [NIX_SND_STATUS_GOOD ] ="NIX_SND_STATUS_GOOD" , + [NIX_SND_STATUS_SQ_CTX_FAULT ] ="NIX_SND_STATUS_SQ_CTX_FAULT" , + [NIX_SND_STATUS_SQ_CTX_POISON ] ="NIX_SND_STATUS_SQ_CTX_POISON" , + [NIX_SND_STATUS_SQB_FAULT ] ="NIX_SND_STATUS_SQB_FAULT" , + [NIX_SND_STATUS_SQB_POISON ] ="NIX_SND_STATUS_SQB_POISON" , + [NIX_SND_STATUS_HDR_ERR ] ="NIX_SND_STATUS_HDR_ERR" , + [NIX_SND_STATUS_EXT_ERR ] ="NIX_SND_STATUS_EXT_ERR" , + [NIX_SND_STATUS_JUMP_FAULT ] ="NIX_SND_STATUS_JUMP_FAULT" , + [NIX_SND_STATUS_JUMP_POISON ] ="NIX_SND_STATUS_JUMP_POISON" , + [NIX_SND_STATUS_CRC_ERR ] ="NIX_SND_STATUS_CRC_ERR" , + [NIX_SND_STATUS_IMM_ERR ] ="NIX_SND_STATUS_IMM_ERR" , + [NIX_SND_STATUS_SG_ERR ] ="NIX_SND_STATUS_SG_ERR" , + [NIX_SND_STATUS_MEM_ERR ] ="NIX_SND_STATUS_MEM_ERR" , + [NIX_SND_STATUS_INVALID_SUBDC ] ="NIX_SND_STATUS_INVALID_SUBDC" , + [NIX_SND_STATUS_SUBDC_ORDER_ERR ] ="NIX_SND_STATUS_SUBDC_ORDER_ERR" , + [NIX_SND_STATUS_DATA_FAULT ] ="NIX_SND_STATUS_DATA_FAULT" , + [NIX_SND_STATUS_DATA_POISON ] ="NIX_SND_STATUS_DATA_POISON" , + [NIX_SND_STATUS_NPC_DROP_ACTION ] ="NIX_SND_STATUS_NPC_DROP_ACTION" , + [NIX_SND_STATUS_LOCK_VIOL ] ="NIX_SND_STATUS_LOCK_VIOL" , + [NIX_SND_STATUS_NPC_UCAST_CHAN_ERR ] ="NIX_SND_STAT_NPC_UCAST_CHAN_ERR" , + [NIX_SND_STATUS_NPC_MCAST_CHAN_ERR ] ="NIX_SND_STAT_NPC_MCAST_CHAN_ERR" , + [NIX_SND_STATUS_NPC_MCAST_ABORT ] ="NIX_SND_STATUS_NPC_MCAST_ABORT" , + [NIX_SND_STATUS_NPC_VTAG_PTR_ERR ] ="NIX_SND_STATUS_NPC_VTAG_PTR_ERR" , + [NIX_SND_STATUS_NPC_VTAG_SIZE_ERR ] ="NIX_SND_STATUS_NPC_VTAG_SIZE_ERR" , + [NIX_SND_STATUS_SEND_MEM_FAULT ] ="NIX_SND_STATUS_SEND_MEM_FAULT" , + [NIX_SND_STATUS_SEND_STATS_ERR ] ="NIX_SND_STATUS_SEND_STATS_ERR" , };static irqreturn_t otx2_q_intr_handler (int irq,void *data)
@@ -1238,14 +1239,16 @@ static irqreturn_t otx2_q_intr_handler(int irq, void *data)continue ;if (val &BIT_ULL (42 )) { -netdev_err (pf->netdev,"CQ%lld: error reading NIX_LF_CQ_OP_INT, NIX_LF_ERR_INT 0x%llx\n" , +netdev_err (pf->netdev, +"CQ%lld: error reading NIX_LF_CQ_OP_INT, NIX_LF_ERR_INT 0x%llx\n" , qidx,otx2_read64 (pf,NIX_LF_ERR_INT )); }else {if (val &BIT_ULL (NIX_CQERRINT_DOOR_ERR ))netdev_err (pf->netdev,"CQ%lld: Doorbell error" , qidx);if (val &BIT_ULL (NIX_CQERRINT_CQE_FAULT )) -netdev_err (pf->netdev,"CQ%lld: Memory fault on CQE write to LLC/DRAM" , +netdev_err (pf->netdev, +"CQ%lld: Memory fault on CQE write to LLC/DRAM" , qidx); }
@@ -1272,7 +1275,8 @@ static irqreturn_t otx2_q_intr_handler(int irq, void *data) (val & NIX_SQINT_BITS));if (val &BIT_ULL (42 )) { -netdev_err (pf->netdev,"SQ%lld: error reading NIX_LF_SQ_OP_INT, NIX_LF_ERR_INT 0x%llx\n" , +netdev_err (pf->netdev, +"SQ%lld: error reading NIX_LF_SQ_OP_INT, NIX_LF_ERR_INT 0x%llx\n" , qidx,otx2_read64 (pf,NIX_LF_ERR_INT )); goto done; }
@@ -1282,8 +1286,11 @@ static irqreturn_t otx2_q_intr_handler(int irq, void *data) goto chk_mnq_err_dbg; sq_op_err_code =FIELD_GET (GENMASK (7 ,0 ), sq_op_err_dbg); -netdev_err (pf->netdev,"SQ%lld: NIX_LF_SQ_OP_ERR_DBG(%llx) err=%s\n" , - qidx, sq_op_err_dbg, nix_sqoperr_e_str[sq_op_err_code]); +netdev_err (pf->netdev, +"SQ%lld: NIX_LF_SQ_OP_ERR_DBG(0x%llx) err=%s(%#x)\n" , + qidx, sq_op_err_dbg, + nix_sqoperr_e_str[sq_op_err_code], + sq_op_err_code);otx2_write64 (pf,NIX_LF_SQ_OP_ERR_DBG ,BIT_ULL (44 ));
@@ -1300,16 +1307,21 @@ static irqreturn_t otx2_q_intr_handler(int irq, void *data) goto chk_snd_err_dbg; mnq_err_code =FIELD_GET (GENMASK (7 ,0 ), mnq_err_dbg); -netdev_err (pf->netdev,"SQ%lld: NIX_LF_MNQ_ERR_DBG(%llx) err=%s\n" , - qidx, mnq_err_dbg, nix_mnqerr_e_str[mnq_err_code]); +netdev_err (pf->netdev, +"SQ%lld: NIX_LF_MNQ_ERR_DBG(0x%llx) err=%s(%#x)\n" , + qidx, mnq_err_dbg, nix_mnqerr_e_str[mnq_err_code], + mnq_err_code);otx2_write64 (pf,NIX_LF_MNQ_ERR_DBG ,BIT_ULL (44 )); chk_snd_err_dbg: snd_err_dbg =otx2_read64 (pf,NIX_LF_SEND_ERR_DBG );if (snd_err_dbg &BIT (44 )) { snd_err_code =FIELD_GET (GENMASK (7 ,0 ), snd_err_dbg); -netdev_err (pf->netdev,"SQ%lld: NIX_LF_SND_ERR_DBG:0x%llx err=%s\n" , - qidx, snd_err_dbg, nix_snd_status_e_str[snd_err_code]); +netdev_err (pf->netdev, +"SQ%lld: NIX_LF_SND_ERR_DBG:0x%llx err=%s(%#x)\n" , + qidx, snd_err_dbg, + nix_snd_status_e_str[snd_err_code], + snd_err_code);otx2_write64 (pf,NIX_LF_SEND_ERR_DBG ,BIT_ULL (44 )); }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 549/603 net: page_pool: add missing free_percpu when page_pool_init fail
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jian Shen <[email protected]>
[ Upstream commit 8ffbd1669ed1d58939d6e878dffaa2f60bf961a4 ]
When ptr_ring_init() returns failure in page_pool_init(), free_percpu() is not called to free pool->recycle_stats, which may cause memory leak.
--- net/core/page_pool.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
net/core/page_pool.c +5 -1
@@ -221,8 +221,12 @@ static int page_pool_init(struct page_pool *pool,return -ENOMEM ;#endif -if (ptr_ring_init (&pool->ring, ring_qsize,GFP_KERNEL ) <0 ) +if (ptr_ring_init (&pool->ring, ring_qsize,GFP_KERNEL ) <0 ) { +#ifdef CONFIG_PAGE_POOL_STATS +free_percpu (pool->recycle_stats); +#endif return -ENOMEM ; + }atomic_set (&pool->pages_state_release_cnt,0 );
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 550/603 dccp: Call security_inet_conn_request() after setting IPv4 addresses.
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kuniyuki Iwashima <[email protected]>
[ Upstream commit fa2df45af13091f76b89adb84a28f13818d5d631 ]
Initially, commit 4237c75c0a35 ("[MLSXFRM]: Auto-labeling of child sockets") introduced security_inet_conn_request() in some functions where reqsk is allocated. The hook is added just after the allocation, so reqsk's IPv4 remote address was not initialised then.
However, SELinux/Smack started to read it in netlbl_req_setattr() after the cited commits.
This bug was partially fixed by commit 284904aa7946 ("lsm: Relocate the IPv4 security_inet_conn_request() hooks").
This patch fixes the last bug in DCCPv4.
--- net/dccp/ipv4.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
net/dccp/ipv4.c +3 -3
@@ -629,9 +629,6 @@ int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb)if (dccp_parse_options (sk, dreq, skb)) goto drop_and_free; -if (security_inet_conn_request (sk, skb, req)) - goto drop_and_free; - ireq =inet_rsk (req);sk_rcv_saddr_set (req_to_sk (req),ip_hdr (skb)->daddr);sk_daddr_set (req_to_sk (req),ip_hdr (skb)->saddr);
@@ -639,6 +636,9 @@ int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb) ireq->ireq_family =AF_INET ; ireq->ir_iif =READ_ONCE (sk->sk_bound_dev_if); +if (security_inet_conn_request (sk, skb, req)) + goto drop_and_free; +/* * Step 3: Process LISTEN state *
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 551/603 dccp/tcp: Call security_inet_conn_request() after setting IPv6 addresses.
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kuniyuki Iwashima <[email protected]>
[ Upstream commit 23be1e0e2a83a8543214d2599a31d9a2185a796b ]
Initially, commit 4237c75c0a35 ("[MLSXFRM]: Auto-labeling of child sockets") introduced security_inet_conn_request() in some functions where reqsk is allocated. The hook is added just after the allocation, so reqsk's IPv6 remote address was not initialised then.
However, SELinux/Smack started to read it in netlbl_req_setattr() after commit e1adea927080 ("calipso: Allow request sockets to be relabelled by the lsm.").
Commit 284904aa7946 ("lsm: Relocate the IPv4 security_inet_conn_request() hooks") fixed that kind of issue only in TCPv4 because IPv6 labeling was not supported at that time. Finally, the same issue was introduced again in IPv6.
Let's apply the same fix on DCCPv6 and TCPv6.
--- net/dccp/ipv6.c | 6 +++--- net/ipv6/syncookies.c | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-)
net/dccp/ipv6.c +3 -3
@@ -360,15 +360,15 @@ static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb)if (dccp_parse_options (sk, dreq, skb)) goto drop_and_free; -if (security_inet_conn_request (sk, skb, req)) - goto drop_and_free; - ireq =inet_rsk (req); ireq->ir_v6_rmt_addr =ipv6_hdr (skb)->saddr; ireq->ir_v6_loc_addr =ipv6_hdr (skb)->daddr; ireq->ireq_family =AF_INET6 ; ireq->ir_mark =inet_request_mark (sk, skb); +if (security_inet_conn_request (sk, skb, req)) + goto drop_and_free; +if (ipv6_opt_accepted (sk, skb,IP6CB (skb)) || np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo || np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim) {
net/ipv6/syncookies.c +4 -3
@@ -180,14 +180,15 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb) treq =tcp_rsk (req); treq->tfo_listener = false; -if (security_inet_conn_request (sk, skb, req)) - goto out_free; - req->mss = mss; ireq->ir_rmt_port = th->source; ireq->ir_num =ntohs (th->dest); ireq->ir_v6_rmt_addr =ipv6_hdr (skb)->saddr; ireq->ir_v6_loc_addr =ipv6_hdr (skb)->daddr; + +if (security_inet_conn_request (sk, skb, req)) + goto out_free; +if (ipv6_opt_accepted (sk, skb, &TCP_SKB_CB (skb)->header.h6) || np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo || np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim) {
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 552/603 net: r8169: Disable multicast filter for RTL8168H and RTL8107E
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Patrick Thompson <[email protected]>
[ Upstream commit efa5f1311c4998e9e6317c52bc5ee93b3a0f36df ]
RTL8168H and RTL8107E ethernet adapters erroneously filter unicast eapol packets unless allmulti is enabled. These devices correspond to RTL_GIGA_MAC_VER_46 and VER_48. Add an exception for VER_46 and VER_48 in the same way that VER_35 has an exception.
--- drivers/net/ethernet/realtek/r8169_main.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/net/ethernet/realtek/r8169_main.c +3 -1
@@ -2584,7 +2584,9 @@ static void rtl_set_rx_mode(struct net_device *dev) rx_mode |= AcceptAllPhys; }else if (netdev_mc_count (dev) >MC_FILTER_LIMIT || dev->flags &IFF_ALLMULTI || - tp->mac_version ==RTL_GIGA_MAC_VER_35 ) { + tp->mac_version ==RTL_GIGA_MAC_VER_35 || + tp->mac_version ==RTL_GIGA_MAC_VER_46 || + tp->mac_version ==RTL_GIGA_MAC_VER_48 ) {/* accept all multicasts */ }else if (netdev_mc_empty (dev)) { rx_mode &= ~AcceptMulticast;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 553/603 Fix termination state for idr_for_each_entry_ul()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: NeilBrown <[email protected]>
[ Upstream commit e8ae8ad479e2d037daa33756e5e72850a7bd37a9 ]
The comment for idr_for_each_entry_ul() states
after normal termination @entry is left with the value NULL
This is not correct in the case where UINT_MAX has an entry in the idr. In that case @entry will be non-NULL after termination.
No current code depends on the documentation being correct, but to save future code we should fix it.
Also fix idr_for_each_entry_continue_ul(). While this is not documented as leaving @entry as NULL, the mellanox driver appears to depend on it doing so. So make that explicit in the documentation as well as in the code.
--- include/linux/idr.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
include/linux/idr.h +4 -2
@@ -200,7 +200,7 @@ static inline void idr_preload_end(void)*/ #define idr_for_each_entry_ul (idr, entry, tmp, id) \ for (tmp = 0, id = 0; \ - tmp <= id && ((entry) = idr_get_next_ul(idr, &(id))) != NULL; \ + ((entry) = tmp <= id ? idr_get_next_ul(idr, &(id)) : NULL) != NULL; \ tmp = id, ++id)/**
@@ -224,10 +224,12 @@ static inline void idr_preload_end(void)* @id: Entry ID. * * Continue to iterate over entries, continuing after the current position. +* After normal termination @entry is left with the value NULL. This +* is convenient for a "not found" value. */ #define idr_for_each_entry_continue_ul (idr, entry, tmp, id) \ for (tmp = id; \ - tmp <= id && ((entry) = idr_get_next_ul(idr, &(id))) != NULL; \ + ((entry) = tmp <= id ? idr_get_next_ul(idr, &(id)) : NULL) != NULL; \ tmp = id, ++id)/*
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 554/603 net: stmmac: xgmac: Enable support for multiple Flexible PPS outputs
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Furong Xu <[email protected]>
[ Upstream commit db456d90a4c1b43b6251fa4348c8adc59b583274 ]
Quoted 1 line
From XGMAC Core 3.20 and later, each Flexible PPS has individual PPSEN bit
to select Fixed mode or Flexible mode. The PPSEN must be set, or it stays in Fixed PPS mode by default.
XGMAC Core prior 3.20, only PPSEN0(bit 4) is writable. PPSEN{1,2,3} are read-only reserved, and they are already in Flexible mode by default, our new code always set PPSEN{1,2,3} do not make things worse ;-)
--- drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h | 2 +- .../net/ethernet/stmicro/stmmac/dwxgmac2_core.c | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-)
drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h +1 -1
@@ -259,7 +259,7 @@ ((val) << XGMAC_PPS_MINIDX(x))#define XGMAC_PPSCMD_START 0x2#define XGMAC_PPSCMD_STOP 0x5 -#define XGMAC_PPSEN0 BIT(4) +#define XGMAC_PPSENx (x) BIT(4 + (x) * 8)#define XGMAC_PPSx_TARGET_TIME_SEC (x) (0x00000d80 + (x) * 0x10)#define XGMAC_PPSx_TARGET_TIME_NSEC (x) (0x00000d84 + (x) * 0x10)#define XGMAC_TRGTBUSY0 BIT(31)
drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c +13 -1
@@ -1178,7 +1178,19 @@ static int dwxgmac2_flex_pps_config(void __iomem *ioaddr, int index, val |=XGMAC_PPSCMDx (index,XGMAC_PPSCMD_START ); val |=XGMAC_TRGTMODSELx (index,XGMAC_PPSCMD_START ); - val |=XGMAC_PPSEN0 ; + +/* XGMAC Core has 4 PPS outputs at most. +* +* Prior XGMAC Core 3.20, Fixed mode or Flexible mode are selectable for +* PPS0 only via PPSEN0. PPS{1,2,3} are in Flexible mode by default, +* and can not be switched to Fixed mode, since PPSEN{1,2,3} are +* read-only reserved to 0. +* But we always set PPSEN{1,2,3} do not make things worse ;-) +* +* From XGMAC Core 3.20 and later, PPSEN{0,1,2,3} are writable and must +* be set, or the PPS outputs stay in Fixed PPS mode by default. +*/ + val |=XGMAC_PPSENx (index);writel (cfg->start.tv_sec, ioaddr +XGMAC_PPSx_TARGET_TIME_SEC (index));
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 555/603 selftests: pmtu.sh: fix result checking
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hangbin Liu <[email protected]>
[ Upstream commit 63e201916b27260218e528a2f8758be47f99bbf4 ]
In the PMTU test, when all previous tests are skipped and the new test passes, the exit code is set to 0. However, the current check mistakenly treats this as an assignment, causing the check to pass every time.
Consequently, regardless of how many tests have failed, if the latest test passes, the PMTU test will report a pass.
--- tools/testing/selftests/net/pmtu.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/testing/selftests/net/pmtu.sh +1 -1
@@ -2048,7 +2048,7 @@ run_test() { case $ret in 0) all_skipped=false - [ $exitcode=$ksft_skip ] && exitcode=0 + [ $exitcode -eq $ksft_skip ] && exitcode=0 ;; $ksft_skip) [ $all_skipped = true ] && exitcode=$ksft_skip
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 556/603 octeontx2-pf: Free pending and dropped SQEs
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Geetha sowjanya <[email protected]>
[ Upstream commit 3423ca23e08bf285a324237abe88e7e7d9becfe6 ]
On interface down, the pending SQEs in the NIX get dropped or drained out during SMQ flush. But skb's pointed by these SQEs never get free or updated to the stack as respective CQE never get added.
This patch fixes the issue by freeing all valid skb's in SQ SG list.
--- .../marvell/octeontx2/nic/otx2_common.c | 15 +++---- .../marvell/octeontx2/nic/otx2_common.h | 1 + .../ethernet/marvell/octeontx2/nic/otx2_pf.c | 1 + .../marvell/octeontx2/nic/otx2_txrx.c | 42 +++++++++++++++++++ 4 files changed, 49 insertions(+), 10 deletions(-)
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c +5 -10
@@ -818,7 +818,6 @@ void otx2_sqb_flush(struct otx2_nic *pfvf)int qidx, sqe_tail, sqe_head;struct otx2_snd_queue *sq;u64 incr, *ptr, val; -int timeout =1000 ; ptr = (u64 *)otx2_get_regaddr (pfvf,NIX_LF_SQ_OP_STATUS );for (qidx =0 ; qidx <otx2_get_total_tx_queues (pfvf); qidx++) {
@@ -827,15 +826,11 @@ void otx2_sqb_flush(struct otx2_nic *pfvf)continue ; incr = (u64 )qidx <<32 ; -while (timeout) { - val =otx2_atomic64_add (incr, ptr); - sqe_head = (val >>20 ) &0x3F ; - sqe_tail = (val >>28 ) &0x3F ; -if (sqe_head == sqe_tail) -break ; -usleep_range (1 ,3 ); - timeout--; - } + val =otx2_atomic64_add (incr, ptr); + sqe_head = (val >>20 ) &0x3F ; + sqe_tail = (val >>28 ) &0x3F ; +if (sqe_head != sqe_tail) +usleep_range (50 ,60 ); } }
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h +1 -0
@@ -977,6 +977,7 @@ int otx2_txschq_config(struct otx2_nic *pfvf, int lvl, int prio, bool pfc_en);int otx2_txsch_alloc (struct otx2_nic *pfvf);void otx2_txschq_stop (struct otx2_nic *pfvf);void otx2_txschq_free_one (struct otx2_nic *pfvf,u16 lvl,u16 schq); +void otx2_free_pending_sqe (struct otx2_nic *pfvf);void otx2_sqb_flush (struct otx2_nic *pfvf);int otx2_alloc_rbuf (struct otx2_nic *pfvf,struct otx2_pool *pool,dma_addr_t *dma);
drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c +1 -0
@@ -1601,6 +1601,7 @@ static void otx2_free_hw_resources(struct otx2_nic *pf)else otx2_cleanup_tx_cqes (pf, cq); } +otx2_free_pending_sqe (pf);otx2_free_sq_res (pf);
drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c +42 -0
69 lines not on this page · raw message
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 557/603 net/smc: fix dangling sock under state SMC_APPFINCLOSEWAIT
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: D. Wythe <[email protected]>
[ Upstream commit 5211c9729484c923f8d2e06bd29f9322cc42bb8f ]
Considering scenario:
smc_cdc_rx_handler__smc_release
sock_set_flagsmc_close_active()sock_set_flag
__set_bit(DEAD) __set_bit(DONE)
Dues to __set_bit is not atomic, the DEAD or DONE might be lost. if the DEAD flag lost, the state SMC_CLOSED will be never be reached in smc_close_passive_work:
if (sock_flag(sk, SOCK_DEAD) &&
smc_close_sent_any_close(conn)) {
sk->sk_state = SMC_CLOSED;
} else {
/* just shutdown, but not yet closed locally */
sk->sk_state = SMC_APPFINCLOSEWAIT;
}Replace sock_set_flags or __set_bit to set_bit will fix this problem. Since set_bit is atomic.
--- net/smc/af_smc.c | 4 ++-- net/smc/smc.h | 5 +++++ net/smc/smc_cdc.c | 2 +- net/smc/smc_close.c | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-)
net/smc/af_smc.c +2 -2
@@ -275,7 +275,7 @@ static int __smc_release(struct smc_sock *smc)if (!smc->use_fallback) { rc =smc_close_active (smc); -sock_set_flag (sk,SOCK_DEAD ); +smc_sock_set_flag (sk,SOCK_DEAD ); sk->sk_shutdown |=SHUTDOWN_MASK ; }else {if (sk->sk_state !=SMC_CLOSED ) {
@@ -1743,7 +1743,7 @@ static int smc_clcsock_accept(struct smc_sock *lsmc, struct smc_sock **new_smc)if (new_clcsock)sock_release (new_clcsock); new_sk->sk_state =SMC_CLOSED ; -sock_set_flag (new_sk,SOCK_DEAD ); +smc_sock_set_flag (new_sk,SOCK_DEAD );sock_put (new_sk);/* final */ *new_smc =NULL ; goto out;
net/smc/smc.h +5 -0
@@ -377,4 +377,9 @@ int smc_nl_dump_hs_limitation(struct sk_buff *skb, struct netlink_callback *cb);int smc_nl_enable_hs_limitation (struct sk_buff *skb,struct genl_info *info);int smc_nl_disable_hs_limitation (struct sk_buff *skb,struct genl_info *info); +static inline void smc_sock_set_flag (struct sock *sk,enum sock_flags flag) +{ +set_bit (flag, &sk->sk_flags); +} +#endif /* __SMC_H */
net/smc/smc_cdc.c +1 -1
@@ -385,7 +385,7 @@ static void smc_cdc_msg_recv_action(struct smc_sock *smc, smc->sk.sk_shutdown |=RCV_SHUTDOWN ;if (smc->clcsock && smc->clcsock->sk) smc->clcsock->sk->sk_shutdown |=RCV_SHUTDOWN ; -sock_set_flag (&smc->sk,SOCK_DONE ); +smc_sock_set_flag (&smc->sk,SOCK_DONE );sock_hold (&smc->sk);/* sock_put in close_work */ if (!queue_work (smc_close_wq, &conn->close_work))sock_put (&smc->sk);
net/smc/smc_close.c +1 -1
@@ -173,7 +173,7 @@ void smc_close_active_abort(struct smc_sock *smc)break ; } -sock_set_flag (sk,SOCK_DEAD ); +smc_sock_set_flag (sk,SOCK_DEAD ); sk->sk_state_change (sk);if (release_clcsock) {
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 558/603 net/smc: allow cdc msg send rather than drop it with NULL sndbuf_desc
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: D. Wythe <[email protected]>
[ Upstream commit c5bf605ba4f9d6fbbb120595ab95002f4716edcb ]
This patch re-fix the issues mentioned by commit 22a825c541d7 ("net/smc: fix NULL sndbuf_desc in smc_cdc_tx_handler()").
Blocking sending message do solve the issues though, but it also prevents the peer to receive the final message. Besides, in logic, whether the sndbuf_desc is NULL or not have no impact on the processing of cdc message sending.
Hence that, this patch allows the cdc message sending but to check the sndbuf_desc with care in smc_cdc_tx_handler().
--- net/smc/smc_cdc.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)
net/smc/smc_cdc.c +4 -5
@@ -28,13 +28,15 @@ static void smc_cdc_tx_handler(struct smc_wr_tx_pend_priv *pnd_snd, {struct smc_cdc_tx_pend *cdcpend = (struct smc_cdc_tx_pend *)pnd_snd;struct smc_connection *conn = cdcpend->conn; +struct smc_buf_desc *sndbuf_desc;struct smc_sock *smc;int diff; + sndbuf_desc = conn->sndbuf_desc; smc = container_of(conn, struct smc_sock, conn);bh_lock_sock (&smc->sk); -if (!wc_status) { - diff =smc_curs_diff (cdcpend->conn->sndbuf_desc->len, +if (!wc_status && sndbuf_desc) { + diff =smc_curs_diff (sndbuf_desc->len, &cdcpend->conn->tx_curs_fin, &cdcpend->cursor);/* sndbuf_space is decreased in smc_sendmsg */
@@ -114,9 +116,6 @@ int smc_cdc_msg_send(struct smc_connection *conn,union smc_host_cursor cfed;int rc; -if (unlikely (!READ_ONCE (conn->sndbuf_desc))) -return -ENOBUFS ; -smc_cdc_add_pending_send (conn, pend); conn->tx_cdc_seq++;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 559/603 net/smc: put sk reference if close work was canceled
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: D. Wythe <[email protected]>
[ Upstream commit aa96fbd6d78d9770323b21e2c92bd38821be8852 ]
Note that we always hold a reference to sock when attempting to submit close_work. Therefore, if we have successfully canceled close_work from pending, we MUST release that reference to avoid potential leaks.
--- net/smc/smc_close.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
net/smc/smc_close.c +2 -1
@@ -116,7 +116,8 @@ static void smc_close_cancel_work(struct smc_sock *smc)struct sock *sk = &smc->sk;release_sock (sk); -cancel_work_sync (&smc->conn.close_work); +if (cancel_work_sync (&smc->conn.close_work)) +sock_put (sk);cancel_delayed_work_sync (&smc->conn.tx_work);lock_sock (sk); }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 560/603 nvme: fix error-handling for io_uring nvme-passthrough
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Anuj Gupta <[email protected]>
[ Upstream commit 1147dd0503564fa0e03489a039f9e0c748a03db4 ]
Driver may return an error before submitting the command to the device. Ensure that such error is propagated up.
--- drivers/nvme/host/ioctl.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/nvme/host/ioctl.c +5 -2
@@ -510,10 +510,13 @@ static enum rq_end_io_ret nvme_uring_cmd_end_io(struct request *req,struct nvme_uring_cmd_pdu *pdu =nvme_uring_cmd_pdu (ioucmd); req->bio = pdu->bio; -if (nvme_req (req)->flags &NVME_REQ_CANCELLED ) +if (nvme_req (req)->flags &NVME_REQ_CANCELLED ) { pdu->nvme_status = -EINTR ; -else + }else { pdu->nvme_status =nvme_req (req)->status; +if (!pdu->nvme_status) + pdu->nvme_status =blk_status_to_errno (err); + } pdu->u.result =le64_to_cpu (nvme_req (req)->result.u64);/*
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 561/603 riscv: boot: Fix creation of loader.bin
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Geert Uytterhoeven <[email protected]>
[ Upstream commit 57a4542cb7c9baa1509c3366b57a08d75b212ead ]
When flashing loader.bin for K210 using kflash:
[ERROR] This is an ELF file and cannot be programmed to flash directly: arch/riscv/boot/loader.bin
Before, loader.bin relied on "OBJCOPYFLAGS := -O binary" in the main RISC-V Makefile to create a boot image with the right format. With this removed, the image is now created in the wrong (ELF) format.
Fix this by adding an explicit rule.
--- arch/riscv/boot/Makefile | 1 + 1 file changed, 1 insertion(+)
arch/riscv/boot/Makefile +1 -0
@@ -17,6 +17,7 @@ KCOV_INSTRUMENT := n OBJCOPYFLAGS_Image :=-O binary -R .note -R .note.gnu.build-id -R .comment -S +OBJCOPYFLAGS_loader.bin :=-O binary OBJCOPYFLAGS_xipImage :=-O binary -R .note -R .note.gnu.build-id -R .comment -S targets := Image Image.* loader loader.o loader.lds loader.bin
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 562/603 ice: Fix SRIOV LAG disable on non-compliant aggregate
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dave Ertman <[email protected]>
[ Upstream commit 3e39da4fa16c9c09207d98b8a86a6f6436b531c9 ]
If an attribute of an aggregate interface disqualifies it from supporting SRIOV, the driver will unwind the SRIOV support. Currently the driver is clearing the feature bit for all interfaces in the aggregate, but this is not allowing the other interfaces to unwind successfully on driver unload.
Only clear the feature bit for the interface that is currently unwinding.
--- drivers/net/ethernet/intel/ice/ice_lag.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-)
drivers/net/ethernet/intel/ice/ice_lag.c +3 -9
@@ -1529,18 +1529,12 @@ static void ice_lag_chk_disabled_bond(struct ice_lag *lag, void *ptr)*/ static void ice_lag_disable_sriov_bond (struct ice_lag *lag) { -struct ice_lag_netdev_list *entry;struct ice_netdev_priv *np; -struct net_device *netdev;struct ice_pf *pf; -list_for_each_entry (entry, lag->netdev_head, node) { - netdev = entry->netdev; - np =netdev_priv (netdev); - pf = np->vsi->back; - -ice_clear_feature_support (pf,ICE_F_SRIOV_LAG ); - } + np =netdev_priv (lag->netdev); + pf = np->vsi->back; +ice_clear_feature_support (pf,ICE_F_SRIOV_LAG ); }/**
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 563/603 ice: lag: in RCU, use atomic allocation
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michal Schmidt <[email protected]>
[ Upstream commit e1db8c2a01d7e12bd566106fbeefa3c5cccd2003 ]
Sleeping is not allowed in RCU read-side critical sections. Use atomic allocations under rcu_read_lock.
--- drivers/net/ethernet/intel/ice/ice_lag.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/net/ethernet/intel/ice/ice_lag.c +3 -3
@@ -595,7 +595,7 @@ void ice_lag_move_new_vf_nodes(struct ice_vf *vf)INIT_LIST_HEAD (&ndlist.node);rcu_read_lock ();for_each_netdev_in_bond_rcu (lag->upper_netdev, tmp_nd) { - nl =kzalloc (sizeof (*nl),GFP_KERNEL ); + nl =kzalloc (sizeof (*nl),GFP_ATOMIC );if (!nl)break ;
@@ -1666,7 +1666,7 @@ ice_lag_event_handler(struct notifier_block *notif_blk, unsigned long event,rcu_read_lock ();for_each_netdev_in_bond_rcu (upper_netdev, tmp_nd) { - nd_list =kzalloc (sizeof (*nd_list),GFP_KERNEL ); + nd_list =kzalloc (sizeof (*nd_list),GFP_ATOMIC );if (!nd_list)break ;
@@ -2040,7 +2040,7 @@ void ice_lag_rebuild(struct ice_pf *pf)INIT_LIST_HEAD (&ndlist.node);rcu_read_lock ();for_each_netdev_in_bond_rcu (lag->upper_netdev, tmp_nd) { - nl =kzalloc (sizeof (*nl),GFP_KERNEL ); + nl =kzalloc (sizeof (*nl),GFP_ATOMIC );if (!nl)break ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 564/603 ice: Fix VF-VF filter rules in switchdev mode
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Aniruddha Paul <[email protected]>
[ Upstream commit 8b3c8c55ccbc02920b0ae6601c66df24f0d833bd ]
Any packet leaving VSI i.e VF's VSI is considered as egress traffic by HW, thus failing to match the added rule.
Mark the direction for redirect rules as below:
1. VF-VF - Egress
2. Uplink-VF - Ingress
3. VF-Uplink - Egress
4. Link_Partner-Uplink - Ingress
5. Link_Partner-VF - Ingress
--- drivers/net/ethernet/intel/ice/ice_tc_lib.c | 90 ++++++++++++++------- 1 file changed, 62 insertions(+), 28 deletions(-)
drivers/net/ethernet/intel/ice/ice_tc_lib.c +62 -28
@@ -630,32 +630,61 @@ bool ice_is_tunnel_supported(struct net_device *dev)return ice_tc_tun_get_type (dev) !=TNL_LAST ; } -static int -ice_eswitch_tc_parse_action (struct ice_tc_flower_fltr *fltr, -struct flow_action_entry *act) +static bool ice_tc_is_dev_uplink (struct net_device *dev) +{ +return netif_is_ice (dev) ||ice_is_tunnel_supported (dev); +} + +static int ice_tc_setup_redirect_action (struct net_device *filter_dev, +struct ice_tc_flower_fltr *fltr, +struct net_device *target_dev) {struct ice_repr *repr; + fltr->action.fltr_act =ICE_FWD_TO_VSI ; + +if (ice_is_port_repr_netdev (filter_dev) && +ice_is_port_repr_netdev (target_dev)) { + repr =ice_netdev_to_repr (target_dev); + + fltr->dest_vsi = repr->src_vsi; + fltr->direction =ICE_ESWITCH_FLTR_EGRESS ; + }else if (ice_is_port_repr_netdev (filter_dev) && +ice_tc_is_dev_uplink (target_dev)) { + repr =ice_netdev_to_repr (filter_dev); + + fltr->dest_vsi = repr->src_vsi->back->switchdev.uplink_vsi; + fltr->direction =ICE_ESWITCH_FLTR_EGRESS ; + }else if (ice_tc_is_dev_uplink (filter_dev) && +ice_is_port_repr_netdev (target_dev)) { + repr =ice_netdev_to_repr (target_dev); + + fltr->dest_vsi = repr->src_vsi; + fltr->direction =ICE_ESWITCH_FLTR_INGRESS ; + }else { +NL_SET_ERR_MSG_MOD (fltr->extack, +"Unsupported netdevice in switchdev mode" ); +return -EINVAL ; + } + +return 0 ; +} + +static int ice_eswitch_tc_parse_action (struct net_device *filter_dev, +struct ice_tc_flower_fltr *fltr, +struct flow_action_entry *act) +{ +int err; +switch (act->id) {case FLOW_ACTION_DROP : fltr->action.fltr_act =ICE_DROP_PACKET ;break ;case FLOW_ACTION_REDIRECT : - fltr->action.fltr_act =ICE_FWD_TO_VSI ; - -if (ice_is_port_repr_netdev (act->dev)) { - repr =ice_netdev_to_repr (act->dev); - - fltr->dest_vsi = repr->src_vsi; - fltr->direction =ICE_ESWITCH_FLTR_INGRESS ; - }else if (netif_is_ice (act->dev) || -ice_is_tunnel_supported (act->dev)) { - fltr->direction =ICE_ESWITCH_FLTR_EGRESS ; - }else { -NL_SET_ERR_MSG_MOD (fltr->extack,"Unsupported netdevice in switchdev mode" ); -return -EINVAL ; - } + err =ice_tc_setup_redirect_action (filter_dev, fltr, act->dev); +if (err) +return err;break ;
@@ -696,10 +725,6 @@ ice_eswitch_add_tc_fltr(struct ice_vsi *vsi, struct ice_tc_flower_fltr *fltr) goto exit; } -/* egress traffic is always redirect to uplink */ -if (fltr->direction ==ICE_ESWITCH_FLTR_EGRESS ) - fltr->dest_vsi = vsi->back->switchdev.uplink_vsi; - rule_info.sw_act.fltr_act = fltr->action.fltr_act;if (fltr->action.fltr_act !=ICE_DROP_PACKET ) rule_info.sw_act.vsi_handle = fltr->dest_vsi->idx;
@@ -713,13 +738,21 @@ ice_eswitch_add_tc_fltr(struct ice_vsi *vsi, struct ice_tc_flower_fltr *fltr) rule_info.flags_info.act_valid = true;if (fltr->direction ==ICE_ESWITCH_FLTR_INGRESS ) { +/* Uplink to VF */ rule_info.sw_act.flag |=ICE_FLTR_RX ; rule_info.sw_act.src = hw->pf_id; rule_info.flags_info.act =ICE_SINGLE_ACT_LB_ENABLE ; - }else { + }else if (fltr->direction ==ICE_ESWITCH_FLTR_EGRESS && + fltr->dest_vsi == vsi->back->switchdev.uplink_vsi) { +/* VF to Uplink */ rule_info.sw_act.flag |=ICE_FLTR_TX ; rule_info.sw_act.src = vsi->idx; rule_info.flags_info.act =ICE_SINGLE_ACT_LAN_ENABLE ; + }else { +/* VF to VF */ + rule_info.sw_act.flag |=ICE_FLTR_TX ; + rule_info.sw_act.src = vsi->idx; + rule_info.flags_info.act =ICE_SINGLE_ACT_LB_ENABLE ; }/* specify the cookie as filter_rule_id */
@@ -1745,16 +1778,17 @@ ice_tc_parse_action(struct ice_vsi *vsi, struct ice_tc_flower_fltr *fltr,/** * ice_parse_tc_flower_actions - Parse the actions for a TC filter +* @filter_dev: Pointer to device on which filter is being added * @vsi: Pointer to VSI * @cls_flower: Pointer to TC flower offload structure * @fltr: Pointer to TC flower filter structure * * Parse the actions for a TC filter */ -static int -ice_parse_tc_flower_actions (struct ice_vsi *vsi, -struct flow_cls_offload *cls_flower, -struct ice_tc_flower_fltr *fltr) +static int ice_parse_tc_flower_actions (struct net_device *filter_dev, +struct ice_vsi *vsi, +struct flow_cls_offload *cls_flower, +struct ice_tc_flower_fltr *fltr) {struct flow_rule *rule =flow_cls_offload_flow_rule (cls_flower);struct flow_action *flow_action = &rule->action;
@@ -1769,7 +1803,7 @@ ice_parse_tc_flower_actions(struct ice_vsi *vsi,flow_action_for_each (i, act, flow_action) {if (ice_is_eswitch_mode_switchdev (vsi->back)) - err =ice_eswitch_tc_parse_action (fltr, act); + err =ice_eswitch_tc_parse_action (filter_dev, fltr, act);else err =ice_tc_parse_action (vsi, fltr, act);if (err)
@@ -1856,7 +1890,7 @@ ice_add_tc_fltr(struct net_device *netdev, struct ice_vsi *vsi,if (err <0 ) goto err; - err =ice_parse_tc_flower_actions (vsi, f, fltr); + err =ice_parse_tc_flower_actions (netdev, vsi, f, fltr);if (err <0 ) goto err;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 565/603 ice: Fix VF-VF direction matching in drop rule in switchdev
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marcin Szycik <[email protected]>
[ Upstream commit 68c51db3a16d258e730dd1c04a1de2f7ab038ddf ]
When adding a drop rule on a VF, rule direction is not being set, which results in it always being set to ingress (ICE_ESWITCH_FLTR_INGRESS equals 0). Because of this, drop rules added on port representors don't match any packets.
To fix it, set rule direction in drop action to egress when netdev is a port representor, otherwise set it to ingress.
--- drivers/net/ethernet/intel/ice/ice_tc_lib.c | 24 ++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-)
drivers/net/ethernet/intel/ice/ice_tc_lib.c +23 -1
@@ -670,6 +670,25 @@ static int ice_tc_setup_redirect_action(struct net_device *filter_dev,return 0 ; } +static int +ice_tc_setup_drop_action (struct net_device *filter_dev, +struct ice_tc_flower_fltr *fltr) +{ + fltr->action.fltr_act =ICE_DROP_PACKET ; + +if (ice_is_port_repr_netdev (filter_dev)) { + fltr->direction =ICE_ESWITCH_FLTR_EGRESS ; + }else if (ice_tc_is_dev_uplink (filter_dev)) { + fltr->direction =ICE_ESWITCH_FLTR_INGRESS ; + }else { +NL_SET_ERR_MSG_MOD (fltr->extack, +"Unsupported netdevice in switchdev mode" ); +return -EINVAL ; + } + +return 0 ; +} +static int ice_eswitch_tc_parse_action (struct net_device *filter_dev,struct ice_tc_flower_fltr *fltr,struct flow_action_entry *act)
@@ -678,7 +697,10 @@ static int ice_eswitch_tc_parse_action(struct net_device *filter_dev,switch (act->id) {case FLOW_ACTION_DROP : - fltr->action.fltr_act =ICE_DROP_PACKET ; + err =ice_tc_setup_drop_action (filter_dev, fltr); +if (err) +return err; +break ;case FLOW_ACTION_REDIRECT :
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 566/603 tg3: power down device only on SYSTEM_POWER_OFF
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: George Shuklin <[email protected]>
[ Upstream commit 9fc3bc7643341dc5be7d269f3d3dbe441d8d7ac3 ]
Dell R650xs servers hangs on reboot if tg3 driver calls tg3_power_down.
This happens only if network adapters (BCM5720 for R650xs) were initialized using SNP (e.g. by booting ipxe.efi).
The actual problem is on Dell side, but this fix allows servers to come back alive after reboot.
--- drivers/net/ethernet/broadcom/tg3.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/net/ethernet/broadcom/tg3.c +2 -1
@@ -18078,7 +18078,8 @@ static void tg3_shutdown(struct pci_dev *pdev)if (netif_running (dev))dev_close (dev); -tg3_power_down (tp); +if (system_state ==SYSTEM_POWER_OFF ) +tg3_power_down (tp);rtnl_unlock ();
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 567/603 nbd: fix uaf in nbd_open
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Li Lingfeng <[email protected]>
[ Upstream commit 327462725b0f759f093788dfbcb2f1fd132f956b ]
Commit 4af5f2e03013 ("nbd: use blk_mq_alloc_disk and blk_cleanup_disk") cleans up disk by blk_cleanup_disk() and it won't set disk->private_data as NULL as before. UAF may be triggered in nbd_open() if someone tries to open nbd device right after nbd_put() since nbd has been free in nbd_dev_remove().
Fix this by implementing ->free_disk and free private data in it.
--- drivers/block/nbd.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)
drivers/block/nbd.c +9 -2
@@ -250,7 +250,6 @@ static void nbd_dev_remove(struct nbd_device *nbd)struct gendisk *disk = nbd->disk;del_gendisk (disk); -put_disk (disk);blk_mq_free_tag_set (&nbd->tag_set);/*
@@ -261,7 +260,7 @@ static void nbd_dev_remove(struct nbd_device *nbd)idr_remove (&nbd_index_idr, nbd->index);mutex_unlock (&nbd_index_mutex);destroy_workqueue (nbd->recv_workq); -kfree (nbd); +put_disk (disk); }static void nbd_dev_remove_work (struct work_struct *work)
@@ -1608,6 +1607,13 @@ static void nbd_release(struct gendisk *disk)nbd_put (nbd); } +static void nbd_free_disk (struct gendisk *disk) +{ +struct nbd_device *nbd = disk->private_data; + +kfree (nbd); +} +static const struct block_device_operations nbd_fops = { .owner =THIS_MODULE ,
@@ -1615,6 +1621,7 @@ static const struct block_device_operations nbd_fops = .release = nbd_release, .ioctl = nbd_ioctl, .compat_ioctl = nbd_ioctl, + .free_disk = nbd_free_disk, };#if IS_ENABLED (CONFIG_DEBUG_FS )
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 568/603 blk-core: use pr_warn_ratelimited() in bio_check_ro()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yu Kuai <[email protected]>
[ Upstream commit 1b0a151c10a6d823f033023b9fdd9af72a89591b ]
If one of the underlying disks of raid or dm is set to read-only, then each io will generate new log, which will cause message storm. This environment is indeed problematic, however we can't make sure our naive custormer won't do this, hence use pr_warn_ratelimited() to prevent message storm in this case.
--- block/blk-core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
block/blk-core.c +2 -2
@@ -501,8 +501,8 @@ static inline void bio_check_ro(struct bio *bio)if (op_is_write (bio_op (bio)) &&bdev_read_only (bio->bi_bdev)) {if (op_is_flush (bio->bi_opf) && !bio_sectors (bio))return ; -pr_warn ("Trying to write to read-only block-device %pg\n" , - bio->bi_bdev); +pr_warn_ratelimited ("Trying to write to read-only block-device %pg\n" , + bio->bi_bdev);/* Older lvm-tools actually trigger this */ } }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 569/603 vsock/virtio: remove socket from connected/bound list on shutdown
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Filippo Storniolo <[email protected]>
[ Upstream commit 3a5cc90a4d1756072619fe511d07621bdef7f120 ]
If the same remote peer, using the same port, tries to connect to a server on a listening port more than once, the server will reject the connection, causing a "connection reset by peer" error on the remote peer. This is due to the presence of a dangling socket from a previous connection in both the connected and bound socket lists.
The inconsistency of the above lists only occurs when the remote peer disconnects and the server remains active.
This bug does not occur when the server socket is closed:virtio_transport_release() will eventually schedule a call to virtio_transport_do_close() and the latter will remove the socket from the bound and connected socket lists and clear the sk_buff.
However, virtio_transport_do_close() will only perform the above actions if it has been scheduled, and this will not happen if the server is processing the shutdown message from a remote peer.
To fix this, introduce a call to vsock_remove_sock() when the server is handling a client disconnect.
This is to remove the socket from the bound and connected socket lists without clearing the sk_buff.
--- net/vmw_vsock/virtio_transport_common.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-)
net/vmw_vsock/virtio_transport_common.c +11 -5
@@ -1204,11 +1204,17 @@ virtio_transport_recv_connected(struct sock *sk, vsk->peer_shutdown |=RCV_SHUTDOWN ;if (le32_to_cpu (hdr->flags) &VIRTIO_VSOCK_SHUTDOWN_SEND ) vsk->peer_shutdown |=SEND_SHUTDOWN ; -if (vsk->peer_shutdown ==SHUTDOWN_MASK && -vsock_stream_has_data (vsk) <=0 && - !sock_flag (sk,SOCK_DONE )) { - (void )virtio_transport_reset (vsk,NULL ); -virtio_transport_do_close (vsk, true); +if (vsk->peer_shutdown ==SHUTDOWN_MASK ) { +if (vsock_stream_has_data (vsk) <=0 && !sock_flag (sk,SOCK_DONE )) { + (void )virtio_transport_reset (vsk,NULL ); +virtio_transport_do_close (vsk, true); + } +/* Remove this socket anyway because the remote peer sent +* the shutdown. This way a new connection will succeed +* if the remote peer uses the same source port, +* even if the old socket is still unreleased, but now disconnected. +*/ +vsock_remove_sock (vsk); }if (le32_to_cpu (virtio_vsock_hdr (skb)->flags)) sk->sk_state_change (sk);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 570/603 r8169: respect userspace disabling IFF_MULTICAST
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Heiner Kallweit <[email protected]>
[ Upstream commit 8999ce4cfc87e61b4143ec2e7b93d8e92e11fa7f ]
So far we ignore the setting of IFF_MULTICAST. Fix this and clear bit AcceptMulticast if IFF_MULTICAST isn't set.
Note: Based on the implementations I've seen it doesn't seem to be 100% clear what a driver is supposed to do if IFF_ALLMULTI is set but IFF_MULTICAST is not. This patch is based on the understanding that IFF_MULTICAST has precedence.
--- drivers/net/ethernet/realtek/r8169_main.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/ethernet/realtek/r8169_main.c +2 -0
@@ -2582,6 +2582,8 @@ static void rtl_set_rx_mode(struct net_device *dev)if (dev->flags &IFF_PROMISC ) { rx_mode |= AcceptAllPhys; + }else if (!(dev->flags &IFF_MULTICAST )) { + rx_mode &= ~AcceptMulticast; } else if (netdev_mc_count(dev) > MC_FILTER_LIMIT || dev->flags & IFF_ALLMULTI || tp->mac_version == RTL_GIGA_MAC_VER_35 ||
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 571/603 virtio/vsock: Fix uninit-value in virtio_transport_recv_pkt()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Shigeru Yoshida <[email protected]>
[ Upstream commit 34c4effacfc329aeca5635a69fd9e0f6c90b4101 ]
KMSAN reported the following uninit-value access issue:
=====================================================
BUG: KMSAN: uninit-value in virtio_transport_recv_pkt+0x1dfb/0x26a0 net/vmw_vsock/virtio_transport_common.c:1421 virtio_transport_recv_pkt+0x1dfb/0x26a0 net/vmw_vsock/virtio_transport_common.c:1421 vsock_loopback_work+0x3bb/0x5a0 net/vmw_vsock/vsock_loopback.c:120 process_one_work kernel/workqueue.c:2630 [inline] process_scheduled_works+0xff6/0x1e60 kernel/workqueue.c:2703 worker_thread+0xeca/0x14d0 kernel/workqueue.c:2784 kthread+0x3cc/0x520 kernel/kthread.c:388 ret_from_fork+0x66/0x80 arch/x86/kernel/process.c:147 ret_from_fork_asm+0x11/0x20 arch/x86/entry/entry_64.S:304
Uninit was stored to memory at:
virtio_transport_space_update net/vmw_vsock/virtio_transport_common.c:1274 [inline] virtio_transport_recv_pkt+0x1ee8/0x26a0 net/vmw_vsock/virtio_transport_common.c:1415 vsock_loopback_work+0x3bb/0x5a0 net/vmw_vsock/vsock_loopback.c:120 process_one_work kernel/workqueue.c:2630 [inline] process_scheduled_works+0xff6/0x1e60 kernel/workqueue.c:2703 worker_thread+0xeca/0x14d0 kernel/workqueue.c:2784 kthread+0x3cc/0x520 kernel/kthread.c:388 ret_from_fork+0x66/0x80 arch/x86/kernel/process.c:147 ret_from_fork_asm+0x11/0x20 arch/x86/entry/entry_64.S:304
Uninit was created at:
slab_post_alloc_hook+0x105/0xad0 mm/slab.h:767 slab_alloc_node mm/slub.c:3478 [inline] kmem_cache_alloc_node+0x5a2/0xaf0 mm/slub.c:3523 kmalloc_reserve+0x13c/0x4a0 net/core/skbuff.c:559 __alloc_skb+0x2fd/0x770 net/core/skbuff.c:650 alloc_skb include/linux/skbuff.h:1286 [inline] virtio_vsock_alloc_skb include/linux/virtio_vsock.h:66 [inline] virtio_transport_alloc_skb+0x90/0x11e0 net/vmw_vsock/virtio_transport_common.c:58 virtio_transport_reset_no_sock net/vmw_vsock/virtio_transport_common.c:957 [inline] virtio_transport_recv_pkt+0x1279/0x26a0 net/vmw_vsock/virtio_transport_common.c:1387 vsock_loopback_work+0x3bb/0x5a0 net/vmw_vsock/vsock_loopback.c:120 process_one_work kernel/workqueue.c:2630 [inline] process_scheduled_works+0xff6/0x1e60 kernel/workqueue.c:2703 worker_thread+0xeca/0x14d0 kernel/workqueue.c:2784 kthread+0x3cc/0x520 kernel/kthread.c:388 ret_from_fork+0x66/0x80 arch/x86/kernel/process.c:147 ret_from_fork_asm+0x11/0x20 arch/x86/entry/entry_64.S:304 CPU: 1 PID: 10664 Comm: kworker/1:5 Not tainted 6.6.0-rc3-00146-g9f3ebbef746f #3 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-1.fc38 04/01/2014 Workqueue: vsock-loopback vsock_loopback_work =====================================================
The following simple reproducer can cause the issue described above:
int main(void)
{
int sock;
struct sockaddr_vm addr = {
.svm_family = AF_VSOCK,
.svm_cid = VMADDR_CID_ANY,
.svm_port = 1234,
};
sock = socket(AF_VSOCK, SOCK_STREAM, 0); connect(sock, (struct sockaddr *)&addr, sizeof(addr)); return 0;
}
This issue occurs because the buf_alloc and fwd_cnt fields of the struct virtio_vsock_hdr are not initialized when a new skb is allocated in virtio_transport_init_hdr(). This patch resolves the issue by initializing these fields during allocation.
--- net/vmw_vsock/virtio_transport_common.c | 2 ++ 1 file changed, 2 insertions(+)
net/vmw_vsock/virtio_transport_common.c +2 -0
@@ -68,6 +68,8 @@ virtio_transport_alloc_skb(struct virtio_vsock_pkt_info *info, hdr->dst_port =cpu_to_le32 (dst_port); hdr->flags =cpu_to_le32 (info->flags); hdr->len =cpu_to_le32 (len); + hdr->buf_alloc =cpu_to_le32 (0 ); + hdr->fwd_cnt =cpu_to_le32 (0 );if (info->msg && len >0 ) { payload =skb_put (skb, len);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 572/603 net: enetc: shorten enetc_setup_xdp_prog() error message to fit NETLINK_MAX_FMTMSG_LEN
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vladimir Oltean <[email protected]>
[ Upstream commit f968c56417f00be4cb62eadeed042a1e3c80dc53 ]
NETLINK_MAX_FMTMSG_LEN is currently hardcoded to 80, and we provide an error printf-formatted string having 96 characters including the terminating \0. Assuming each %d (representing a queue) gets replaced by a number having at most 2 digits (a reasonable assumption), the final string is also 96 characters wide, which is too much.
Reduce the verbiage a bit by removing some (partially) redundant words, which makes the new printf-formatted string be 73 characters wide with the trailing newline.
--- drivers/net/ethernet/freescale/enetc/enetc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/freescale/enetc/enetc.c +1 -1
@@ -2769,7 +2769,7 @@ static int enetc_setup_xdp_prog(struct net_device *ndev, struct bpf_prog *prog,if (priv->min_num_stack_tx_queues + num_xdp_tx_queues > priv->num_tx_rings) {NL_SET_ERR_MSG_FMT_MOD (extack, -"Reserving %d XDP TXQs does not leave a minimum of %d TXQs for network stack (total %d available)" , +"Reserving %d XDP TXQs does not leave a minimum of %d for stack (total %d)" , num_xdp_tx_queues, priv->min_num_stack_tx_queues, priv->num_tx_rings);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 573/603 i2c: iproc: handle invalid slave state
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Roman Bacik <[email protected]>
[ Upstream commit ba15a14399c262f91ce30c19fcbdc952262dd1be ]
Add the code to handle an invalid state when both bits S_RX_EVENT (indicating a transaction) and S_START_BUSY (indicating the end of transaction - transition of START_BUSY from 1 to 0) are set in the interrupt status register during a slave read.
--- drivers/i2c/busses/i2c-bcm-iproc.c | 133 ++++++++++++++++------------- 1 file changed, 75 insertions(+), 58 deletions(-)
drivers/i2c/busses/i2c-bcm-iproc.c +75 -58
@@ -316,26 +316,44 @@ static void bcm_iproc_i2c_slave_init(iproc_i2c_wr_reg (iproc_i2c,IE_OFFSET , val); } -static void bcm_iproc_i2c_check_slave_status ( -struct bcm_iproc_i2c_dev *iproc_i2c) +static bool bcm_iproc_i2c_check_slave_status + (struct bcm_iproc_i2c_dev *iproc_i2c,u32 status) {u32 val; +bool recover = false; - val =iproc_i2c_rd_reg (iproc_i2c,S_CMD_OFFSET ); -/* status is valid only when START_BUSY is cleared after it was set */ -if (val &BIT (S_CMD_START_BUSY_SHIFT )) -return ; +/* check slave transmit status only if slave is transmitting */ +if (!iproc_i2c->slave_rx_only) { + val =iproc_i2c_rd_reg (iproc_i2c,S_CMD_OFFSET ); +/* status is valid only when START_BUSY is cleared */ +if (!(val &BIT (S_CMD_START_BUSY_SHIFT ))) { + val = (val >>S_CMD_STATUS_SHIFT ) &S_CMD_STATUS_MASK ; +if (val ==S_CMD_STATUS_TIMEOUT || + val ==S_CMD_STATUS_MASTER_ABORT ) { +dev_warn (iproc_i2c->device, + (val ==S_CMD_STATUS_TIMEOUT ) ? +"slave random stretch time timeout\n" : +"Master aborted read transaction\n" ); + recover = true; + } + } + } + +/* RX_EVENT is not valid when START_BUSY is set */ +if ((status &BIT (IS_S_RX_EVENT_SHIFT )) && + (status &BIT (IS_S_START_BUSY_SHIFT ))) { +dev_warn (iproc_i2c->device,"Slave aborted read transaction\n" ); + recover = true; + } - val = (val >>S_CMD_STATUS_SHIFT ) &S_CMD_STATUS_MASK ; -if (val ==S_CMD_STATUS_TIMEOUT || val ==S_CMD_STATUS_MASTER_ABORT ) { -dev_err (iproc_i2c->device, (val ==S_CMD_STATUS_TIMEOUT ) ? -"slave random stretch time timeout\n" : -"Master aborted read transaction\n" ); +if (recover) {/* re-initialize i2c for recovery */ bcm_iproc_i2c_enable_disable (iproc_i2c, false);bcm_iproc_i2c_slave_init (iproc_i2c, true);bcm_iproc_i2c_enable_disable (iproc_i2c, true); } + +return recover; }static void bcm_iproc_i2c_slave_read (struct bcm_iproc_i2c_dev *iproc_i2c)
@@ -420,48 +438,6 @@ static bool bcm_iproc_i2c_slave_isr(struct bcm_iproc_i2c_dev *iproc_i2c,u32 val;u8 value; -/* -* Slave events in case of master-write, master-write-read and, -* master-read -* -* Master-write : only IS_S_RX_EVENT_SHIFT event -* Master-write-read: both IS_S_RX_EVENT_SHIFT and IS_S_RD_EVENT_SHIFT -* events -* Master-read : both IS_S_RX_EVENT_SHIFT and IS_S_RD_EVENT_SHIFT -* events or only IS_S_RD_EVENT_SHIFT -* -* iproc has a slave rx fifo size of 64 bytes. Rx fifo full interrupt -* (IS_S_RX_FIFO_FULL_SHIFT) will be generated when RX fifo becomes -* full. This can happen if Master issues write requests of more than -* 64 bytes. -*/ -if (status &BIT (IS_S_RX_EVENT_SHIFT ) || - status &BIT (IS_S_RD_EVENT_SHIFT ) || - status &BIT (IS_S_RX_FIFO_FULL_SHIFT )) { -/* disable slave interrupts */ - val =iproc_i2c_rd_reg (iproc_i2c,IE_OFFSET ); - val &= ~iproc_i2c->slave_int_mask; -iproc_i2c_wr_reg (iproc_i2c,IE_OFFSET , val); - -if (status &BIT (IS_S_RD_EVENT_SHIFT )) -/* Master-write-read request */ - iproc_i2c->slave_rx_only = false; -else -/* Master-write request only */ - iproc_i2c->slave_rx_only = true; - -/* schedule tasklet to read data later */ -tasklet_schedule (&iproc_i2c->slave_rx_tasklet); - -/* -* clear only IS_S_RX_EVENT_SHIFT and -* IS_S_RX_FIFO_FULL_SHIFT interrupt. -*/ - val =BIT (IS_S_RX_EVENT_SHIFT ); -if (status &BIT (IS_S_RX_FIFO_FULL_SHIFT )) - val |=BIT (IS_S_RX_FIFO_FULL_SHIFT ); -iproc_i2c_wr_reg (iproc_i2c,IS_OFFSET , val); - }if (status &BIT (IS_S_TX_UNDERRUN_SHIFT )) { iproc_i2c->tx_underrun++;
@@ -493,8 +469,9 @@ static bool bcm_iproc_i2c_slave_isr(struct bcm_iproc_i2c_dev *iproc_i2c,* less than PKT_LENGTH bytes were output on the SMBUS */ iproc_i2c->slave_int_mask &= ~BIT (IE_S_TX_UNDERRUN_SHIFT ); -iproc_i2c_wr_reg (iproc_i2c,IE_OFFSET , - iproc_i2c->slave_int_mask); + val =iproc_i2c_rd_reg (iproc_i2c,IE_OFFSET ); + val &= ~BIT (IE_S_TX_UNDERRUN_SHIFT ); +iproc_i2c_wr_reg (iproc_i2c,IE_OFFSET , val);/* End of SMBUS for Master Read */ val =BIT (S_TX_WR_STATUS_SHIFT );
@@ -515,9 +492,49 @@ static bool bcm_iproc_i2c_slave_isr(struct bcm_iproc_i2c_dev *iproc_i2c, BIT(IS_S_START_BUSY_SHIFT)); } -/* check slave transmit status only if slave is transmitting */ -if (!iproc_i2c->slave_rx_only) -bcm_iproc_i2c_check_slave_status (iproc_i2c); +/* if the controller has been reset, immediately return from the ISR */ +if (bcm_iproc_i2c_check_slave_status (iproc_i2c, status)) +return true; + +/* +* Slave events in case of master-write, master-write-read and, +* master-read +* +* Master-write : only IS_S_RX_EVENT_SHIFT event +* Master-write-read: both IS_S_RX_EVENT_SHIFT and IS_S_RD_EVENT_SHIFT +* events +* Master-read : both IS_S_RX_EVENT_SHIFT and IS_S_RD_EVENT_SHIFT +* events or only IS_S_RD_EVENT_SHIFT +* +* iproc has a slave rx fifo size of 64 bytes. Rx fifo full interrupt +* (IS_S_RX_FIFO_FULL_SHIFT) will be generated when RX fifo becomes +* full. This can happen if Master issues write requests of more than +* 64 bytes. +*/ +if (status &BIT (IS_S_RX_EVENT_SHIFT ) || + status &BIT (IS_S_RD_EVENT_SHIFT ) || + status &BIT (IS_S_RX_FIFO_FULL_SHIFT )) { +/* disable slave interrupts */ + val =iproc_i2c_rd_reg (iproc_i2c,IE_OFFSET ); + val &= ~iproc_i2c->slave_int_mask; +iproc_i2c_wr_reg (iproc_i2c,IE_OFFSET , val); + +if (status &BIT (IS_S_RD_EVENT_SHIFT )) +/* Master-write-read request */ + iproc_i2c->slave_rx_only = false; +else +/* Master-write request only */ + iproc_i2c->slave_rx_only = true; + +/* schedule tasklet to read data later */ +tasklet_schedule (&iproc_i2c->slave_rx_tasklet); + +/* clear IS_S_RX_FIFO_FULL_SHIFT interrupt */ +if (status &BIT (IS_S_RX_FIFO_FULL_SHIFT )) { + val =BIT (IS_S_RX_FIFO_FULL_SHIFT ); +iproc_i2c_wr_reg (iproc_i2c,IS_OFFSET , val); + } + }return true; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 574/603 netfilter: xt_recent: fix (increase) ipv6 literal buffer length
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Maciej Żenczykowski <[email protected]>
[ Upstream commit 7b308feb4fd2d1c06919445c65c8fbf8e9fd1781 ]
in6_pton() supports 'low-32-bit dot-decimal representation' (this is useful with DNS64/NAT64 networks for example):
# echo +aaaa:bbbb:cccc:dddd:eeee:ffff:1.2.3.4 > /proc/self/net/xt_recent/DEFAULT # cat /proc/self/net/xt_recent/DEFAULT src=aaaa:bbbb:cccc:dddd:eeee:ffff:0102:0304 ttl: 0 last_seen: 9733848829 oldest_pkt: 1 9733848829
but the provided buffer is too short:
# echo +aaaa:bbbb:cccc:dddd:eeee:ffff:255.255.255.255 > /proc/self/net/xt_recent/DEFAULT -bash: echo: write error: Invalid argument
--- net/netfilter/xt_recent.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/netfilter/xt_recent.c +1 -1
@@ -561,7 +561,7 @@ recent_mt_proc_write(struct file *file, const char __user *input, {struct recent_table *t =pde_data (file_inode (file));struct recent_entry *e; -char buf[sizeof ("+b335:1d35:1e55:dead:c0de:1715:5afe:c0de" )]; +char buf[sizeof ("+b335:1d35:1e55:dead:c0de:1715:255.255.255.255" )];const char *c = buf;union nf_inet_addr addr = {};u_int16_t family;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 575/603 netfilter: nat: fix ipv6 nat redirect with mapped and scoped addresses
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Florian Westphal <[email protected]>
[ Upstream commit 80abbe8a8263106fe45a4f293b92b5c74cc9cc8a ]
The ipv6 redirect target was derived from the ipv4 one, i.e. its identical to a 'dnat' with the first (primary) address assigned to the network interface. The code has been moved around to make it usable from nf_tables too, but its still the same as it was back when this was added in 2012.
IPv6, however, has different types of addresses, if the 'wrong' address comes first the redirection does not work.
In Daniels case, the addresses are:
inet6 ::ffff:192 ...
inet6 2a01: ...
... so the function attempts to redirect to the mapped address.
Add more checks before the address is deemed correct:
1. If the packets' daddr is scoped, search for a scoped address too
2. skip tentative addresses
3. skip mapped addresses
Use the first address that appears to match our needs.
--- net/netfilter/nf_nat_redirect.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-)
net/netfilter/nf_nat_redirect.c +26 -1
@@ -80,6 +80,26 @@ EXPORT_SYMBOL_GPL(nf_nat_redirect_ipv4);static const struct in6_addr loopback_addr =IN6ADDR_LOOPBACK_INIT ; +static bool nf_nat_redirect_ipv6_usable (const struct inet6_ifaddr *ifa,unsigned int scope) +{ +unsigned int ifa_addr_type =ipv6_addr_type (&ifa->addr); + +if (ifa_addr_type &IPV6_ADDR_MAPPED ) +return false; + +if ((ifa->flags &IFA_F_TENTATIVE ) && (!(ifa->flags &IFA_F_OPTIMISTIC ))) +return false; + +if (scope) { +unsigned int ifa_scope = ifa_addr_type &IPV6_ADDR_SCOPE_MASK ; + +if (!(scope & ifa_scope)) +return false; + } + +return true; +} +unsigned int nf_nat_redirect_ipv6 (struct sk_buff *skb,const struct nf_nat_range2 *range,unsigned int hooknum)
@@ -89,14 +109,19 @@ nf_nat_redirect_ipv6(struct sk_buff *skb, const struct nf_nat_range2 *range,if (hooknum ==NF_INET_LOCAL_OUT ) { newdst.in6 = loopback_addr; }else { +unsigned int scope =ipv6_addr_scope (&ipv6_hdr (skb)->daddr);struct inet6_dev *idev; -struct inet6_ifaddr *ifa;bool addr = false; idev =__in6_dev_get (skb->dev);if (idev !=NULL ) { +const struct inet6_ifaddr *ifa; +read_lock_bh (&idev->lock);list_for_each_entry (ifa, &idev->addr_list, if_list) { +if (!nf_nat_redirect_ipv6_usable (ifa, scope)) +continue ; + newdst.in6 = ifa->addr; addr = true;break ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 576/603 net/sched: act_ct: Always fill offloading tuple iifidx
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vlad Buslov <[email protected]>
[ Upstream commit 9bc64bd0cd765f696fcd40fc98909b1f7c73b2ba ]
Referenced commit doesn't always set iifidx when offloading the flow to hardware. Fix the following cases:
- nf_conn_act_ct_ext_fill() is called before extension is created with nf_conn_act_ct_ext_add() in tcf_ct_act(). This can cause rule offload with unspecified iifidx when connection is offloaded after only single original-direction packet has been processed by tc data path. Always fill the new nf_conn_act_ct_ext instance after creating it in nf_conn_act_ct_ext_add().
- Offloading of unidirectional UDP NEW connections is now supported, but ct flow iifidx field is not updated when connection is promoted to bidirectional which can result reply-direction iifidx to be zero when refreshing the connection. Fill in the extension and update flow iifidx before calling flow_offload_refresh().
--- include/net/netfilter/nf_conntrack_act_ct.h | 30 ++++++++++++--------- net/openvswitch/conntrack.c | 2 +- net/sched/act_ct.c | 15 ++++++++++- 3 files changed, 32 insertions(+), 15 deletions(-)
include/net/netfilter/nf_conntrack_act_ct.h +17 -13
@@ -20,7 +20,22 @@ static inline struct nf_conn_act_ct_ext *nf_conn_act_ct_ext_find(const struct nf#endif } -static inline struct nf_conn_act_ct_ext *nf_conn_act_ct_ext_add (struct nf_conn *ct) +static inline void nf_conn_act_ct_ext_fill (struct sk_buff *skb,struct nf_conn *ct, +enum ip_conntrack_info ctinfo) +{ +#if IS_ENABLED (CONFIG_NET_ACT_CT ) +struct nf_conn_act_ct_ext *act_ct_ext; + + act_ct_ext =nf_conn_act_ct_ext_find (ct); +if (dev_net (skb->dev) == &init_net && act_ct_ext) + act_ct_ext->ifindex[CTINFO2DIR (ctinfo)] = skb->dev->ifindex; +#endif +} + +static inline struct +nf_conn_act_ct_ext *nf_conn_act_ct_ext_add (struct sk_buff *skb, +struct nf_conn *ct, +enum ip_conntrack_info ctinfo) {#if IS_ENABLED (CONFIG_NET_ACT_CT )struct nf_conn_act_ct_ext *act_ct =nf_ct_ext_find (ct,NF_CT_EXT_ACT_CT );
@@ -29,22 +44,11 @@ static inline struct nf_conn_act_ct_ext *nf_conn_act_ct_ext_add(struct nf_conn *return act_ct; act_ct =nf_ct_ext_add (ct,NF_CT_EXT_ACT_CT ,GFP_ATOMIC ); +nf_conn_act_ct_ext_fill (skb, ct, ctinfo);return act_ct;#else return NULL ; #endif } -static inline void nf_conn_act_ct_ext_fill (struct sk_buff *skb,struct nf_conn *ct, -enum ip_conntrack_info ctinfo) -{ -#if IS_ENABLED (CONFIG_NET_ACT_CT ) -struct nf_conn_act_ct_ext *act_ct_ext; - - act_ct_ext =nf_conn_act_ct_ext_find (ct); -if (dev_net (skb->dev) == &init_net && act_ct_ext) - act_ct_ext->ifindex[CTINFO2DIR (ctinfo)] = skb->dev->ifindex; -#endif -} -#endif /* _NF_CONNTRACK_ACT_CT_H */
net/openvswitch/conntrack.c +1 -1
@@ -985,7 +985,7 @@ static int ovs_ct_commit(struct net *net, struct sw_flow_key *key,if (err)return err; -nf_conn_act_ct_ext_add (ct); +nf_conn_act_ct_ext_add (skb, ct, ctinfo); }else if (IS_ENABLED (CONFIG_NF_CONNTRACK_LABELS ) &&labels_nonzero (&info->labels.mask)) { err = ovs_ct_set_labels(ct, key, &info->labels.value,
net/sched/act_ct.c +14 -1
@@ -376,6 +376,17 @@ static void tcf_ct_flow_tc_ifidx(struct flow_offload *entry, entry->tuplehash[dir].tuple.tc.iifidx = act_ct_ext->ifindex[dir]; } +static void tcf_ct_flow_ct_ext_ifidx_update (struct flow_offload *entry) +{ +struct nf_conn_act_ct_ext *act_ct_ext; + + act_ct_ext =nf_conn_act_ct_ext_find (entry->ct); +if (act_ct_ext) { +tcf_ct_flow_tc_ifidx (entry, act_ct_ext,FLOW_OFFLOAD_DIR_ORIGINAL ); +tcf_ct_flow_tc_ifidx (entry, act_ct_ext,FLOW_OFFLOAD_DIR_REPLY ); + } +} +static void tcf_ct_flow_table_add (struct tcf_ct_flow_table *ct_ft,struct nf_conn *ct,bool tcp,bool bidirectional)
@@ -671,6 +682,8 @@ static bool tcf_ct_flow_table_lookup(struct tcf_ct_params *p,else ctinfo =IP_CT_ESTABLISHED_REPLY ; +nf_conn_act_ct_ext_fill (skb, ct, ctinfo); +tcf_ct_flow_ct_ext_ifidx_update (flow);flow_offload_refresh (nf_ft, flow, force_refresh);if (!test_bit (IPS_ASSURED_BIT , &ct->status)) {/* Process this flow in SW to allow promoting to ASSURED */
@@ -1030,7 +1043,7 @@ TC_INDIRECT_SCOPE int tcf_ct_act(struct sk_buff *skb, const struct tc_action *a,tcf_ct_act_set_labels (ct, p->labels, p->labels_mask);if (!nf_ct_is_confirmed (ct)) -nf_conn_act_ct_ext_add (ct); +nf_conn_act_ct_ext_add (skb, ct, ctinfo);/* This will take care of sending queued events * even if the connection is already confirmed.
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 577/603 RISC-V: Dont fail in riscv_of_parent_hartid() for disabled HARTs
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Anup Patel <[email protected]>
[ Upstream commit c4676f8dc1e12e68d6511f9ed89707fdad4c962c ]
The riscv_of_processor_hartid() used by riscv_of_parent_hartid() fails for HARTs disabled in the DT. This results in the following warning thrown by the RISC-V INTC driver for the E-core on SiFive boards:
[ 0.000000] riscv-intc: unable to find hart id for /cpus/cpu@0/interrupt-controller
The riscv_of_parent_hartid() is only expected to read the hartid from the DT so we directly call of_get_cpu_hwid() instead of calling riscv_of_processor_hartid().
--- arch/riscv/kernel/cpu.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
arch/riscv/kernel/cpu.c +6 -5
@@ -125,13 +125,14 @@ int __init riscv_early_of_processor_hartid(struct device_node *node, unsigned lo*/ int riscv_of_parent_hartid (struct device_node *node,unsigned long *hartid) { -int rc; -for (; node; node = node->parent) {if (of_device_is_compatible (node,"riscv" )) { - rc =riscv_of_processor_hartid (node, hartid); -if (!rc) -return 0 ; + *hartid = (unsigned long )of_get_cpu_hwid (node,0 ); +if (*hartid == ~0UL ) { +pr_warn ("Found CPU without hart ID\n" ); +return -ENODEV ; + } +return 0 ; } }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 578/603 net: ti: icss-iep: fix setting counter value
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Diogo Ivo <[email protected]>
[ Upstream commit 83b9dda8afa4e968d9cce253f390b01c0612a2a5 ]
Currently icss_iep_set_counter() writes the upper 32-bits of the counter value to both the lower and upper counter registers, so fix this by writing the appropriate value to the lower register.
--- drivers/net/ethernet/ti/icssg/icss_iep.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/ti/icssg/icss_iep.c +1 -1
@@ -177,7 +177,7 @@ static void icss_iep_set_counter(struct icss_iep *iep, u64 ns)if (iep->plat_data->flags &ICSS_IEP_64BIT_COUNTER_SUPPORT )writel (upper_32_bits (ns), iep->base + iep->plat_data->reg_offs[ICSS_IEP_COUNT_REG1 ]); -writel (upper_32_bits (ns), iep->base + iep->plat_data->reg_offs[ICSS_IEP_COUNT_REG0 ]); +writel (lower_32_bits (ns), iep->base + iep->plat_data->reg_offs[ICSS_IEP_COUNT_REG0 ]); }static void icss_iep_update_to_next_boundary (struct icss_iep *iep,u64 start_ns);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 579/603 drivers: perf: Do not broadcast to other cpus when starting a counter
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexandre Ghiti <[email protected]>
[ Upstream commit 61e3d993c8bd3e80f8f1363ed5e04f88ab531b72 ]
This command:
$ perf record -e cycles:k -e instructions:k -c 10000 -m 64M dd if=/dev/zero of=/dev/null count=1000
gives rise to this kernel warning:
[ 444.364395] WARNING: CPU: 0 PID: 104 at kernel/smp.c:775 smp_call_function_many_cond+0x42c/0x436 [ 444.364515] Modules linked in: [ 444.364657] CPU: 0 PID: 104 Comm: perf-exec Not tainted 6.6.0-rc6-00051-g391df82e8ec3-dirty #73 [ 444.364771] Hardware name: riscv-virtio,qemu (DT) [ 444.364868] epc : smp_call_function_many_cond+0x42c/0x436 [ 444.364917] ra : on_each_cpu_cond_mask+0x20/0x32 [ 444.364948] epc : ffffffff8009f9e0 ra : ffffffff8009fa5a sp : ff20000000003800 [ 444.364966] gp : ffffffff81500aa0 tp : ff60000002b83000 t0 : ff200000000038c0 [ 444.364982] t1 : ffffffff815021f0 t2 : 000000000000001f s0 : ff200000000038b0 [ 444.364998] s1 : ff60000002c54d98 a0 : ff60000002a73940 a1 : 0000000000000000 [ 444.365013] a2 : 0000000000000000 a3 : 0000000000000003 a4 : 0000000000000100 [ 444.365029] a5 : 0000000000010100 a6 : 0000000000f00000 a7 : 0000000000000000 [ 444.365044] s2 : 0000000000000000 s3 : ffffffffffffffff s4 : ff60000002c54d98 [ 444.365060] s5 : ffffffff81539610 s6 : ffffffff80c20c48 s7 : 0000000000000000 [ 444.365075] s8 : 0000000000000000 s9 : 0000000000000001 s10: 0000000000000001 [ 444.365090] s11: ffffffff80099394 t3 : 0000000000000003 t4 : 00000000eac0c6e6 [ 444.365104] t5 : 0000000400000000 t6 : ff60000002e010d0 [ 444.365120] status: 0000000200000100 badaddr: 0000000000000000 cause: 0000000000000003 [ 444.365226] [<ffffffff8009f9e0>] smp_call_function_many_cond+0x42c/0x436 [ 444.365295] [<ffffffff8009fa5a>] on_each_cpu_cond_mask+0x20/0x32 [ 444.365311] [<ffffffff806e90dc>] pmu_sbi_ctr_start+0x7a/0xaa [ 444.365327] [<ffffffff806e880c>] riscv_pmu_start+0x48/0x66 [ 444.365339] [<ffffffff8012111a>] perf_adjust_freq_unthr_context+0x196/0x1ac [ 444.365356] [<ffffffff801237aa>] perf_event_task_tick+0x78/0x8c [ 444.365368] [<ffffffff8003faf4>] scheduler_tick+0xe6/0x25e [ 444.365383] [<ffffffff8008a042>] update_process_times+0x80/0x96 [ 444.365398] [<ffffffff800991ec>] tick_sched_handle+0x26/0x52 [ 444.365410] [<ffffffff800993e4>] tick_sched_timer+0x50/0x98 [ 444.365422] [<ffffffff8008a6aa>] __hrtimer_run_queues+0x126/0x18a [ 444.365433] [<ffffffff8008b350>] hrtimer_interrupt+0xce/0x1da [ 444.365444] [<ffffffff806cdc60>] riscv_timer_interrupt+0x30/0x3a [ 444.365457] [<ffffffff8006afa6>] handle_percpu_devid_irq+0x80/0x114 [ 444.365470] [<ffffffff80065b82>] generic_handle_domain_irq+0x1c/0x2a [ 444.365483] [<ffffffff8045faec>] riscv_intc_irq+0x2e/0x46 [ 444.365497] [<ffffffff808a9c62>] handle_riscv_irq+0x4a/0x74 [ 444.365521] [<ffffffff808aa760>] do_irq+0x7c/0x7e [ 444.365796] ---[ end trace 0000000000000000 ]---
That's because the fix in commit 3fec323339a4 ("drivers: perf: Fix panic in riscv SBI mmap support") was wrong since there is no need to broadcast to other cpus when starting a counter, that's only needed in mmap when the counters could have already been started on other cpus, so simply remove this broadcast.
--- drivers/perf/riscv_pmu_sbi.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/perf/riscv_pmu_sbi.c +2 -4
@@ -543,8 +543,7 @@ static void pmu_sbi_ctr_start(struct perf_event *event, u64 ival)if ((hwc->flags &PERF_EVENT_FLAG_USER_ACCESS ) && (hwc->flags &PERF_EVENT_FLAG_USER_READ_CNT )) -on_each_cpu_mask (mm_cpumask (event->owner->mm), - pmu_sbi_set_scounteren, (void *)event,1 ); +pmu_sbi_set_scounteren ((void *)event); }static void pmu_sbi_ctr_stop (struct perf_event *event,unsigned long flag)
@@ -554,8 +553,7 @@ static void pmu_sbi_ctr_stop(struct perf_event *event, unsigned long flag)if ((hwc->flags &PERF_EVENT_FLAG_USER_ACCESS ) && (hwc->flags &PERF_EVENT_FLAG_USER_READ_CNT )) -on_each_cpu_mask (mm_cpumask (event->owner->mm), - pmu_sbi_reset_scounteren, (void *)event,1 ); +pmu_sbi_reset_scounteren ((void *)event); ret =sbi_ecall (SBI_EXT_PMU ,SBI_EXT_PMU_COUNTER_STOP , hwc->idx,1 , flag,0 ,0 ,0 ); if (ret.error && (ret.error != SBI_ERR_ALREADY_STOPPED) &&
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 580/603 module/decompress: use kvmalloc() consistently
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrea Righi <[email protected]>
[ Upstream commit 17fc8084aa8f9d5235f252fc3978db657dd77e92 ]
We consistently switched from kmalloc() to vmalloc() in module decompression to prevent potential memory allocation failures with large modules, however vmalloc() is not as memory-efficient and fast as kmalloc().
Since we don't know in general the size of the workspace required by the decompression algorithm, it is more reasonable to use kvmalloc() consistently, also considering that we don't have special memory requirements here.
--- kernel/module/decompress.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
kernel/module/decompress.c +4 -4
@@ -100,7 +100,7 @@ static ssize_t module_gzip_decompress(struct load_info *info, s.next_in = buf + gzip_hdr_len; s.avail_in = size - gzip_hdr_len; - s.workspace =vmalloc (zlib_inflate_workspacesize ()); + s.workspace =kvmalloc (zlib_inflate_workspacesize (),GFP_KERNEL );if (!s.workspace)return -ENOMEM ;
@@ -138,7 +138,7 @@ static ssize_t module_gzip_decompress(struct load_info *info, out_inflate_end:zlib_inflateEnd (&s); out: -vfree (s.workspace); +kvfree (s.workspace); return retval; }#elif defined(CONFIG_MODULE_COMPRESS_XZ)
@@ -241,7 +241,7 @@ static ssize_t module_zstd_decompress(struct load_info *info, } wksp_size =zstd_dstream_workspace_bound (header.windowSize); - wksp =vmalloc (wksp_size); + wksp =kvmalloc (wksp_size,GFP_KERNEL );if (!wksp) { retval = -ENOMEM ; goto out;
@@ -284,7 +284,7 @@ static ssize_t module_zstd_decompress(struct load_info *info, retval = new_size; out: -vfree (wksp); +kvfree (wksp); return retval; }#else
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 581/603 fs: dlm: Simplify buffer size computation in dlm_create_debug_file()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe JAILLET <[email protected]>
[ Upstream commit 19b3102c0b5350621e7492281f2be0f071fb7e31 ]
Use sizeof(name) instead of the equivalent, but hard coded, DLM_LOCKSPACE_LEN + 8.
This is less verbose and more future proof.
--- fs/dlm/debug_fs.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
fs/dlm/debug_fs.c +5 -5
@@ -987,7 +987,7 @@ void dlm_create_debug_file(struct dlm_ls *ls)/* format 2 */ memset (name,0 ,sizeof (name)); -snprintf (name,DLM_LOCKSPACE_LEN +8 ,"%s_locks" , ls->ls_name); +snprintf (name,sizeof (name),"%s_locks" , ls->ls_name); ls->ls_debug_locks_dentry = debugfs_create_file(name, 0644,
@@ -998,7 +998,7 @@ void dlm_create_debug_file(struct dlm_ls *ls)/* format 3 */ memset (name,0 ,sizeof (name)); -snprintf (name,DLM_LOCKSPACE_LEN +8 ,"%s_all" , ls->ls_name); +snprintf (name,sizeof (name),"%s_all" , ls->ls_name); ls->ls_debug_all_dentry = debugfs_create_file(name, S_IFREG | S_IRUGO,
@@ -1009,7 +1009,7 @@ void dlm_create_debug_file(struct dlm_ls *ls)/* format 4 */ memset (name,0 ,sizeof (name)); -snprintf (name,DLM_LOCKSPACE_LEN +8 ,"%s_toss" , ls->ls_name); +snprintf (name,sizeof (name),"%s_toss" , ls->ls_name); ls->ls_debug_toss_dentry = debugfs_create_file(name, S_IFREG | S_IRUGO,
@@ -1018,7 +1018,7 @@ void dlm_create_debug_file(struct dlm_ls *ls) &format4_fops);memset (name,0 ,sizeof (name)); -snprintf (name,DLM_LOCKSPACE_LEN +8 ,"%s_waiters" , ls->ls_name); +snprintf (name,sizeof (name),"%s_waiters" , ls->ls_name); ls->ls_debug_waiters_dentry = debugfs_create_file(name, 0644,
@@ -1029,7 +1029,7 @@ void dlm_create_debug_file(struct dlm_ls *ls)/* format 5 */ memset (name,0 ,sizeof (name)); -snprintf (name,DLM_LOCKSPACE_LEN +8 ,"%s_queued_asts" , ls->ls_name); +snprintf (name,sizeof (name),"%s_queued_asts" , ls->ls_name); ls->ls_debug_queued_asts_dentry = debugfs_create_file(name, 0644,
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 582/603 drm/vc4: tests: Fix UAF in the mock helpers
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Maxime Ripard <[email protected]>
[ Upstream commit cdcd6aef9db5797995d4153ea19fdf56d189f0e4 ]
The VC4 mock helpers allocate the CRTC, encoders and connectors using a call to kunit_kzalloc(), but the DRM device they are attache to survives for longer than the test itself which leads to use-after-frees reported by KASAN.
Switch to drmm_kzalloc to tie the lifetime of these objects to the main DRM device.
--- drivers/gpu/drm/vc4/tests/vc4_mock_crtc.c | 2 +- drivers/gpu/drm/vc4/tests/vc4_mock_output.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/gpu/drm/vc4/tests/vc4_mock_crtc.c +1 -1
@@ -26,7 +26,7 @@ struct vc4_dummy_crtc *vc4_mock_pv(struct kunit *test,struct vc4_crtc *vc4_crtc;int ret; - dummy_crtc =kunit_kzalloc (test,sizeof (*dummy_crtc),GFP_KERNEL ); + dummy_crtc =drmm_kzalloc (drm,sizeof (*dummy_crtc),GFP_KERNEL );KUNIT_ASSERT_NOT_NULL (test, dummy_crtc); vc4_crtc = &dummy_crtc->crtc;
drivers/gpu/drm/vc4/tests/vc4_mock_output.c +1 -1
@@ -32,7 +32,7 @@ struct vc4_dummy_output *vc4_dummy_output(struct kunit *test,struct drm_encoder *enc;int ret; - dummy_output =kunit_kzalloc (test,sizeof (*dummy_output),GFP_KERNEL ); + dummy_output =drmm_kzalloc (drm,sizeof (*dummy_output),GFP_KERNEL );KUNIT_ASSERT_NOT_ERR_OR_NULL (test, dummy_output); dummy_output->encoder.type = vc4_encoder_type;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 583/603 drm/syncobj: fix DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Erik Kurzinger <[email protected]>
[ Upstream commit 101c9f637efa1655f55876644d4439e552267527 ]
If DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT is invoked with the DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE flag set but no fence has yet been submitted for the given timeline point the call will fail immediately with EINVAL. This does not match the intended behavior where the call should wait until the fence has been submitted (or the timeout expires).
The following small example program illustrates the issue. It should wait for 5 seconds and then print ETIME, but instead it terminates right away after printing EINVAL.
#include <stdio.h>
#include <fcntl.h>
#include <time.h>
#include <errno.h>
#include <xf86drm.h>
int main(void)
{
int fd = open("/dev/dri/card0", O_RDWR);
uint32_t syncobj;
drmSyncobjCreate(fd, 0, &syncobj);
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
uint64_t point = 1;
if (drmSyncobjTimelineWait(fd, &syncobj, &point, 1,
ts.tv_sec * 1000000000 + ts.tv_nsec + 5000000000, // 5s
DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE, NULL)) {
printf("drmSyncobjTimelineWait failed %d\n", errno);
}
}Reviewed by: Simon Ser <[email protected]>
--- drivers/gpu/drm/drm_syncobj.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/gpu/drm/drm_syncobj.c +2 -1
@@ -1069,7 +1069,8 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs, fence =drm_syncobj_fence_get (syncobjs[i]);if (!fence ||dma_fence_chain_find_seqno (&fence, points[i])) {dma_fence_put (fence); -if (flags &DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT ) { +if (flags & (DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT | +DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE )) {continue ; }else { timeout = -EINVAL ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 584/603 ASoC: rt712-sdca: fix speaker route missing issue
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Shuming Fan <[email protected]>
[ Upstream commit 1a3b7eab8500a6b923f7b62cc8aa4d832c7dfb3e ]
Sometimes the codec probe would be called earlier than the hardware initialization. Therefore, the speaker route should be added before the the first_hw_init check.
--- sound/soc/codecs/rt712-sdca.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
sound/soc/codecs/rt712-sdca.c +7 -7
@@ -963,13 +963,6 @@ static int rt712_sdca_probe(struct snd_soc_component *component)rt712_sdca_parse_dt (rt712, &rt712->slave->dev); rt712->component = component; -if (!rt712->first_hw_init) -return 0 ; - - ret =pm_runtime_resume (component->dev); -if (ret <0 && ret != -EACCES ) -return ret; -/* add SPK route */ if (rt712->hw_id !=RT712_DEV_ID_713 ) { snd_soc_add_component_controls(component,
@@ -980,6 +973,13 @@ static int rt712_sdca_probe(struct snd_soc_component *component) rt712_sdca_spk_dapm_routes, ARRAY_SIZE(rt712_sdca_spk_dapm_routes)); } +if (!rt712->first_hw_init) +return 0 ; + + ret =pm_runtime_resume (component->dev); +if (ret <0 && ret != -EACCES ) +return ret; +return 0 ; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 585/603 ASoC: mediatek: mt8186_mt6366_rt1019_rt5682s: trivial: fix error messages
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eugen Hristev <[email protected]>
[ Upstream commit 004fc58edea6f00db9ad07b40b882e8d976f7a54 ]
Property 'playback-codecs' is referenced as 'speaker-codec' in the error message, and this can lead to confusion.
Correct the error message such that the correct property name is referenced.
--- sound/soc/mediatek/mt8186/mt8186-mt6366-rt1019-rt5682s.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
sound/soc/mediatek/mt8186/mt8186-mt6366-rt1019-rt5682s.c +2 -2
@@ -1179,7 +1179,7 @@ static int mt8186_mt6366_rt1019_rt5682s_dev_probe(struct platform_device *pdev) playback_codec =of_get_child_by_name (pdev->dev.of_node,"playback-codecs" );if (!playback_codec) { ret = -EINVAL ; -dev_err_probe (&pdev->dev, ret,"Property 'speaker-codecs' missing or invalid\n" ); +dev_err_probe (&pdev->dev, ret,"Property 'playback-codecs' missing or invalid\n" ); goto err_playback_codec; }
@@ -1193,7 +1193,7 @@ static int mt8186_mt6366_rt1019_rt5682s_dev_probe(struct platform_device *pdev)for_each_card_prelinks (card, i, dai_link) { ret =mt8186_mt6366_card_set_be_link (card, dai_link, playback_codec,"I2S3" );if (ret) { -dev_err_probe (&pdev->dev, ret,"%s set speaker_codec fail\n" , +dev_err_probe (&pdev->dev, ret,"%s set playback_codec fail\n" , dai_link->name); goto err_probe; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 586/603 ASoC: hdmi-codec: register hpd callback on component probe
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jerome Brunet <[email protected]>
[ Upstream commit 15be353d55f9e12e34f9a819f51eb41fdef5eda8 ]
The HDMI hotplug callback to the hdmi-codec is currently registered when jack is set.
The hotplug not only serves to report the ASoC jack state but also to get the ELD. It should be registered when the component probes instead, so it does not depend on the card driver registering a jack for the HDMI to properly report the ELD.
--- sound/soc/codecs/hdmi-codec.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-)
sound/soc/codecs/hdmi-codec.c +19 -8
@@ -877,18 +877,13 @@ static int hdmi_codec_set_jack(struct snd_soc_component *component, void *data) {struct hdmi_codec_priv *hcp =snd_soc_component_get_drvdata (component); -int ret = -ENOTSUPP ;if (hcp->hcd.ops->hook_plugged_cb) { hcp->jack = jack; - ret = hcp->hcd.ops->hook_plugged_cb (component->dev->parent, - hcp->hcd.data, - plugged_cb, - component->dev); -if (ret) - hcp->jack =NULL ; +return 0 ; } -return ret; + +return -ENOTSUPP ; }static int hdmi_dai_spdif_probe (struct snd_soc_dai *dai)
@@ -982,6 +977,21 @@ static int hdmi_of_xlate_dai_id(struct snd_soc_component *component,return ret; } +static int hdmi_probe (struct snd_soc_component *component) +{ +struct hdmi_codec_priv *hcp =snd_soc_component_get_drvdata (component); +int ret =0 ; + +if (hcp->hcd.ops->hook_plugged_cb) { + ret = hcp->hcd.ops->hook_plugged_cb (component->dev->parent, + hcp->hcd.data, + plugged_cb, + component->dev); + } + +return ret; +} +static void hdmi_remove (struct snd_soc_component *component) {struct hdmi_codec_priv *hcp =snd_soc_component_get_drvdata (component);
@@ -992,6 +1002,7 @@ static void hdmi_remove(struct snd_soc_component *component) }static const struct snd_soc_component_driver hdmi_driver = { + .probe = hdmi_probe, .remove = hdmi_remove, .dapm_widgets = hdmi_widgets, .num_dapm_widgets =ARRAY_SIZE (hdmi_widgets),
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 587/603 ASoC: dapm: fix clock get name
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jerome Brunet <[email protected]>
[ Upstream commit 4bdcbc31ad2112385ad525b28972c45015e6ad70 ]
The name currently used to get the clock includes the dapm prefix. It should use the name as provided to the widget, without the prefix.
--- sound/soc/soc-dapm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/soc-dapm.c +1 -1
@@ -3670,7 +3670,7 @@ snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm,dapm_pinctrl_event (w,NULL ,SND_SOC_DAPM_POST_PMD );break ;case snd_soc_dapm_clock_supply: - w->clk =devm_clk_get (dapm->dev, w->name); + w->clk =devm_clk_get (dapm->dev, widget->name);if (IS_ERR (w->clk)) { ret =PTR_ERR (w->clk); goto request_failed;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 588/603 spi: spi-zynq-qspi: add spi-mem to driver kconfig dependencies
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Amit Kumar Mahapatra <[email protected]>
[ Upstream commit c2ded280a4b1b7bd93e53670528504be08d24967 ]
Zynq QSPI driver has been converted to use spi-mem framework so add spi-mem to driver kconfig dependencies.
--- drivers/spi/Kconfig | 1 + 1 file changed, 1 insertion(+)
drivers/spi/Kconfig +1 -0
@@ -1157,6 +1157,7 @@ config SPI_XTENSA_XTFPGA config SPI_ZYNQ_QSPI tristate "Xilinx Zynq QSPI controller" depends on ARCH_ZYNQ || COMPILE_TEST + depends on SPI_MEM help This enables support for the Zynq Quad SPI controller in master mode.
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 589/603 arm64/arm: arm_pmuv3: perf: Dont truncate 64-bit registers
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ilkka Koskinen <[email protected]>
[ Upstream commit 403edfa436286b21f5ffe6856ae5b36396e8966c ]
The driver used to truncate several 64-bit registers such as PMCEID[n] registers used to describe whether architectural and microarchitectural events in range 0x4000-0x401f exist. Due to discarding the bits, the driver made the events invisible, even if they existed.
Moreover, PMCCFILTR and PMCR registers have additional bits in the upper 32 bits. This patch makes them available although they aren't currently used. Finally, functions handling PMXEVCNTR and PMXEVTYPER registers are removed as they not being used at all.
--- arch/arm/include/asm/arm_pmuv3.h | 48 ++++++++++++++---------------- arch/arm64/include/asm/arm_pmuv3.h | 25 ++++------------ drivers/perf/arm_pmuv3.c | 6 ++-- 3 files changed, 31 insertions(+), 48 deletions(-)
arch/arm/include/asm/arm_pmuv3.h +23 -25
@@ -23,6 +23,8 @@#define PMUSERENR __ACCESS_CP15(c9, 0, c14, 0)#define PMINTENSET __ACCESS_CP15(c9, 0, c14, 1)#define PMINTENCLR __ACCESS_CP15(c9, 0, c14, 2) +#define PMCEID2 __ACCESS_CP15(c9, 0, c14, 4) +#define PMCEID3 __ACCESS_CP15(c9, 0, c14, 5)#define PMMIR __ACCESS_CP15(c9, 0, c14, 6)#define PMCCFILTR __ACCESS_CP15(c14, 0, c15, 7)
@@ -150,21 +152,6 @@ static inline u64 read_pmccntr(void)return read_sysreg (PMCCNTR ); } -static inline void write_pmxevcntr (u32 val) -{ -write_sysreg (val,PMXEVCNTR ); -} - -static inline u32 read_pmxevcntr (void ) -{ -return read_sysreg (PMXEVCNTR ); -} - -static inline void write_pmxevtyper (u32 val) -{ -write_sysreg (val,PMXEVTYPER ); -} -static inline void write_pmcntenset (u32 val) {write_sysreg (val,PMCNTENSET );
@@ -205,16 +192,6 @@ static inline void write_pmuserenr(u32 val)write_sysreg (val,PMUSERENR ); } -static inline u32 read_pmceid0 (void ) -{ -return read_sysreg (PMCEID0 ); -} - -static inline u32 read_pmceid1 (void ) -{ -return read_sysreg (PMCEID1 ); -} -static inline void kvm_set_pmu_events (u32 set,struct perf_event_attr *attr) {}static inline void kvm_clr_pmu_events (u32 clr) {}static inline bool kvm_pmu_counter_deferred (struct perf_event_attr *attr)
@@ -231,6 +208,7 @@ static inline void kvm_vcpu_pmu_resync_el0(void) {}/* PMU Version in DFR Register */ #define ARMV8_PMU_DFR_VER_NI 0 +#define ARMV8_PMU_DFR_VER_V3P1 0x4#define ARMV8_PMU_DFR_VER_V3P4 0x5#define ARMV8_PMU_DFR_VER_V3P5 0x6#define ARMV8_PMU_DFR_VER_IMP_DEF 0xF
@@ -251,4 +229,24 @@ static inline bool is_pmuv3p5(int pmuver) return pmuver >= ARMV8_PMU_DFR_VER_V3P5; } +static inline u64 read_pmceid0 (void ) +{ +u64 val =read_sysreg (PMCEID0 ); + +if (read_pmuver () >=ARMV8_PMU_DFR_VER_V3P1 ) + val |= (u64 )read_sysreg (PMCEID2 ) <<32 ; + +return val; +} + +static inline u64 read_pmceid1 (void ) +{ +u64 val =read_sysreg (PMCEID1 ); + +if (read_pmuver () >=ARMV8_PMU_DFR_VER_V3P1 ) + val |= (u64 )read_sysreg (PMCEID3 ) <<32 ; + +return val; +} +#endif
arch/arm64/include/asm/arm_pmuv3.h +5 -20
@@ -46,12 +46,12 @@ static inline u32 read_pmuver(void) ID_AA64DFR0_EL1_PMUVer_SHIFT); } -static inline void write_pmcr (u32 val) +static inline void write_pmcr (u64 val) {write_sysreg (val, pmcr_el0); } -static inline u32 read_pmcr (void ) +static inline u64 read_pmcr (void ) {return read_sysreg (pmcr_el0); }
@@ -71,21 +71,6 @@ static inline u64 read_pmccntr(void)return read_sysreg (pmccntr_el0); } -static inline void write_pmxevcntr (u32 val) -{ -write_sysreg (val, pmxevcntr_el0); -} - -static inline u32 read_pmxevcntr (void ) -{ -return read_sysreg (pmxevcntr_el0); -} - -static inline void write_pmxevtyper (u32 val) -{ -write_sysreg (val, pmxevtyper_el0); -} -static inline void write_pmcntenset (u32 val) {write_sysreg (val, pmcntenset_el0);
@@ -106,7 +91,7 @@ static inline void write_pmintenclr(u32 val)write_sysreg (val, pmintenclr_el1); } -static inline void write_pmccfiltr (u32 val) +static inline void write_pmccfiltr (u64 val) {write_sysreg (val, pmccfiltr_el0); }
@@ -126,12 +111,12 @@ static inline void write_pmuserenr(u32 val)write_sysreg (val, pmuserenr_el0); } -static inline u32 read_pmceid0 (void ) +static inline u64 read_pmceid0 (void ) {return read_sysreg (pmceid0_el0); } -static inline u32 read_pmceid1 (void ) +static inline u64 read_pmceid1 (void ) {return read_sysreg (pmceid1_el0); }
drivers/perf/arm_pmuv3.c +3 -3
@@ -428,12 +428,12 @@ static inline bool armv8pmu_event_is_chained(struct perf_event *event)#define ARMV8_IDX_TO_COUNTER (x) \ (((x) - ARMV8_IDX_COUNTER0) & ARMV8_PMU_COUNTER_MASK) -static inline u32 armv8pmu_pmcr_read (void ) +static inline u64 armv8pmu_pmcr_read (void ) {return read_pmcr (); } -static inline void armv8pmu_pmcr_write (u32 val) +static inline void armv8pmu_pmcr_write (u64 val) { val &=ARMV8_PMU_PMCR_MASK ;isb ();
@@ -957,7 +957,7 @@ static int armv8pmu_set_event_filter(struct hw_perf_event *event,static void armv8pmu_reset (void *info) {struct arm_pmu *cpu_pmu = (struct arm_pmu *)info; -u32 pmcr; +u64 pmcr;/* The counter and interrupt enable registers are unknown at reset. */ armv8pmu_disable_counter (U32_MAX );
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 590/603 fbdev: imsttfb: fix double free in probe()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <[email protected]>
[ Upstream commit e08c30efda21ef4c0ec084a3a9581c220b442ba9 ]
The init_imstt() function calls framebuffer_release() on error and then the probe() function calls it again. It should only be done in probe.
--- drivers/video/fbdev/imsttfb.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)
drivers/video/fbdev/imsttfb.c +1 -5
@@ -1419,7 +1419,6 @@ static int init_imstt(struct fb_info *info)if ((info->var.xres * info->var.yres) * (info->var.bits_per_pixel >>3 ) > info->fix.smem_len || !(compute_imstt_regvals (par, info->var.xres, info->var.yres))) {printk ("imsttfb: %ux%ux%u not supported\n" , info->var.xres, info->var.yres, info->var.bits_per_pixel); -framebuffer_release (info);return -ENODEV ; }
@@ -1451,14 +1450,11 @@ static int init_imstt(struct fb_info *info)FBINFO_HWACCEL_FILLRECT |FBINFO_HWACCEL_YPAN ; -if (fb_alloc_cmap (&info->cmap,0 ,0 )) { -framebuffer_release (info); +if (fb_alloc_cmap (&info->cmap,0 ,0 ))return -ENODEV ; - }if (register_framebuffer (info) <0 ) {fb_dealloc_cmap (&info->cmap); -framebuffer_release (info);return -ENODEV ; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 591/603 fbdev: imsttfb: fix a resource leak in probe
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <[email protected]>
[ Upstream commit aba6ab57a910ad4b940c2024d15f2cdbf5b7f76b ]
I've re-written the error handling but the bug is that if init_imstt() fails we need to call iounmap(par->cmap_regs).
--- drivers/video/fbdev/imsttfb.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-)
drivers/video/fbdev/imsttfb.c +16 -13
@@ -1494,8 +1494,8 @@ static int imsttfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)if (!request_mem_region (addr, size,"imsttfb" )) {printk (KERN_ERR "imsttfb: Can't reserve memory region\n" ); -framebuffer_release (info); -return -ENODEV ; + ret = -ENODEV ; + goto release_info; }switch (pdev->device) {
@@ -1512,36 +1512,39 @@ static int imsttfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)printk (KERN_INFO "imsttfb: Device 0x%x unknown, " "contact maintainer.\n" , pdev->device); ret = -ENODEV ; - goto error; + goto release_mem_region; } info->fix.smem_start = addr; info->screen_base = (__u8 *)ioremap (addr, par->ramdac ==IBM ?0x400000 :0x800000 );if (!info->screen_base) - goto error; + goto release_mem_region; info->fix.mmio_start = addr +0x800000 ; par->dc_regs =ioremap (addr +0x800000 ,0x1000 );if (!par->dc_regs) - goto error; + goto unmap_screen_base; par->cmap_regs_phys = addr +0x840000 ; par->cmap_regs = (__u8 *)ioremap (addr +0x840000 ,0x1000 );if (!par->cmap_regs) - goto error; + goto unmap_dc_regs; info->pseudo_palette = par->palette; ret =init_imstt (info);if (ret) - goto error; + goto unmap_cmap_regs;pci_set_drvdata (pdev, info); -return ret; +return 0 ; -error: -if (par->dc_regs) -iounmap (par->dc_regs); -if (info->screen_base) -iounmap (info->screen_base); +unmap_cmap_regs: +iounmap (par->cmap_regs); +unmap_dc_regs: +iounmap (par->dc_regs); +unmap_screen_base: +iounmap (info->screen_base); +release_mem_region:release_mem_region (addr, size); +release_info:framebuffer_release (info);return ret; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 592/603 ALSA: hda/realtek: Add support dual speaker for Dell
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kailang Yang <[email protected]>
[ Upstream commit f0d9da19d7de9e845e7a93a901c4b9658df6b492 ]
Dell new platform support dual speaker. But BIOS verb table only show one speaker. It will fill verb table for second speaker. Then bind with CS AMP model.
--- sound/pci/hda/patch_realtek.c | 40 +++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 7 deletions(-)
sound/pci/hda/patch_realtek.c +33 -7
@@ -7262,8 +7262,10 @@ enum {ALC256_FIXUP_ASUS_MIC_NO_PRESENCE ,ALC299_FIXUP_PREDATOR_SPK ,ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE , +ALC289_FIXUP_DELL_SPK1 ,ALC289_FIXUP_DELL_SPK2 ,ALC289_FIXUP_DUAL_SPK , +ALC289_FIXUP_RTK_AMP_DUAL_SPK ,ALC294_FIXUP_SPK2_TO_DAC1 ,ALC294_FIXUP_ASUS_DUAL_SPK , ALC285_FIXUP_THINKPAD_X1_GEN7,
@@ -7363,6 +7365,7 @@ enum {ALC287_FIXUP_THINKPAD_I2S_SPK ,ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD ,ALC2XX_FIXUP_HEADSET_MIC , + ALC289_FIXUP_DELL_CS35L41_SPI_2, };/* A special fixup for Lenovo C940 and Yoga Duet 7;
@@ -8589,6 +8592,15 @@ static const struct hda_fixup alc269_fixups[] = { .chained = true, .chain_id =ALC256_FIXUP_ASUS_HEADSET_MODE }, + [ALC289_FIXUP_DELL_SPK1] = { + .type = HDA_FIXUP_PINS, + .v.pins = (const struct hda_pintbl []) { + {0x14 ,0x90170140 }, + { } + }, + .chained = true, + .chain_id =ALC269_FIXUP_DELL4_MIC_NO_PRESENCE + }, [ALC289_FIXUP_DELL_SPK2] = { .type = HDA_FIXUP_PINS, .v.pins = (const struct hda_pintbl []) {
@@ -8604,6 +8616,12 @@ static const struct hda_fixup alc269_fixups[] = { .chained = true, .chain_id =ALC289_FIXUP_DELL_SPK2 }, + [ALC289_FIXUP_RTK_AMP_DUAL_SPK] = { + .type = HDA_FIXUP_FUNC, + .v.func = alc285_fixup_speaker2_to_dac1, + .chained = true, + .chain_id =ALC289_FIXUP_DELL_SPK1 + }, [ALC294_FIXUP_SPK2_TO_DAC1] = { .type = HDA_FIXUP_FUNC, .v.func = alc285_fixup_speaker2_to_dac1,
@@ -9471,6 +9489,12 @@ static const struct hda_fixup alc269_fixups[] = { .type = HDA_FIXUP_FUNC, .v.func = alc_fixup_headset_mic, }, + [ALC289_FIXUP_DELL_CS35L41_SPI_2] = { + .type = HDA_FIXUP_FUNC, + .v.func = cs35l41_fixup_spi_two, + .chained = true, + .chain_id =ALC289_FIXUP_DUAL_SPK + }, };static const struct snd_pci_quirk alc269_fixup_tbl[] = {
@@ -9581,13 +9605,15 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x1028 ,0x0c1c ,"Dell Precision 3540" ,ALC236_FIXUP_DELL_DUAL_CODECS ),SND_PCI_QUIRK (0x1028 ,0x0c1d ,"Dell Precision 3440" ,ALC236_FIXUP_DELL_DUAL_CODECS ),SND_PCI_QUIRK (0x1028 ,0x0c1e ,"Dell Precision 3540" ,ALC236_FIXUP_DELL_DUAL_CODECS ), -SND_PCI_QUIRK (0x1028 ,0x0cbd ,"Dell Oasis 13 CS MTL-U" ,ALC245_FIXUP_CS35L41_SPI_2 ), -SND_PCI_QUIRK (0x1028 ,0x0cbe ,"Dell Oasis 13 2-IN-1 MTL-U" ,ALC245_FIXUP_CS35L41_SPI_2 ), -SND_PCI_QUIRK (0x1028 ,0x0cbf ,"Dell Oasis 13 Low Weight MTU-L" ,ALC245_FIXUP_CS35L41_SPI_2 ), -SND_PCI_QUIRK (0x1028 ,0x0cc1 ,"Dell Oasis 14 MTL-H/U" ,ALC245_FIXUP_CS35L41_SPI_2 ), -SND_PCI_QUIRK (0x1028 ,0x0cc2 ,"Dell Oasis 14 2-in-1 MTL-H/U" ,ALC245_FIXUP_CS35L41_SPI_2 ), -SND_PCI_QUIRK (0x1028 ,0x0cc3 ,"Dell Oasis 14 Low Weight MTL-U" ,ALC245_FIXUP_CS35L41_SPI_2 ), -SND_PCI_QUIRK (0x1028 ,0x0cc4 ,"Dell Oasis 16 MTL-H/U" ,ALC245_FIXUP_CS35L41_SPI_2 ), +SND_PCI_QUIRK (0x1028 ,0x0cbd ,"Dell Oasis 13 CS MTL-U" ,ALC289_FIXUP_DELL_CS35L41_SPI_2 ), +SND_PCI_QUIRK (0x1028 ,0x0cbe ,"Dell Oasis 13 2-IN-1 MTL-U" ,ALC289_FIXUP_DELL_CS35L41_SPI_2 ), +SND_PCI_QUIRK (0x1028 ,0x0cbf ,"Dell Oasis 13 Low Weight MTU-L" ,ALC289_FIXUP_DELL_CS35L41_SPI_2 ), +SND_PCI_QUIRK (0x1028 ,0x0cc0 ,"Dell Oasis 13" ,ALC289_FIXUP_RTK_AMP_DUAL_SPK ), +SND_PCI_QUIRK (0x1028 ,0x0cc1 ,"Dell Oasis 14 MTL-H/U" ,ALC289_FIXUP_DELL_CS35L41_SPI_2 ), +SND_PCI_QUIRK (0x1028 ,0x0cc2 ,"Dell Oasis 14 2-in-1 MTL-H/U" ,ALC289_FIXUP_DELL_CS35L41_SPI_2 ), +SND_PCI_QUIRK (0x1028 ,0x0cc3 ,"Dell Oasis 14 Low Weight MTL-U" ,ALC289_FIXUP_DELL_CS35L41_SPI_2 ), +SND_PCI_QUIRK (0x1028 ,0x0cc4 ,"Dell Oasis 16 MTL-H/U" ,ALC289_FIXUP_DELL_CS35L41_SPI_2 ), +SND_PCI_QUIRK (0x1028 ,0x0cc5 ,"Dell Oasis 14" ,ALC289_FIXUP_RTK_AMP_DUAL_SPK ),SND_PCI_QUIRK (0x1028 ,0x164a ,"Dell" ,ALC293_FIXUP_DELL1_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1028 ,0x164b ,"Dell" ,ALC293_FIXUP_DELL1_MIC_NO_PRESENCE ), SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 593/603 fbdev: fsl-diu-fb: mark wr_reg_wa() static
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
[ Upstream commit a5035c81847430dfa3482807b07325f29e9e8c09 ]
wr_reg_wa() is not an appropriate name for a global function, and doesn't need to be global anyway, so mark it static and avoid the warning:
drivers/video/fbdev/fsl-diu-fb.c:493:6: error: no previous prototype for 'wr_reg_wa' [-Werror=missing-prototypes]
--- drivers/video/fbdev/fsl-diu-fb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/video/fbdev/fsl-diu-fb.c +1 -1
@@ -490,7 +490,7 @@ static enum fsl_diu_monitor_port fsl_diu_name_to_port(const char *s)* Workaround for failed writing desc register of planes. * Needed with MPC5121 DIU rev 2.0 silicon. */ -void wr_reg_wa (u32 *reg,u32 val) +static void wr_reg_wa (u32 *reg,u32 val) { do { out_be32(reg, val);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 594/603 tracing/kprobes: Fix the order of argument descriptions
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yujie Liu <[email protected]>
[ Upstream commit f032c53bea6d2057c14553832d846be2f151cfb2 ]
The order of descriptions should be consistent with the argument list of the function, so "kretprobe" should be the second one.
int __kprobe_event_gen_cmd_start(struct dynevent_cmd *cmd, bool kretprobe,
const char *name, const char *loc, ...)
--- kernel/trace/trace_kprobe.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/trace/trace_kprobe.c +1 -1
@@ -1020,9 +1020,9 @@ EXPORT_SYMBOL_GPL(kprobe_event_cmd_init);/** * __kprobe_event_gen_cmd_start - Generate a kprobe event command from arg list * @cmd: A pointer to the dynevent_cmd struct representing the new event +* @kretprobe: Is this a return probe? * @name: The name of the kprobe event * @loc: The location of the kprobe event -* @kretprobe: Is this a return probe? * @...: Variable number of arg (pairs), one pair for each field * * NOTE: Users normally won't want to call this function directly, but
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 595/603 eventfs: Check for NULL ef in eventfs_set_attr()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steven Rostedt (Google) <[email protected]>
The top level events directory dentry does not have a d_fsdata set to a eventfs_file pointer. This dentry is still passed to eventfs_set_attr(). It can not assume that the d_fsdata is set. Check for that.
--- fs/tracefs/event_inode.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/tracefs/event_inode.c +2 -2
@@ -113,14 +113,14 @@ static int eventfs_set_attr(struct mnt_idmap *idmap, struct dentry *dentry,mutex_lock (&eventfs_mutex); ef = dentry->d_fsdata; -if (ef->is_freed) { +if (ef && ef->is_freed) {/* Do not allow changes if the event is about to be removed. */ mutex_unlock (&eventfs_mutex);return -ENODEV ; } ret =simple_setattr (idmap, dentry, iattr); -if (!ret) +if (!ret && ef)update_attr (ef, iattr);mutex_unlock (&eventfs_mutex);return ret;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 596/603 selftests: mptcp: run userspace pm tests slower
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Geliang Tang <[email protected]>
commit f4a75e9d11001481dca005541b6dc861e1472f03 upstream.
Some userspace pm tests failed are reported by CI:
112 userspace pm add & remove address
syn [ ok ]
synack [ ok ]
ack [ ok ]
add [ ok ]
echo [ ok ]
mptcp_info subflows=1:1 [ ok ]
subflows_total 2:2 [ ok ]
mptcp_info add_addr_signal=1:1 [ ok ]
rm [ ok ]
rmsf [ ok ] Info: invert
mptcp_info subflows=0:0 [ ok ]
subflows_total 1:1 [fail]
got subflows 0:0 expected 1:1
Server ns stats
TcpPassiveOpens 2 0.0 TcpInSegs 118 0.0
This patch fixes them by changing 'speed' to 5 to run the tests much more slowly.
--- tools/testing/selftests/net/mptcp/mptcp_join.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
tools/testing/selftests/net/mptcp/mptcp_join.sh +2 -2
@@ -3417,7 +3417,7 @@ userspace_tests() continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then set_userspace_pm $ns1 pm_nl_set_limits $ns2 1 1 - speed=10 \ + speed=5 \ run_tests $ns1 $ns2 10.0.1.1 & local tests_pid=$! wait_mpj $ns1
@@ -3438,7 +3438,7 @@ userspace_tests() continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then set_userspace_pm $ns2 pm_nl_set_limits $ns1 0 1 - speed=10 \ + speed=5 \ run_tests $ns1 $ns2 10.0.1.1 & local tests_pid=$! wait_mpj $ns2
Greg Kroah-Hartman
maintainerPATCH 597/603 selftests: mptcp: fix wait_rm_addr/sf parameters
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Geliang Tang <[email protected]>
commit 9168ea02b898d3dde98b51e4bd3fb082bd438dab upstream.
The second input parameter of 'wait_rm_addr/sf $1 1' is misused. If it's 1, wait_rm_addr/sf will never break, and will loop ten times, then 'wait_rm_addr/sf' equals to 'sleep 1'. This delay time is too long, which can sometimes make the tests fail.
A better way to use wait_rm_addr/sf is to use rm_addr/sf_count to obtain the current value, and then pass into wait_rm_addr/sf.
--- tools/testing/selftests/net/mptcp/mptcp_join.sh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)
tools/testing/selftests/net/mptcp/mptcp_join.sh +10 -4
@@ -3289,6 +3289,7 @@ userspace_pm_rm_sf_addr_ns1() local addr=$1 local id=$2 local tk sp da dp + local cnt_addr cnt_sf tk=$(grep "type:1," "$evts_ns1" | sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q')
@@ -3298,11 +3299,13 @@ userspace_pm_rm_sf_addr_ns1() sed -n 's/.*\(daddr6:\)\([0-9a-f:.]*\).*$/\2/p;q') dp=$(grep "type:10" "$evts_ns1" | sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q') + cnt_addr=$(rm_addr_count ${ns1}) + cnt_sf=$(rm_sf_count ${ns1}) ip netns exec $ns1 ./pm_nl_ctl rem token $tk id $id ip netns exec $ns1 ./pm_nl_ctl dsf lip "::ffff:$addr" \ lport $sp rip $da rport $dp token $tk - wait_rm_addr $ns1 1 - wait_rm_sf $ns1 1 + wait_rm_addr $ns1 "${cnt_addr}" + wait_rm_sf $ns1 "${cnt_sf}" } userspace_pm_add_sf()
@@ -3324,17 +3327,20 @@ userspace_pm_rm_sf_addr_ns2() local addr=$1 local id=$2 local tk da dp sp + local cnt_addr cnt_sf tk=$(sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2") da=$(sed -n 's/.*\(daddr4:\)\([0-9.]*\).*$/\2/p;q' "$evts_ns2") dp=$(sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2") sp=$(grep "type:10" "$evts_ns2" | sed -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q') + cnt_addr=$(rm_addr_count ${ns2}) + cnt_sf=$(rm_sf_count ${ns2}) ip netns exec $ns2 ./pm_nl_ctl rem token $tk id $id ip netns exec $ns2 ./pm_nl_ctl dsf lip $addr lport $sp \ rip $da rport $dp token $tk - wait_rm_addr $ns2 1 - wait_rm_sf $ns2 1 + wait_rm_addr $ns2 "${cnt_addr}" + wait_rm_sf $ns2 "${cnt_sf}" } userspace_tests()
Greg Kroah-Hartman
maintainerPATCH 598/603 io_uring/net: ensure socket is marked connected on connect retry
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jens Axboe <[email protected]>
commit f8f9ab2d98116e79d220f1d089df7464ad4e026d upstream.
io_uring does non-blocking connection attempts, which can yield some unexpected results if a connect request is re-attempted by an an application. This is equivalent to the following sync syscall sequence:
sock = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, IPPROTO_TCP); connect(sock, &addr, sizeof(addr);
ret == -1 and errno == EINPROGRESS expected here. Now poll for POLLOUT on sock, and when that returns, we expect the socket to be connected. But if we follow that procedure with:
connect(sock, &addr, sizeof(addr));
you'd expect ret == -1 and errno == EISCONN here, but you actually get ret == 0. If we attempt the connection one more time, then we get EISCON as expected.
io_uring used to do this, but turns out that bluetooth fails with EBADFD if you attempt to re-connect. Also looks like EISCONN _could_ occur with this sequence.
Retain the ->in_progress logic, but work-around a potential EISCONN or EBADFD error and only in those cases look at the sock_error(). This should work in general and avoid the odd sequence of a repeated connect request returning success when the socket is already connected.
This is all a side effect of the socket state being in a CONNECTING state when we get EINPROGRESS, and only a re-connect or other related operation will turn that into CONNECTED.
--- io_uring/net.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-)
io_uring/net.c +11 -13
@@ -1461,16 +1461,6 @@ int io_connect(struct io_kiocb *req, unsint ret;bool force_nonblock = issue_flags &IO_URING_F_NONBLOCK ; -if (connect->in_progress) { -struct socket *socket; - - ret = -ENOTSOCK ; - socket =sock_from_file (req->file); -if (socket) - ret =sock_error (socket->sk); - goto out; - } -if (req_has_async_data (req)) { io = req->async_data; }else {
@@ -1490,9 +1480,7 @@ int io_connect(struct io_kiocb *req, uns && force_nonblock) {if (ret == -EINPROGRESS ) { connect->in_progress = true; -return -EAGAIN ; - } -if (ret == -ECONNABORTED ) { + }else if (ret == -ECONNABORTED ) {if (connect->seen_econnaborted) goto out; connect->seen_econnaborted = true;
@@ -1506,6 +1494,16 @@ int io_connect(struct io_kiocb *req, unsmemcpy (req->async_data, &__io,sizeof (__io));return -EAGAIN ; } +if (connect->in_progress) { +/* +* At least bluetooth will return -EBADFD on a re-connect +* attempt, and it's (supposedly) also valid to get -EISCONN +* which means the previous result is good. For both of these, +* grab the sock_error() and use that for the completion. +*/ +if (ret == -EBADFD || ret == -EISCONN ) + ret =sock_error (sock_from_file (req->file)->sk); + }if (ret == -ERESTARTSYS ) ret = -EINTR ; out:
Greg Kroah-Hartman
maintainerPATCH 599/603 x86/amd_nb: Use Family 19h Models 60h-7Fh Function 4 IDs
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yazen Ghannam <[email protected]>
commit 2a565258b3f4bbdc7a3c09cd02082cb286a7bffc upstream.
Three PCI IDs for DF Function 4 were defined but not used.
Add them to the "link" list.
--- arch/x86/kernel/amd_nb.c | 3 +++ 1 file changed, 3 insertions(+)
arch/x86/kernel/amd_nb.c +3 -0
@@ -112,6 +112,9 @@ static const struct pci_device_id amd_nb { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M10H_DF_F4) }, { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M40H_DF_F4) }, { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M50H_DF_F4) }, + { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M60H_DF_F4) }, + { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M70H_DF_F4) }, + { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M78H_DF_F4) }, { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CNB17H_F4) }, { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M00H_DF_F4) }, { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_MI200_DF_F4) },
Greg Kroah-Hartman
maintainerPATCH 600/603 Revert "PCI/ASPM: Disable only ASPM_STATE_L1 when driver, disables L1"
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Heiner Kallweit <[email protected]>
commit 3cb4f534bac010258b2688395c2f13459a932be9 upstream.
This reverts commit fb097dcd5a28c0a2325632405c76a66777a6bed9.
After fb097dcd5a28 ("PCI/ASPM: Disable only ASPM_STATE_L1 when driver disables L1"), disabling L1 via pci_disable_link_state(PCIE_LINK_STATE_L1), then enabling one substate, e.g., L1.1, via sysfs actually enables *all* the substates.
For example, r8169 disables L1 because of hardware issues on a number of systems, which implicitly disables the L1.1 and L1.2 substates.
On some systems, L1 and L1.1 work fine, but L1.2 causes missed rx packets. Enabling L1.1 via the sysfs "aspm_l1_1" attribute unexpectedly enables L1.2 as well as L1.1.
After fb097dcd5a28, pci_disable_link_state(PCIE_LINK_STATE_L1) adds only ASPM_L1 (but not any of the L1.x substates) to the "aspm_disable" mask:
--- Before fb097dcd5a28
+++ After fb097dcd5a28
# r8169 disables L1:
pci_disable_link_state(PCIE_LINK_STATE_L1)
- disable |= ASPM_L1 | ASPM_L1_1 | ASPM_L1_2 | ... # disable L1, L1.x
+ disable |= ASPM_L1 # disable L1 only # write "1" to sysfs "aspm_l1_1" attribute:
l1_1_aspm
aspm_attr_store_common(state = ASPM_L1_1)
disable &= ~ASPM_L1_1 # enable L1.1
if (state & (ASPM_L1_1 | ...)) # if enabling any substate
disable &= ~ASPM_L1 # enable L1# final state: - disable = ASPM_L1_2 | ... # L1, L1.1 enabled; L1.2 disabled + disable = 0 # L1, L1.1, L1.2 all enabled
Enabling an L1.x substate removes the substate and L1 from the "aspm_disable" mask. After fb097dcd5a28, the substates were not added to the mask when disabling L1, so enabling one substate implicitly enables all of them.
Revert fb097dcd5a28 so enabling one substate doesn't enable the others.
--- drivers/pci/pcie/aspm.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/pci/pcie/aspm.c +2 -1
@@ -1059,7 +1059,8 @@ static int __pci_disable_link_state(struif (state &PCIE_LINK_STATE_L0S ) link->aspm_disable |=ASPM_STATE_L0S ;if (state &PCIE_LINK_STATE_L1 ) - link->aspm_disable |=ASPM_STATE_L1 ; +/* L1 PM substates require L1 */ + link->aspm_disable |=ASPM_STATE_L1 |ASPM_STATE_L1SS ;if (state &PCIE_LINK_STATE_L1_1 ) link->aspm_disable |=ASPM_STATE_L1_1 ;if (state &PCIE_LINK_STATE_L1_2 )
Greg Kroah-Hartman
maintainerPATCH 601/603 Revert "mmc: core: Capture correct oemid-bits for eMMC cards"
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dominique Martinet <[email protected]>
commit 421b605edb1ce611dee06cf6fd9a1c1f2fd85ad0 upstream.
This reverts commit 84ee19bffc9306128cd0f1c650e89767079efeff.
The commit above made quirks with an OEMID fail to be applied, as they were checking card->cid.oemid for the full 16 bits defined in MMC_FIXUP macros but the field would only contain the bottom 8 bits.
eMMC v5.1A might have bogus values in OEMID's higher bits so another fix will be made, but it has been decided to revert this until that is ready.
--- drivers/mmc/core/mmc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/mmc/core/mmc.c +1 -1
@@ -104,7 +104,7 @@ static int mmc_decode_cid(struct mmc_carcase 3 :/* MMC v3.1 - v3.3 */ case 4 :/* MMC v4 */ card->cid.manfid =UNSTUFF_BITS (resp,120 ,8 ); - card->cid.oemid =UNSTUFF_BITS (resp,104 ,8 ); + card->cid.oemid =UNSTUFF_BITS (resp,104 ,16 ); card->cid.prod_name[0 ] =UNSTUFF_BITS (resp,96 ,8 ); card->cid.prod_name[1 ] =UNSTUFF_BITS (resp,88 ,8 ); card->cid.prod_name[2 ] =UNSTUFF_BITS (resp,80 ,8 );
Greg Kroah-Hartman
maintainerPATCH 602/603 btrfs: use u64 for buffer sizes in the tree search ioctls
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Filipe Manana <[email protected]>
[ Upstream commit dec96fc2dcb59723e041416b8dc53e011b4bfc2e ]
In the tree search v2 ioctl we use the type size_t, which is an unsigned long, to track the buffer size in the local variable 'buf_size'. An unsigned long is 32 bits wide on a 32 bits architecture. The buffer size defined in struct btrfs_ioctl_search_args_v2 is a u64, so when we later try to copy the local variable 'buf_size' to the argument struct, when the search returns -EOVERFLOW, we copy only 32 bits which will be a problem on big endian systems.
Fix this by using a u64 type for the buffer sizes, not only at btrfs_ioctl_tree_search_v2(), but also everywhere down the call chain so that we can use the u64 at btrfs_ioctl_tree_search_v2().
--- fs/btrfs/ioctl.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
fs/btrfs/ioctl.c +5 -5
@@ -1528,7 +1528,7 @@ static noinline int key_in_sk(struct btrfs_key *key, static noinline int copy_to_sk(struct btrfs_path *path,struct btrfs_key *key,struct btrfs_ioctl_search_key *sk, -size_t *buf_size, +u64 *buf_size,char __user *ubuf,unsigned long *sk_offset,int *num_found)
@@ -1660,7 +1660,7 @@ static noinline int copy_to_sk(struct btrfs_path *path, static noinline int search_ioctl(struct inode *inode,struct btrfs_ioctl_search_key *sk, -size_t *buf_size, +u64 *buf_size,char __user *ubuf) {struct btrfs_fs_info *info =btrfs_sb (inode->i_sb);
@@ -1733,7 +1733,7 @@ static noinline int btrfs_ioctl_tree_search(struct inode *inode,struct btrfs_ioctl_search_args __user *uargs = argp;struct btrfs_ioctl_search_key sk;int ret; -size_t buf_size; +u64 buf_size;if (!capable (CAP_SYS_ADMIN ))return -EPERM ;
@@ -1763,8 +1763,8 @@ static noinline int btrfs_ioctl_tree_search_v2(struct inode *inode,struct btrfs_ioctl_search_args_v2 __user *uarg = argp;struct btrfs_ioctl_search_args_v2 args;int ret; -size_t buf_size; -const size_t buf_limit =SZ_16M ; +u64 buf_size; +const u64 buf_limit =SZ_16M ;if (!capable (CAP_SYS_ADMIN ))return -EPERM ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 603/603 btrfs: make found_logical_ret parameter mandatory for function queue_scrub_stripe()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qu Wenruo <[email protected]>
[ Upstream commit 47e2b06b7b5cb356a987ba3429550c3a89ea89d6 ]
[BUG]
There is a compilation warning reported on commit ae76d8e3e135 ("btrfs:
scrub: fix grouping of read IO"), where gcc (14.0.0 20231022 experimental) is reporting the following uninitialized variable:
fs/btrfs/scrub.c: In function ‘scrub_simple_mirror.isra’:
fs/btrfs/scrub.c:2075:29: error: ‘found_logical’ may be used uninitialized [-Werror=maybe-uninitialized[https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmaybe-uninitialized]]
2075 | cur_logical = found_logical + BTRFS_STRIPE_LEN;
fs/btrfs/scrub.c:2040:21: note: ‘found_logical’ was declared here
2040 | u64 found_logical;
| ^~~~~~~~~~~~~[CAUSE]
This is a false alert, as @found_logical is passed as parameter @found_logical_ret of function queue_scrub_stripe().
As long as queue_scrub_stripe() returned 0, we would update @found_logical_ret. And if queue_scrub_stripe() returned >0 or <0, the caller would not utilized @found_logical, thus there should be nothing wrong.
Although the triggering gcc is still experimental, it looks like the extra check on "if (found_logical_ret)" can sometimes confuse the compiler.
Meanwhile the only caller of queue_scrub_stripe() is always passing a valid pointer, there is no need for such check at all.
[FIX]
Although the report itself is a false alert, we can still make it more explicit by:
- Replace the check for @found_logical_ret with ASSERT()
- Initialize @found_logical to U64_MAX
- Add one extra ASSERT() to make sure @found_logical got updated
--- fs/btrfs/scrub.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
fs/btrfs/scrub.c +7 -3
@@ -1798,6 +1798,9 @@ static int queue_scrub_stripe(struct scrub_ctx *sctx, struct btrfs_block_group **/ ASSERT (sctx->cur_stripe <SCRUB_TOTAL_STRIPES ); +/* @found_logical_ret must be specified. */ +ASSERT (found_logical_ret); + stripe = &sctx->stripes[sctx->cur_stripe];scrub_reset_stripe (stripe); ret = scrub_find_fill_first_stripe(bg, &sctx->extent_path,
@@ -1806,8 +1809,7 @@ static int queue_scrub_stripe(struct scrub_ctx *sctx, struct btrfs_block_group */* Either >0 as no more extents or <0 for error. */ if (ret)return ret; -if (found_logical_ret) - *found_logical_ret = stripe->logical; + *found_logical_ret = stripe->logical; sctx->cur_stripe++;/* We filled one group, submit it. */
@@ -2010,7 +2012,7 @@ static int scrub_simple_mirror(struct scrub_ctx *sctx,/* Go through each extent items inside the logical range */ while (cur_logical < logical_end) { -u64 found_logical; +u64 found_logical =U64_MAX ;u64 cur_physical = physical + cur_logical - logical_start;/* Canceled? */
@@ -2045,6 +2047,8 @@ static int scrub_simple_mirror(struct scrub_ctx *sctx,if (ret <0 )break ; +/* queue_scrub_stripe() returned 0, @found_logical must be updated. */ +ASSERT (found_logical !=U64_MAX ); cur_logical = found_logical +BTRFS_STRIPE_LEN ;/* Don't hold CPU for too long time */
Signature · 1 line
2.42.0
Hello,
Quoted 5 lines · On Wed, 15 Nov 2023 14:09:05 -0500 Greg Kroah-Hartman…
This is the start of the stable review cycle for the 6.6.2 release. There are 603 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Quoted 8 lines
Responses should be made by Fri, 17 Nov 2023 19:14:03 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.2-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.
This rc kernel passes DAMON functionality test[1] on my test machine. Attaching the test results summary below. Please note that I retrieved the kernel from linux-stable-rc tree[2].
[1] https://github.com/awslabs/damon-tests/tree/next/corr
[2] df34d612fd4e ("Linux 6.6.2-rc1")
Thanks,
SJ
[...]
---
ok 1 selftests: damon: debugfs_attrs.sh
ok 2 selftests: damon: debugfs_schemes.sh
ok 3 selftests: damon: debugfs_target_ids.sh
ok 4 selftests: damon: debugfs_empty_targets.sh
ok 5 selftests: damon: debugfs_huge_count_read_write.sh
ok 6 selftests: damon: debugfs_duplicate_context_creation.sh
ok 7 selftests: damon: debugfs_rm_non_contexts.sh
ok 8 selftests: damon: sysfs.sh
ok 9 selftests: damon: sysfs_update_removed_scheme_dir.sh
ok 10 selftests: damon: reclaim.sh
ok 11 selftests: damon: lru_sort.sh
ok 1 selftests: damon-tests: kunit.sh
ok 2 selftests: damon-tests: huge_count_read_write.sh
ok 3 selftests: damon-tests: buffer_overflow.sh
ok 4 selftests: damon-tests: rm_contexts.sh
ok 5 selftests: damon-tests: record_null_deref.sh
ok 6 selftests: damon-tests: dbgfs_target_ids_read_before_terminate_race.sh ok 7 selftests: damon-tests: dbgfs_target_ids_pid_leak.sh
ok 8 selftests: damon-tests: damo_tests.sh
ok 9 selftests: damon-tests: masim-record.sh
ok 10 selftests: damon-tests: build_i386.sh
ok 11 selftests: damon-tests: build_arm64.sh
ok 12 selftests: damon-tests: build_i386_idle_flag.sh
ok 13 selftests: damon-tests: build_i386_highpte.sh
ok 14 selftests: damon-tests: build_nomemcg.sh
[33m
[92mPASS [39m_remote_run_corr.sh SUCCESS
Quoted 5 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.2 release. There are 603 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Successfully compiled and installed bindeb-pkgs on my computer (Acer Aspire E15, Intel Core i3 Haswell). No noticeable regressions.
Signature · 1 line
An old man doll... just what I always wanted! - Clara
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.2 release. There are 603 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 17 Nov 2023 19:14:03 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.2-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
Built and booted successfully on RISC-V RV64 (HiFive Unmatched).
Hi Greg
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.2 release. There are 603 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 17 Nov 2023 19:14:03 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.2-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
6.6.2-rc1 tested.
Build successfully completed.
Boot successfully completed.
No dmesg regressions.
Video output normal.
Sound output normal.
Lenovo ThinkPad X1 Carbon Gen10(Intel i7-1260P(x86_64) arch linux)
Thanks
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.2 release. There are 603 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 17 Nov 2023 19:14:03 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.2-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.
NOTE:
Following kernel crash noticed while running selftests: ftrace on arm64 Juno-r2 device running stable-rc linux-6.6.y.
Link:
- https://lore.kernel.org/linux-trace-kernel/[email protected]/T/#u
## Build
* kernel: 6.6.2-rc1
* git: https://gitlab.com/Linaro/lkft/mirrors/stable/linux-stable-rc
* git branch: linux-6.6.y
* git commit: df34d612fd4ef266814366c8101094b7f83b6a92
* git describe: v6.6.1-604-gdf34d612fd4e
* test details:
https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.6.y/build/v6.6.1-604-gdf34d612fd4e
## Test Regressions (compared to v6.6.1)
## Metric Regressions (compared to v6.6.1)
## Test Fixes (compared to v6.6.1)
## Metric Fixes (compared to v6.6.1)
## Test result summary
total: 136854, pass: 118192, fail: 1765, skip: 16783, xfail: 114
## Build Summary
* arc: 5 total, 5 passed, 0 failed
* arm: 142 total, 141 passed, 1 failed
* arm64: 50 total, 47 passed, 3 failed
* i386: 40 total, 35 passed, 5 failed
* mips: 25 total, 25 passed, 0 failed
* parisc: 4 total, 4 passed, 0 failed
* powerpc: 36 total, 32 passed, 4 failed
* riscv: 25 total, 24 passed, 1 failed
* s390: 13 total, 13 passed, 0 failed
* sh: 10 total, 10 passed, 0 failed
* sparc: 8 total, 8 passed, 0 failed
* x86_64: 44 total, 43 passed, 1 failed
## Test suites summary
* boot
* kselftest-android
* kselftest-arm64
* kselftest-breakpoints
* kselftest-capabilities
* kselftest-cgroup
* kselftest-clone3
* kselftest-core
* kselftest-cpu-hotplug
* kselftest-cpufreq
* kselftest-drivers-dma-buf
* kselftest-efivarfs
* kselftest-exec
* kselftest-filesystems
* kselftest-filesystems-binderfs
* kselftest-filesystems-epoll
* kselftest-firmware
* kselftest-fpu
* kselftest-ftrace
* kselftest-futex
* kselftest-gpio
* kselftest-intel_pstate
* kselftest-ipc
* kselftest-ir
* kselftest-kcmp
* kselftest-kexec
* kselftest-kvm
* kselftest-lib
* kselftest-livepatch
* kselftest-membarrier
* kselftest-memfd
* kselftest-memory-hotplug
* kselftest-mincore
* kselftest-mount
* kselftest-mqueue
* kselftest-net
* kselftest-net-forwarding
* kselftest-net-mptcp
* kselftest-netfilter
* kselftest-nsfs
* kselftest-openat2
* kselftest-pid_namespace
* kselftest-pidfd
* kselftest-proc
* kselftest-pstore
* kselftest-ptrace
* kselftest-rseq
* kselftest-rtc
* kselftest-seccomp
* kselftest-sigaltstack
* kselftest-size
* kselftest-splice
* kselftest-static_keys
* kselftest-sync
* kselftest-sysctl
* kselftest-tc-testing
* kselftest-timens
* kselftest-timers
* kselftest-tmpfs
* kselftest-tpm2
* kselftest-user
* kselftest-user_events
* kselftest-vDSO
* kselftest-vm
* kselftest-watchdog
* kselftest-x86
* kselftest-zram
* kunit
* libgpiod
* libhugetlbfs
* log-parser-boot
* log-parser-test
* ltp-cap_bounds
* ltp-commands
* ltp-containers
* ltp-controllers
* ltp-cpuhotplug
* ltp-crypto
* ltp-cve
* ltp-dio
* ltp-fcntl-locktests
* ltp-filecaps
* ltp-fs
* ltp-fs_bind
* ltp-fs_perms_simple
* ltp-fsx
* ltp-hugetlb
* ltp-io
* ltp-ipc
* ltp-math
* ltp-mm
* ltp-nptl
* ltp-pty
* ltp-sched
* ltp-securebits
* ltp-smoke
* ltp-syscalls
* ltp-tracing
* network-basic-tests
* perf
* rcutorture
* v4l2-compliance
--
Linaro LKFT
https://lkft.linaro.org
Quoted 9 lines
This is the start of the stable review cycle for the 6.6.2 release. There are 603 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 17 Nov 2023 19:14:03 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.2-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my x86_64 and ARM64 test systems. No errors or regressions.
Thanks.
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.2 release. There are 603 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 17 Nov 2023 19:14:03 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.2-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
On ARCH_BRCMSTB using 32-bit and 64-bit ARM kernels build tested on BMIPS_GENERIC:
Signature · 1 line
Florian
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.2 release. There are 603 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 17 Nov 2023 19:14:03 +0000. Anything received after that time might be too late.
Build results:
total: 157 pass: 157 fail: 0 Qemu test results: total: 530 pass: 530 fail: 0
Guenter
Quoted 7 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.2 release. There are 603 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 17 Nov 2023 19:14:03 +0000. Anything received after that time might be too late.
Hi Greg,
6.6.2-rc1 tested.
Run tested on:
- Intel Alder Lake x86_64 (nuc12 i7-1260P)
In addition - build tested for:
- Allwinner A64
- Allwinner H3
- Allwinner H5
- Allwinner H6
- NXP iMX6
- NXP iMX8
- Qualcomm Dragonboard
- Rockchip RK3288
- Rockchip RK3328
- Rockchip RK3399pro
- Samsung Exynos
--
Rudi