5.15.139-rc1 review
Subsystems (6)
Greg Kroah-Hartman
maintainerPATCH 154/244 HID: logitech-hidpp: Move get_wireless_feature_index() check to hidpp_connect_event()
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
[ Upstream commit ba9de350509504fb748837b71e23d7e84c83d93c ]
Calling get_wireless_feature_index() from probe() causes the wireless_feature_index to only get set for unifying devices which are already connected at probe() time. It does not get set for devices which connect later.
Fix this by moving get_wireless_feature_index() to hidpp_connect_event(), this does not make a difference for devices connected at probe() since probe() will queue the hidpp_connect_event() for those at probe time.
This series has been tested on the following devices:
Logitech Bluetooth Laser Travel Mouse (bluetooth, HID++ 1.0) Logitech M720 Triathlon (bluetooth, HID++ 4.5)
Logitech M720 Triathlon (unifying, HID++ 4.5)
Logitech K400 Pro (unifying, HID++ 4.1)
Logitech K270 (eQUAD nano Lite, HID++ 2.0)
Logitech M185 (eQUAD nano Lite, HID++ 4.5)
Logitech LX501 keyboard (27 Mhz, HID++ builtin scroll-wheel, HID++ 1.0) Logitech M-RAZ105 mouse (27 Mhz, HID++ extra mouse buttons, HID++ 1.0)
And by bentiss:
Logitech Touchpad T650 (unifying)
Logitech Touchpad T651 (bluetooth)
Logitech MX Master 3B (BLE)
Logitech G403 (plain USB / Gaming receiver)
--- drivers/hid/hid-logitech-hidpp.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-)
drivers/hid/hid-logitech-hidpp.c +9 -11
@@ -1753,15 +1753,14 @@ static int hidpp_battery_get_property(struct power_supply *psy,/* -------------------------------------------------------------------------- */ #define HIDPP_PAGE_WIRELESS_DEVICE_STATUS 0x1d4b -static int hidpp_set_wireless_feature_index (struct hidpp_device *hidpp) +static int hidpp_get_wireless_feature_index (struct hidpp_device *hidpp,u8 *feature_index) {u8 feature_type;int ret; ret =hidpp_root_get_feature (hidpp,HIDPP_PAGE_WIRELESS_DEVICE_STATUS , - &hidpp->wireless_feature_index, - &feature_type); + feature_index, &feature_type);return ret; }
@@ -3950,6 +3949,13 @@ static void hidpp_connect_event(struct hidpp_device *hidpp) } } +if (hidpp->protocol_major >=2 ) { +u8 feature_index; + +if (!hidpp_get_wireless_feature_index (hidpp, &feature_index)) + hidpp->wireless_feature_index = feature_index; + } +if (hidpp->name == hdev->name && hidpp->protocol_major >=2 ) { name =hidpp_get_device_name (hidpp);if (name) {
@@ -4188,14 +4194,6 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)hidpp_overwrite_name (hdev); } -if (connected && hidpp->protocol_major >=2 ) { - ret =hidpp_set_wireless_feature_index (hidpp); -if (ret == -ENOENT ) - hidpp->wireless_feature_index =0 ; -else if (ret) - goto hid_hw_init_fail; - } -if (connected && (hidpp->quirks &HIDPP_QUIRK_CLASS_WTP )) { ret =wtp_get_config (hidpp);if (ret)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 155/244 ASoC: Intel: Skylake: Fix mem leak when parsing UUIDs fails
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Cezary Rojewski <[email protected]>
[ Upstream commit 168d97844a61db302dec76d44406e9d4d7106b8e ]
Error path in snd_skl_parse_uuids() shall free last allocated module if its instance_id allocation fails.
--- sound/soc/intel/skylake/skl-sst-utils.c | 1 + 1 file changed, 1 insertion(+)
sound/soc/intel/skylake/skl-sst-utils.c +1 -0
@@ -299,6 +299,7 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw, module->instance_id =devm_kzalloc (ctx->dev, size,GFP_KERNEL );if (!module->instance_id) { ret = -ENOMEM ; +kfree (module); goto free_uuid_list; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 156/244 padata: Fix refcnt handling in padata_free_shell()
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: WangJinchao <[email protected]>
[ Upstream commit 7ddc21e317b360c3444de3023bcc83b85fabae2f ]
In a high-load arm64 environment, the pcrypt_aead01 test in LTP can lead to system UAF (Use-After-Free) issues. Due to the lengthy analysis of the pcrypt_aead01 function call, I'll describe the problem scenario using a simplified model:
Suppose there's a user of padata named user_function that adheres to the padata requirement of calling padata_free_shell after serial() has been invoked, as demonstrated in the following code:
```c
struct request {
struct padata_priv padata;
struct completion *done;
};
void parallel(struct padata_priv *padata) {
do_something();
}
void serial(struct padata_priv *padata) {
struct request *request = container_of(padata,
struct request,
padata);
complete(request->done);
}
void user_function() {
DECLARE_COMPLETION(done)
padata->parallel = parallel;
padata->serial = serial;
padata_do_parallel();
wait_for_completion(&done);
padata_free_shell();
}
```In the corresponding padata.c file, there's the following code:
```c
static void padata_serial_worker(struct work_struct *serial_work) {
...
cnt = 0;
while (!list_empty(&local_list)) {
...
padata->serial(padata);
cnt++;
}
local_bh_enable();
if (refcount_sub_and_test(cnt, &pd->refcnt))
padata_free_pd(pd);
}
```Because of the high system load and the accumulation of unexecuted softirq at this moment, local_bh_enable() in padata takes longer to execute than usual. Subsequently, when accessing pd->refcnt, pd has already been released by padata_free_shell(), resulting in a UAF issue with pd->refcnt.
The fix is straightforward: add refcount_dec_and_test before calling padata_free_pd in padata_free_shell.
--- kernel/padata.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
kernel/padata.c +5 -1
@@ -1094,12 +1094,16 @@ EXPORT_SYMBOL(padata_alloc_shell);*/ void padata_free_shell (struct padata_shell *ps) { +struct parallel_data *pd; +if (!ps)return ;mutex_lock (&ps->pinst->lock);list_del (&ps->list); -padata_free_pd (rcu_dereference_protected (ps->pd,1 )); + pd =rcu_dereference_protected (ps->pd,1 ); +if (refcount_dec_and_test (&pd->refcnt)) +padata_free_pd (pd);mutex_unlock (&ps->pinst->lock);kfree (ps);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 157/244 crypto: qat - fix deadlock in backlog processing
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Giovanni Cabiddu <[email protected]>
[ Upstream commit 203b01001c4d741205b9c329acddc5193ed56fbd ]
If a request has the flag CRYPTO_TFM_REQ_MAY_BACKLOG set, the function qat_alg_send_message_maybacklog(), enqueues it in a backlog list if either (1) there is already at least one request in the backlog list, or
(2) the HW ring is nearly full or (3) the enqueue to the HW ring fails. If an interrupt occurs right before the lock in qat_alg_backlog_req() is taken and the backlog queue is being emptied, then there is no request in the HW queues that can trigger a subsequent interrupt that can clear the backlog queue. In addition subsequent requests are enqueued to the backlog list and not sent to the hardware.
Fix it by holding the lock while taking the decision if the request needs to be included in the backlog queue or not. This synchronizes the flow with the interrupt handler that drains the backlog queue.
For performance reasons, the logic has been changed to try to enqueue first without holding the lock.
--- drivers/crypto/qat/qat_common/qat_algs_send.c | 46 ++++++++++--------- 1 file changed, 25 insertions(+), 21 deletions(-)
drivers/crypto/qat/qat_common/qat_algs_send.c +25 -21
@@ -39,40 +39,44 @@ void qat_alg_send_backlog(struct qat_instance_backlog *backlog)spin_unlock_bh (&backlog->lock); } -static void qat_alg_backlog_req (struct qat_alg_req *req, -struct qat_instance_backlog *backlog) -{ -INIT_LIST_HEAD (&req->list); - -spin_lock_bh (&backlog->lock); -list_add_tail (&req->list, &backlog->list); -spin_unlock_bh (&backlog->lock); -} - -static int qat_alg_send_message_maybacklog (struct qat_alg_req *req) +static bool qat_alg_try_enqueue (struct qat_alg_req *req) {struct qat_instance_backlog *backlog = req->backlog;struct adf_etr_ring_data *tx_ring = req->tx_ring;u32 *fw_req = req->fw_req; -/* If any request is already backlogged, then add to backlog list */ +/* Check if any request is already backlogged */ if (!list_empty (&backlog->list)) - goto enqueue; +return false; -/* If ring is nearly full, then add to backlog list */ +/* Check if ring is nearly full */ if (adf_ring_nearly_full (tx_ring)) - goto enqueue; +return false; -/* If adding request to HW ring fails, then add to backlog list */ +/* Try to enqueue to HW ring */ if (adf_send_message (tx_ring, fw_req)) - goto enqueue; +return false; -return -EINPROGRESS ; +return true; +} -enqueue: -qat_alg_backlog_req (req, backlog); -return -EBUSY ; +static int qat_alg_send_message_maybacklog (struct qat_alg_req *req) +{ +struct qat_instance_backlog *backlog = req->backlog; +int ret = -EINPROGRESS ; + +if (qat_alg_try_enqueue (req)) +return ret; + +spin_lock_bh (&backlog->lock); +if (!qat_alg_try_enqueue (req)) { +list_add_tail (&req->list, &backlog->list); + ret = -EBUSY ; + } +spin_unlock_bh (&backlog->lock); + +return ret; }int qat_alg_send_message (struct qat_alg_req *req)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 158/244 ASoC: ams-delta.c: use component after check
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kuninori Morimoto <[email protected]>
[ Upstream commit bd0f7498bc9084d8cccc5484cd004b40f314b763 ]
static void cx81801_close()
{
...
(A) struct snd_soc_dapm_context *dapm = &component->card->dapm;
...
(B) if (!component)
return;
}(A) uses component before NULL check (B). This patch moves it after (B).
--- sound/soc/ti/ams-delta.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
sound/soc/ti/ams-delta.c +3 -1
@@ -303,7 +303,7 @@ static int cx81801_open(struct tty_struct *tty)static void cx81801_close (struct tty_struct *tty) {struct snd_soc_component *component = tty->disc_data; -struct snd_soc_dapm_context *dapm = &component->card->dapm; +struct snd_soc_dapm_context *dapm;del_timer_sync (&cx81801_timer);
@@ -315,6 +315,8 @@ static void cx81801_close(struct tty_struct *tty) v253_ops.close (tty); + dapm = &component->card->dapm; +/* Revert back to default audio input/output constellation */ snd_soc_dapm_mutex_lock (dapm);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 159/244 mfd: core: Un-constify mfd_cell.of_reg
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michał Mirosław <[email protected]>
[ Upstream commit 3c70342f1f0045dc827bb2f02d814ce31e0e0d05 ]
Enable dynamically filling in the whole mfd_cell structure. All other fields already allow that.
--- include/linux/mfd/core.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/linux/mfd/core.h +1 -1
@@ -92,7 +92,7 @@ struct mfd_cell {* (above) when matching OF nodes with devices that have identical * compatible strings */ -const u64 of_reg; +u64 of_reg;/* Set to 'true' to use 'of_reg' (above) - allows for of_reg=0 */ bool use_of_reg;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 160/244 mfd: core: Ensure disabled devices are skipped without aborting
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Herve Codina <[email protected]>
[ Upstream commit 7ba7bdef4d14e3722e2842da3b48cbadb73e52d6 ]
The loop searching for a matching device based on its compatible string is aborted when a matching disabled device is found. This abort prevents to add devices as soon as one disabled device is found.
Continue searching for an other device instead of aborting on the first disabled one fixes the issue.
--- drivers/mfd/mfd-core.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-)
drivers/mfd/mfd-core.c +12 -5
@@ -159,6 +159,7 @@ static int mfd_add_device(struct device *parent, int id,struct platform_device *pdev;struct device_node *np =NULL ;struct mfd_of_node_entry *of_entry, *tmp; +bool disabled = false;int ret = -ENOMEM ;int platform_id;int r;
@@ -196,11 +197,10 @@ static int mfd_add_device(struct device *parent, int id,if (IS_ENABLED (CONFIG_OF ) && parent->of_node && cell->of_compatible) {for_each_child_of_node (parent->of_node, np) {if (of_device_is_compatible (np, cell->of_compatible)) { -/* Ignore 'disabled' devices error free */ +/* Skip 'disabled' devices */ if (!of_device_is_available (np)) { -of_node_put (np); - ret =0 ; - goto fail_alias; + disabled = true; +continue ; } ret =mfd_match_of_node_to_dev (pdev, np, cell);
@@ -210,10 +210,17 @@ static int mfd_add_device(struct device *parent, int id,if (ret) goto fail_alias; -break ; + goto match; } } +if (disabled) { +/* Ignore 'disabled' devices error free */ + ret =0 ; + goto fail_alias; + } + +match:if (!pdev->dev.of_node)pr_warn ("%s: Failed to locate of_node [id: %d]\n" , cell->name, platform_id);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 161/244 mfd: dln2: Fix double put in dln2_probe
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dinghao Liu <[email protected]>
[ Upstream commit 759c409bc5fc496cbc22cd0b392d3cbb0c0e23eb ]
The dln2_free() already contains usb_put_dev(). Therefore, the redundant usb_put_dev() before dln2_free() may lead to a double free.
--- drivers/mfd/dln2.c | 1 - 1 file changed, 1 deletion(-)
drivers/mfd/dln2.c +0 -1
@@ -836,7 +836,6 @@ static int dln2_probe(struct usb_interface *interface,dln2_stop_rx_urbs (dln2); out_free: -usb_put_dev (dln2->usb_dev);dln2_free (dln2);return ret;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 162/244 mfd: arizona-spi: Set pdata.hpdet_channel for ACPI enumerated devs
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
[ Upstream commit 831d1af85133e1763d41e20414912d9a1058ea72 ]
Commit 9e86b2ad4c11 changed the channel used for HPDET detection (headphones vs lineout detection) from being hardcoded to ARIZONA_ACCDET_MODE_HPL (HP left channel) to it being configurable through arizona_pdata.hpdet_channel the DT/OF parsing added for filling arizona_pdata on devicetree platforms ensures that arizona_pdata.hpdet_channel gets set to ARIZONA_ACCDET_MODE_HPL when not specified in the devicetree-node.
But on ACPI platforms where arizona_pdata is filled by arizona_spi_acpi_probe() arizona_pdata.hpdet_channel was not getting set, causing it to default to 0 aka ARIZONA_ACCDET_MODE_MIC.
This causes headphones to get misdetected as line-out on some models. Fix this by setting hpdet_channel = ARIZONA_ACCDET_MODE_HPL.
--- drivers/mfd/arizona-spi.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/mfd/arizona-spi.c +3 -0
@@ -118,6 +118,9 @@ static int arizona_spi_acpi_probe(struct arizona *arizona) arizona->pdata.micd_ranges = arizona_micd_aosp_ranges; arizona->pdata.num_micd_ranges =ARRAY_SIZE (arizona_micd_aosp_ranges); +/* Use left headphone speaker for HP vs line-out detection */ + arizona->pdata.hpdet_channel =ARIZONA_ACCDET_MODE_HPL ; +return 0 ; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 163/244 leds: turris-omnia: Drop unnecessary mutex locking
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marek Behún <[email protected]>
[ Upstream commit 760b6b7925bf09491aafa4727eef74fc6bf738b0 ]
Do not lock driver mutex in the global LED panel brightness sysfs accessors brightness_show() and brightness_store().
The mutex locking is unnecessary here. The I2C transfers are guarded by I2C core locking mechanism, and the LED commands itself do not interfere with other commands.
Stable-dep-of: 6de283b96b31 ("leds: turris-omnia: Do not use SMBUS calls")
--- drivers/leds/leds-turris-omnia.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-)
drivers/leds/leds-turris-omnia.c +1 -10
@@ -156,12 +156,9 @@ static ssize_t brightness_show(struct device *dev, struct device_attribute *a, char *buf) {struct i2c_client *client =to_i2c_client (dev); -struct omnia_leds *leds =i2c_get_clientdata (client);int ret; -mutex_lock (&leds->lock); ret =i2c_smbus_read_byte_data (client,CMD_LED_GET_BRIGHTNESS ); -mutex_unlock (&leds->lock);if (ret <0 )return ret;
@@ -173,7 +170,6 @@ static ssize_t brightness_store(struct device *dev, struct device_attribute *a, const char *buf, size_t count) {struct i2c_client *client =to_i2c_client (dev); -struct omnia_leds *leds =i2c_get_clientdata (client);unsigned long brightness;int ret;
@@ -183,15 +179,10 @@ static ssize_t brightness_store(struct device *dev, struct device_attribute *a,if (brightness >100 )return -EINVAL ; -mutex_lock (&leds->lock); ret =i2c_smbus_write_byte_data (client,CMD_LED_SET_BRIGHTNESS , (u8 )brightness); -mutex_unlock (&leds->lock); - -if (ret <0 ) -return ret; -return count; +return ret <0 ? ret : count; }static DEVICE_ATTR_RW (brightness);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 164/244 leds: turris-omnia: Do not use SMBUS calls
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marek Behún <[email protected]>
[ Upstream commit 6de283b96b31b4890e3ee8c86caca2a3a30d1011 ]
The leds-turris-omnia driver uses three function for I2C access:
- i2c_smbus_write_byte_data() and i2c_smbus_read_byte_data(), which cause an emulated SMBUS transfer,
- i2c_master_send(), which causes an ordinary I2C transfer.
The Turris Omnia MCU LED controller is not semantically SMBUS, it operates as a simple I2C bus. It does not implement any of the SMBUS specific features, like PEC, or procedure calls, or anything. Moreover the I2C controller driver also does not implement SMBUS, and so the emulated SMBUS procedure from drivers/i2c/i2c-core-smbus.c is used for the SMBUS calls, which gives an unnecessary overhead.
When I first wrote the driver, I was unaware of these facts, and I simply used the first function that worked.
Drop the I2C SMBUS calls and instead use simple I2C transfers.
--- drivers/leds/leds-turris-omnia.c | 54 +++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 12 deletions(-)
drivers/leds/leds-turris-omnia.c +42 -12
@@ -2,7 +2,7 @@/* * CZ.NIC's Turris Omnia LEDs driver * -* 2020 by Marek Behún <[email protected]> +* 2020, 2023 by Marek Behún <[email protected]> */ #include <linux/i2c.h>
@@ -41,6 +41,37 @@ struct omnia_leds {struct omnia_led leds[]; }; +static int omnia_cmd_write_u8 (const struct i2c_client *client,u8 cmd,u8 val) +{ +u8 buf[2 ] = { cmd, val }; + +return i2c_master_send (client, buf,sizeof (buf)); +} + +static int omnia_cmd_read_u8 (const struct i2c_client *client,u8 cmd) +{ +struct i2c_msg msgs[2 ]; +u8 reply; +int ret; + + msgs[0 ].addr = client->addr; + msgs[0 ].flags =0 ; + msgs[0 ].len =1 ; + msgs[0 ].buf = &cmd; + msgs[1 ].addr = client->addr; + msgs[1 ].flags =I2C_M_RD ; + msgs[1 ].len =1 ; + msgs[1 ].buf = &reply; + + ret =i2c_transfer (client->adapter, msgs,ARRAY_SIZE (msgs)); +if (likely (ret ==ARRAY_SIZE (msgs))) +return reply; +else if (ret <0 ) +return ret; +else +return -EIO ; +} +static int omnia_led_brightness_set_blocking (struct led_classdev *cdev,enum led_brightness brightness) {
@@ -64,7 +95,7 @@ static int omnia_led_brightness_set_blocking(struct led_classdev *cdev,if (buf[2 ] || buf[3 ] || buf[4 ]) state |=CMD_LED_STATE_ON ; - ret =i2c_smbus_write_byte_data (leds->client,CMD_LED_STATE , state); + ret =omnia_cmd_write_u8 (leds->client,CMD_LED_STATE , state);if (ret >=0 && (state &CMD_LED_STATE_ON )) ret =i2c_master_send (leds->client, buf,5 );
@@ -114,9 +145,9 @@ static int omnia_led_register(struct i2c_client *client, struct omnia_led *led, cdev->brightness_set_blocking = omnia_led_brightness_set_blocking;/* put the LED into software mode */ - ret =i2c_smbus_write_byte_data (client,CMD_LED_MODE , -CMD_LED_MODE_LED (led->reg) | -CMD_LED_MODE_USER ); + ret =omnia_cmd_write_u8 (client,CMD_LED_MODE , +CMD_LED_MODE_LED (led->reg) | +CMD_LED_MODE_USER );if (ret <0 ) {dev_err (dev,"Cannot set LED %pOF to software mode: %i\n" , np, ret);
@@ -124,8 +155,8 @@ static int omnia_led_register(struct i2c_client *client, struct omnia_led *led, }/* disable the LED */ - ret =i2c_smbus_write_byte_data (client,CMD_LED_STATE , -CMD_LED_STATE_LED (led->reg)); + ret =omnia_cmd_write_u8 (client,CMD_LED_STATE , +CMD_LED_STATE_LED (led->reg));if (ret <0 ) {dev_err (dev,"Cannot set LED %pOF brightness: %i\n" , np, ret);return ret;
@@ -158,7 +189,7 @@ static ssize_t brightness_show(struct device *dev, struct device_attribute *a,struct i2c_client *client =to_i2c_client (dev);int ret; - ret =i2c_smbus_read_byte_data (client,CMD_LED_GET_BRIGHTNESS ); + ret =omnia_cmd_read_u8 (client,CMD_LED_GET_BRIGHTNESS );if (ret <0 )return ret;
@@ -179,8 +210,7 @@ static ssize_t brightness_store(struct device *dev, struct device_attribute *a,if (brightness >100 )return -EINVAL ; - ret =i2c_smbus_write_byte_data (client,CMD_LED_SET_BRIGHTNESS , - (u8 )brightness); + ret =omnia_cmd_write_u8 (client,CMD_LED_SET_BRIGHTNESS , brightness);return ret <0 ? ret : count; }
@@ -241,8 +271,8 @@ static int omnia_leds_remove(struct i2c_client *client)u8 buf[5 ];/* put all LEDs into default (HW triggered) mode */ -i2c_smbus_write_byte_data (client,CMD_LED_MODE , -CMD_LED_MODE_LED (OMNIA_BOARD_LEDS )); +omnia_cmd_write_u8 (client,CMD_LED_MODE , +CMD_LED_MODE_LED (OMNIA_BOARD_LEDS ));/* set all LEDs color to [255, 255, 255] */ buf[0 ] =CMD_LED_COLOR ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 165/244 leds: pwm: Dont disable the PWM when the LED should be off
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Uwe Kleine-König <[email protected]>
[ Upstream commit 76fe464c8e64e71b2e4af11edeef0e5d85eeb6aa ]
Disabling a PWM (i.e. calling pwm_apply_state with .enabled = false) gives no guarantees what the PWM output does. It might freeze where it currently is, or go in a High-Z state or drive the active or inactive state, it might even continue to toggle.
To ensure that the LED gets really disabled, don't disable the PWM even when .duty_cycle is zero.
This fixes disabling a leds-pwm LED on i.MX28. The PWM on this SoC is one of those that freezes its output on disable, so if you disable an LED that is full on, it stays on. If you disable a LED with half brightness it goes off in 50% of the cases and full on in the other 50%.
--- drivers/leds/leds-pwm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/leds/leds-pwm.c +1 -1
@@ -53,7 +53,7 @@ static int led_pwm_set(struct led_classdev *led_cdev, duty = led_dat->pwmstate.period - duty; led_dat->pwmstate.duty_cycle = duty; - led_dat->pwmstate.enabled = duty >0 ; + led_dat->pwmstate.enabled = true;return pwm_apply_state (led_dat->pwm, &led_dat->pwmstate); }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 166/244 leds: trigger: ledtrig-cpu:: Fix output may be truncated issue for cpu
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe JAILLET <[email protected]>
[ Upstream commit ff50f53276131a3059e8307d11293af388ed2bcd ]
In order to teach the compiler that 'trig->name' will never be truncated, we need to tell it that 'cpu' is not negative.
When building with W=1, this fixes the following warnings:
drivers/leds/trigger/ledtrig-cpu.c: In function ‘ledtrig_cpu_init’:
drivers/leds/trigger/ledtrig-cpu.c:155:56: error: ‘%d’ directive output may be truncated writing between 1 and 11 bytes into a region of size 5 [-Werror=format-truncation=]
155 | snprintf(trig->name, MAX_NAME_LEN, "cpu%d", cpu);
| ^~
drivers/leds/trigger/ledtrig-cpu.c:155:52: note: directive argument in the range [-2147483648, 7]
155 | snprintf(trig->name, MAX_NAME_LEN, "cpu%d", cpu);
| ^~~~~~~
drivers/leds/trigger/ledtrig-cpu.c:155:17: note: ‘snprintf’ output between 5 and 15 bytes into a destination of size 8
155 | snprintf(trig->name, MAX_NAME_LEN, "cpu%d", cpu);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~--- drivers/leds/trigger/ledtrig-cpu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/leds/trigger/ledtrig-cpu.c +2 -2
@@ -130,7 +130,7 @@ static int ledtrig_prepare_down_cpu(unsigned int cpu)static int __init ledtrig_cpu_init (void ) { -int cpu; +unsigned int cpu;int ret;/* Supports up to 9999 cpu cores */
@@ -152,7 +152,7 @@ static int __init ledtrig_cpu_init(void)if (cpu >=8 )continue ; -snprintf (trig->name,MAX_NAME_LEN ,"cpu%d" , cpu); +snprintf (trig->name,MAX_NAME_LEN ,"cpu%u" , cpu);led_trigger_register_simple (trig->name, &trig->_trig); }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 167/244 f2fs: compress: fix to avoid use-after-free on dic
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chao Yu <[email protected]>
[ Upstream commit b0327c84e91a0f4f0abced8cb83ec86a7083f086 ]
Call trace: __memcpy+0x128/0x250 f2fs_read_multi_pages+0x940/0xf7c f2fs_mpage_readpages+0x5a8/0x624 f2fs_readahead+0x5c/0x110 page_cache_ra_unbounded+0x1b8/0x590 do_sync_mmap_readahead+0x1dc/0x2e4 filemap_fault+0x254/0xa8c f2fs_filemap_fault+0x2c/0x104 __do_fault+0x7c/0x238 do_handle_mm_fault+0x11bc/0x2d14 do_mem_abort+0x3a8/0x1004 el0_da+0x3c/0xa0 el0t_64_sync_handler+0xc4/0xec el0t_64_sync+0x1b4/0x1b8
In f2fs_read_multi_pages(), once f2fs_decompress_cluster() was called if we hit cached page in compress_inode's cache, dic may be released, it needs break the loop rather than continuing it, in order to avoid accessing invalid dic pointer.
--- fs/f2fs/data.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
fs/f2fs/data.c +3 -1
@@ -2253,8 +2253,10 @@ skip_reading_dnode:f2fs_wait_on_block_writeback (inode, blkaddr);if (f2fs_load_compressed_page (sbi, page, blkaddr)) { -if (atomic_dec_and_test (&dic->remaining_pages)) +if (atomic_dec_and_test (&dic->remaining_pages)) {f2fs_decompress_cluster (dic); +break ; + }continue ; }
Greg Kroah-Hartman
maintainerPATCH 168/244 f2fs: compress: fix to avoid redundant compress extension
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chao Yu <[email protected]>
[ Upstream commit 7e1b150fece033703a824df1bbc03df091ea53cc ]
With below script, redundant compress extension will be parsed and added by parse_options(), because parse_options() doesn't check whether the extension is existed or not, fix it.
1. mount -t f2fs -o compress_extension=so /dev/vdb /mnt/f2fs
2. mount -t f2fs -o remount,compress_extension=so /mnt/f2fs
3. mount|grep f2fs
/dev/vdb on /mnt/f2fs type f2fs (...,compress_extension=so,compress_extension=so,...)
--- fs/f2fs/super.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+)
fs/f2fs/super.c +33 -0
@@ -540,6 +540,29 @@ static int f2fs_set_test_dummy_encryptio }#ifdef CONFIG_F2FS_FS_COMPRESSION +static bool is_compress_extension_exist (struct f2fs_sb_info *sbi, +const char *new_ext,bool is_ext) +{ +unsigned char (*ext)[F2FS_EXTENSION_LEN ]; +int ext_cnt; +int i; + +if (is_ext) { + ext =F2FS_OPTION (sbi).extensions; + ext_cnt =F2FS_OPTION (sbi).compress_ext_cnt; + }else { + ext =F2FS_OPTION (sbi).noextensions; + ext_cnt =F2FS_OPTION (sbi).nocompress_ext_cnt; + } + +for (i =0 ; i < ext_cnt; i++) { +if (!strcasecmp (new_ext, ext[i])) +return true; + } + +return false; +} +/* * 1. The same extension name cannot not appear in both compress and non-compress extension * at the same time.
@@ -1154,6 +1177,11 @@ static int parse_options(struct super_blreturn -EINVAL ; } +if (is_compress_extension_exist (sbi, name, true)) { +kfree (name); +break ; + } +strcpy (ext[ext_cnt], name);F2FS_OPTION (sbi).compress_ext_cnt++;kfree (name);
@@ -1178,6 +1206,11 @@ static int parse_options(struct super_blreturn -EINVAL ; } +if (is_compress_extension_exist (sbi, name, false)) { +kfree (name); +break ; + } +strcpy (noext[noext_cnt], name);F2FS_OPTION (sbi).nocompress_ext_cnt++;kfree (name);
Greg Kroah-Hartman
maintainerPATCH 169/244 tty: tty_jobctrl: fix pid memleak in disassociate_ctty()
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yi Yang <[email protected]>
[ Upstream commit 11e7f27b79757b6586645d87b95d5b78375ecdfc ]
There is a pid leakage:
------------------------------
unreferenced object 0xffff88810c181940 (size 224):
comm "sshd", pid 8191, jiffies 4294946950 (age 524.570s) hex dump (first 32 bytes):
01 00 00 00 00 00 00 00 00 00 00 00 ad 4e ad de .............N.. ff ff ff ff 6b 6b 6b 6b ff ff ff ff ff ff ff ff ....kkkk........
backtrace:
[<ffffffff814774e6>] kmem_cache_alloc+0x5c6/0x9b0
[<ffffffff81177342>] alloc_pid+0x72/0x570
[<ffffffff81140ac4>] copy_process+0x1374/0x2470
[<ffffffff81141d77>] kernel_clone+0xb7/0x900
[<ffffffff81142645>] __se_sys_clone+0x85/0xb0
[<ffffffff8114269b>] __x64_sys_clone+0x2b/0x30
[<ffffffff83965a72>] do_syscall_64+0x32/0x80
[<ffffffff83a00085>] entry_SYSCALL_64_after_hwframe+0x61/0xc6It turns out that there is a race condition between disassociate_ctty() and tty_signal_session_leader(), which caused this leakage.
The pid memleak is triggered by the following race:
task[sshd] task[bash]
----------------------- -----------------------
disassociate_ctty();
spin_lock_irq(¤t->sighand->siglock);
put_pid(current->signal->tty_old_pgrp);
current->signal->tty_old_pgrp = NULL;
tty = tty_kref_get(current->signal->tty);
spin_unlock_irq(¤t->sighand->siglock);tty_vhangup();tty_lock(tty);
...tty_signal_session_leader(); spin_lock_irq(&p->sighand->siglock);
...
if (tty->ctrl.pgrp) //tty->ctrl.pgrp is not NULL p->signal->tty_old_pgrp = get_pid(tty->ctrl.pgrp); //An extra get spin_unlock_irq(&p->sighand->siglock);
...
tty_unlock(tty);
if (tty) {
tty_lock(tty);
...
put_pid(tty->ctrl.pgrp);
tty->ctrl.pgrp = NULL; //It's too late
...
tty_unlock(tty);
}The issue is believed to be introduced by commit c8bcd9c5be24 ("tty:
Fix ->session locking") who moves the unlock of siglock in disassociate_ctty() above "if (tty)", making a small window allowing tty_signal_session_leader() to kick in. It can be easily reproduced by adding a delay before "if (tty)" and at the entrance of tty_signal_session_leader().
To fix this issue, we move "put_pid(current->signal->tty_old_pgrp)" after "tty->ctrl.pgrp = NULL".
--- drivers/tty/tty_jobctrl.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-)
drivers/tty/tty_jobctrl.c +11 -6
@@ -300,12 +300,7 @@ void disassociate_ctty(int on_exit)return ; } -spin_lock_irq (¤t->sighand->siglock); -put_pid (current->signal->tty_old_pgrp); - current->signal->tty_old_pgrp =NULL ; - tty =tty_kref_get (current->signal->tty); -spin_unlock_irq (¤t->sighand->siglock); - + tty =get_current_tty ();if (tty) {unsigned long flags;
@@ -320,6 +315,16 @@ void disassociate_ctty(int on_exit)tty_kref_put (tty); } +/* If tty->ctrl.pgrp is not NULL, it may be assigned to +* current->signal->tty_old_pgrp in a race condition, and +* cause pid memleak. Release current->signal->tty_old_pgrp +* after tty->ctrl.pgrp set to NULL. +*/ +spin_lock_irq (¤t->sighand->siglock); +put_pid (current->signal->tty_old_pgrp); + current->signal->tty_old_pgrp =NULL ; +spin_unlock_irq (¤t->sighand->siglock); +/* Now clear signal->tty under the lock */ read_lock (&tasklist_lock);session_clear_tty (task_session (current));
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 170/244 livepatch: Fix missing newline character in klp_resolve_symbols()
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zheng Yejian <[email protected]>
[ Upstream commit 67e18e132f0fd738f8c8cac3aa1420312073f795 ]
Without the newline character, the log may not be printed immediately after the error occurs.
--- kernel/livepatch/core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/livepatch/core.c +1 -1
@@ -244,7 +244,7 @@ static int klp_resolve_symbols(Elf_Shdr *sechdrs, const char *strtab,* symbols are exported and normal relas can be used instead. */ if (!sec_vmlinux && sym_vmlinux) { -pr_err ("invalid access to vmlinux symbol '%s' from module-specific livepatch relocation section" , +pr_err ("invalid access to vmlinux symbol '%s' from module-specific livepatch relocation section\n" , sym_name);return -EINVAL ; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 171/244 perf evlist: Add evlist__add_dummy_on_all_cpus()
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adrian Hunter <[email protected]>
[ Upstream commit 126d68fdcabed8c2ca5ffaba785add93ef722da8 ]
Add evlist__add_dummy_on_all_cpus() to enable creating a system-wide dummy event that sets up the system-wide maps before map propagation.
For convenience, add evlist__add_aux_dummy() so that the logic can be used whether or not the event needs to be system-wide.
Stable-dep-of: f9cdeb58a9cf ("perf evlist: Avoid frequency mode for the dummy event")
--- tools/perf/util/evlist.c | 45 ++++++++++++++++++++++++++++++++++++++++ tools/perf/util/evlist.h | 5 +++++ 2 files changed, 50 insertions(+)
tools/perf/util/evlist.c +45 -0
@@ -258,6 +258,51 @@ int evlist__add_dummy(struct evlist *evlist)return 0 ; } +static void evlist__add_on_all_cpus (struct evlist *evlist,struct evsel *evsel) +{ + evsel->core.system_wide = true; + +/* +* All CPUs. +* +* Note perf_event_open() does not accept CPUs that are not online, so +* in fact this CPU list will include only all online CPUs. +*/ +perf_cpu_map__put (evsel->core.own_cpus); + evsel->core.own_cpus =perf_cpu_map__new (NULL ); +perf_cpu_map__put (evsel->core.cpus); + evsel->core.cpus =perf_cpu_map__get (evsel->core.own_cpus); + +/* No threads */ +perf_thread_map__put (evsel->core.threads); + evsel->core.threads =perf_thread_map__new_dummy (); + +evlist__add (evlist, evsel); +} + +struct evsel *evlist__add_aux_dummy (struct evlist *evlist,bool system_wide) +{ +struct evsel *evsel =evlist__dummy_event (evlist); + +if (!evsel) +return NULL ; + + evsel->core.attr.exclude_kernel =1 ; + evsel->core.attr.exclude_guest =1 ; + evsel->core.attr.exclude_hv =1 ; + evsel->core.attr.freq =0 ; + evsel->core.attr.sample_period =1 ; + evsel->no_aux_samples = true; + evsel->name =strdup ("dummy:u" ); + +if (system_wide) +evlist__add_on_all_cpus (evlist, evsel); +else +evlist__add (evlist, evsel); + +return evsel; +} +static int evlist__add_attrs (struct evlist *evlist,struct perf_event_attr *attrs,size_t nr_attrs) {struct evsel *evsel, *n;
tools/perf/util/evlist.h +5 -0
@@ -112,6 +112,11 @@ int __evlist__add_default_attrs(struct evlist *evlist,int arch_evlist__add_default_attrs (struct evlist *evlist);int evlist__add_dummy (struct evlist *evlist); +struct evsel *evlist__add_aux_dummy (struct evlist *evlist,bool system_wide); +static inline struct evsel *evlist__add_dummy_on_all_cpus (struct evlist *evlist) +{ +return evlist__add_aux_dummy (evlist, true); +}int evlist__add_sb_event (struct evlist *evlist,struct perf_event_attr *attr,evsel__sb_cb_t cb,void *data);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 172/244 perf tools: Get rid of evlist__add_on_all_cpus()
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Namhyung Kim <[email protected]>
[ Upstream commit 60ea006f72512fd7c36f16cdbe91f4fc284f8115 ]
The cpu and thread maps are properly handled in libperf now. No need to do it in the perf tools anymore. Let's remove the logic.
Stable-dep-of: f9cdeb58a9cf ("perf evlist: Avoid frequency mode for the dummy event")
--- tools/perf/util/evlist.c | 29 ++--------------------------- 1 file changed, 2 insertions(+), 27 deletions(-)
tools/perf/util/evlist.c +2 -27
@@ -258,28 +258,6 @@ int evlist__add_dummy(struct evlist *evlist)return 0 ; } -static void evlist__add_on_all_cpus (struct evlist *evlist,struct evsel *evsel) -{ - evsel->core.system_wide = true; - -/* -* All CPUs. -* -* Note perf_event_open() does not accept CPUs that are not online, so -* in fact this CPU list will include only all online CPUs. -*/ -perf_cpu_map__put (evsel->core.own_cpus); - evsel->core.own_cpus =perf_cpu_map__new (NULL ); -perf_cpu_map__put (evsel->core.cpus); - evsel->core.cpus =perf_cpu_map__get (evsel->core.own_cpus); - -/* No threads */ -perf_thread_map__put (evsel->core.threads); - evsel->core.threads =perf_thread_map__new_dummy (); - -evlist__add (evlist, evsel); -} -struct evsel *evlist__add_aux_dummy (struct evlist *evlist,bool system_wide) {struct evsel *evsel =evlist__dummy_event (evlist);
@@ -292,14 +270,11 @@ struct evsel *evlist__add_aux_dummy(struct evlist *evlist, bool system_wide) evsel->core.attr.exclude_hv =1 ; evsel->core.attr.freq =0 ; evsel->core.attr.sample_period =1 ; + evsel->core.system_wide = system_wide; evsel->no_aux_samples = true; evsel->name =strdup ("dummy:u" ); -if (system_wide) -evlist__add_on_all_cpus (evlist, evsel); -else -evlist__add (evlist, evsel); - +evlist__add (evlist, evsel);return evsel; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 173/244 perf evlist: Avoid frequency mode for the dummy event
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ian Rogers <[email protected]>
[ Upstream commit f9cdeb58a9cf46c09b56f5f661ea8da24b6458c3 ]
Dummy events are created with an attribute where the period and freq are zero. evsel__config will then see the uninitialized values and initialize them in evsel__default_freq_period. As fequency mode is used by default the dummy event would be set to use frequency mode. However, this has no effect on the dummy event but does cause unnecessary timers/interrupts. Avoid this overhead by setting the period to 1 for dummy events.
evlist__add_aux_dummy calls evlist__add_dummy then sets freq=0 and period=1. This isn't necessary after this change and so the setting is removed.
Quoted 1 line
From Stephane:
The dummy event is not counting anything. It is used to collect mmap records and avoid a race condition during the synthesize mmap phase of perf record. As such, it should not cause any overhead during active profiling. Yet, it did. Because of a bug the dummy event was programmed as a sampling event in frequency mode. Events in that mode incur more kernel overheads because on timer tick, the kernel has to look at the number of samples for each event and potentially adjust the sampling period to achieve the desired frequency. The dummy event was therefore adding a frequency event to task and ctx contexts we may otherwise not have any, e.g.,
perf record -a -e cpu/event=0x3c,period=10000000/.
On each timer tick the perf_adjust_freq_unthr_context() is invoked and if ctx->nr_freq is non-zero, then the kernel will loop over ALL the events of the context looking for frequency mode ones. In doing, so it locks the context, and enable/disable the PMU of each hw event. If all the events of the context are in period mode, the kernel will have to traverse the list for nothing incurring overhead. The overhead is multiplied by a very large factor when this happens in a guest kernel. There is no need for the dummy event to be in frequency mode, it does not count anything and therefore should not cause extra overhead for no reason.
--- tools/perf/util/evlist.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
tools/perf/util/evlist.c +3 -2
@@ -248,6 +248,9 @@ int evlist__add_dummy(struct evlist *evlist) .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_DUMMY, .size = sizeof(attr), /* to capture ABI version */ + /* Avoid frequency mode for dummy events to avoid associated timers. */ + .freq = 0, + .sample_period = 1, };struct evsel *evsel =evsel__new_idx (&attr, evlist->core.nr_entries);
@@ -268,8 +271,6 @@ struct evsel *evlist__add_aux_dummy(struct evlist *evlist, bool system_wide) evsel->core.attr.exclude_kernel =1 ; evsel->core.attr.exclude_guest =1 ; evsel->core.attr.exclude_hv =1 ; - evsel->core.attr.freq =0 ; - evsel->core.attr.sample_period =1 ; evsel->core.system_wide = system_wide; evsel->no_aux_samples = true; evsel->name =strdup ("dummy:u" );
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 174/244 dmaengine: idxd: Register dsa_bus_type before registering idxd sub-drivers
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Fenghua Yu <[email protected]>
[ Upstream commit 88928addeec577386e8c83b48b5bc24d28ba97fd ]
idxd sub-drivers belong to bus dsa_bus_type. Thus, dsa_bus_type must be registered in dsa bus init before idxd drivers can be registered.
But the order is wrong when both idxd and idxd_bus are builtin drivers. In this case, idxd driver is compiled and linked before idxd_bus driver. Since the initcall order is determined by the link order, idxd sub-drivers are registered in idxd initcall before dsa_bus_type is registered in idxd_bus initcall. idxd initcall fails:
[ 21.562803] calling idxd_init_module+0x0/0x110 @ 1 [ 21.570761] Driver 'idxd' was unable to register with bus_type 'dsa' because the bus was not initialized. [ 21.586475] initcall idxd_init_module+0x0/0x110 returned -22 after 15717 usecs [ 21.597178] calling dsa_bus_init+0x0/0x20 @ 1
To fix the issue, compile and link idxd_bus driver before idxd driver to ensure the right registration order.
--- drivers/dma/idxd/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/dma/idxd/Makefile +3 -3
@@ -1,12 +1,12 @@ ccflags-y += -DDEFAULT_SYMBOL_NAMESPACE=IDXD +obj-$(CONFIG_INTEL_IDXD_BUS) += idxd_bus.o +idxd_bus-y := bus.o + obj-$(CONFIG_INTEL_IDXD) += idxd.o idxd-y := init.o irq.o device.o sysfs.o submit.o dma.o cdev.o idxd-$(CONFIG_INTEL_IDXD_PERFMON) += perfmon.o -obj-$(CONFIG_INTEL_IDXD_BUS) += idxd_bus.o -idxd_bus-y := bus.o - obj-$(CONFIG_INTEL_IDXD_COMPAT) += idxd_compat.o idxd_compat-y := compat.o
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 175/244 usb: dwc2: fix possible NULL pointer dereference caused by driver concurrency
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jia-Ju Bai <[email protected]>
[ Upstream commit ef307bc6ef04e8c1ea843231db58e3afaafa9fa6 ]
In _dwc2_hcd_urb_enqueue(), "urb->hcpriv = NULL" is executed without holding the lock "hsotg->lock". In _dwc2_hcd_urb_dequeue():
spin_lock_irqsave(&hsotg->lock, flags);
...
if (!urb->hcpriv) {
dev_dbg(hsotg->dev, "## urb->hcpriv is NULL ##\n");
goto out;
}
rc = dwc2_hcd_urb_dequeue(hsotg, urb->hcpriv); // Use urb->hcpriv
...
out:
spin_unlock_irqrestore(&hsotg->lock, flags);When _dwc2_hcd_urb_enqueue() and _dwc2_hcd_urb_dequeue() are concurrently executed, the NULL check of "urb->hcpriv" can be executed before "urb->hcpriv = NULL". After urb->hcpriv is NULL, it can be used in the function call to dwc2_hcd_urb_dequeue(), which can cause a NULL pointer dereference.
This possible bug is found by an experimental static analysis tool developed by myself. This tool analyzes the locking APIs to extract function pairs that can be concurrently executed, and then analyzes the instructions in the paired functions to identify possible concurrency bugs including data races and atomicity violations. The above possible bug is reported, when my tool analyzes the source code of Linux 6.5.
To fix this possible bug, "urb->hcpriv = NULL" should be executed with holding the lock "hsotg->lock". After using this patch, my tool never reports the possible bug, with the kernelconfiguration allyesconfig for x86_64. Because I have no associated hardware, I cannot test the patch in runtime testing, and just verify it according to the code logic.
--- drivers/usb/dwc2/hcd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/dwc2/hcd.c +1 -1
@@ -4802,8 +4802,8 @@ static int _dwc2_hcd_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,if (qh_allocated && qh->channel && qh->channel->qh == qh) qh->channel->qh =NULL ; fail2: -spin_unlock_irqrestore (&hsotg->lock, flags); urb->hcpriv =NULL ; +spin_unlock_irqrestore (&hsotg->lock, flags);kfree (qtd); fail1:if (qh_allocated) {
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 176/244 usb: chipidea: Fix DMA overwrite for Tegra
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michał Mirosław <[email protected]>
[ Upstream commit 7ab8716713c931ac79988f2592e1cf8b2e4fec1b ]
Tegra USB controllers seem to issue DMA in full 32-bit words only and thus may overwrite unevenly-sized buffers. One such occurrence is detected by SLUB when receiving a reply to a 1-byte buffer (below). Fix this by allocating a bounce buffer also for buffers with sizes not a multiple of 4.
=============================================================================
BUG kmalloc-64 (Tainted: G B ): kmalloc Redzone overwritten
-----------------------------------------------------------------------------
0x8555cd02-0x8555cd03 @offset=3330. First byte 0x0 instead of 0xcc Allocated in usb_get_status+0x2b/0xac age=1 cpu=3 pid=41
__kmem_cache_alloc_node+0x12f/0x1e4 __kmalloc+0x33/0x8c usb_get_status+0x2b/0xac hub_probe+0x5e9/0xcec usb_probe_interface+0xbf/0x21c really_probe+0xa5/0x2c4 __driver_probe_device+0x75/0x174 driver_probe_device+0x31/0x94 __device_attach_driver+0x65/0xc0 bus_for_each_drv+0x4b/0x74 __device_attach+0x69/0x120 bus_probe_device+0x65/0x6c device_add+0x48b/0x5f8 usb_set_configuration+0x37b/0x6b4 usb_generic_driver_probe+0x37/0x68 usb_probe_device+0x35/0xb4
Slab 0xbf622b80 objects=21 used=18 fp=0x8555cdc0 flags=0x800(slab|zone=0) Object 0x8555cd00 @offset=3328 fp=0x00000000
Redzone 8555ccc0: cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc ................ Redzone 8555ccd0: cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc ................ Redzone 8555cce0: cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc ................ Redzone 8555ccf0: cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc ................
Object 8555cd00: 01 00 00 00 cc cc cc cc cc cc cc cc cc cc cc cc ................
Object 8555cd10: cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc ................
Object 8555cd20: cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc ................
Object 8555cd30: cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc ................
Redzone 8555cd40: cc cc cc cc ....
Padding 8555cd74: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZ
CPU: 3 PID: 41 Comm: kworker/3:1 Tainted: G B 6.6.0-rc1mq-00118-g59786f827ea1 #1115 Hardware name: NVIDIA Tegra SoC (Flattened Device Tree) Workqueue: usb_hub_wq hub_event [<8010ca28>] (unwind_backtrace) from [<801090a5>] (show_stack+0x11/0x14) [<801090a5>] (show_stack) from [<805da2fb>] (dump_stack_lvl+0x4d/0x7c) [<805da2fb>] (dump_stack_lvl) from [<8026464f>] (check_bytes_and_report+0xb3/0xe4) [<8026464f>] (check_bytes_and_report) from [<802648e1>] (check_object+0x261/0x290) [<802648e1>] (check_object) from [<802671b1>] (free_to_partial_list+0x105/0x3f8) [<802671b1>] (free_to_partial_list) from [<80268613>] (__kmem_cache_free+0x103/0x128) [<80268613>] (__kmem_cache_free) from [<80425a67>] (usb_get_status+0x73/0xac) [<80425a67>] (usb_get_status) from [<80421b31>] (hub_probe+0x5e9/0xcec) [<80421b31>] (hub_probe) from [<80428bbb>] (usb_probe_interface+0xbf/0x21c) [<80428bbb>] (usb_probe_interface) from [<803ee13d>] (really_probe+0xa5/0x2c4) [<803ee13d>] (really_probe) from [<803ee3d1>] (__driver_probe_device+0x75/0x174) [<803ee3d1>] (__driver_probe_device) from [<803ee501>] (driver_probe_device+0x31/0x94)
usb 1-1: device descriptor read/8, error -71
--- drivers/usb/chipidea/host.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/usb/chipidea/host.c +4 -3
@@ -403,12 +403,13 @@ static int ci_hdrc_alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags)const unsigned int ci_hdrc_usb_dma_align =32 ;size_t kmalloc_size; -if (urb->num_sgs || urb->sg || urb->transfer_buffer_length ==0 || - !((uintptr_t )urb->transfer_buffer & (ci_hdrc_usb_dma_align -1 ))) +if (urb->num_sgs || urb->sg || urb->transfer_buffer_length ==0 ) +return 0 ; +if (!((uintptr_t )urb->transfer_buffer & (ci_hdrc_usb_dma_align -1 )) && !(urb->transfer_buffer_length &3 ))return 0 ;/* Allocate a buffer with enough padding for alignment */ - kmalloc_size = urb->transfer_buffer_length + + kmalloc_size =ALIGN (urb->transfer_buffer_length,4 ) +sizeof (struct ci_hdrc_dma_aligned_buffer ) + ci_hdrc_usb_dma_align -1 ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 177/244 usb: chipidea: Simplify Tegra DMA alignment code
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michał Mirosław <[email protected]>
[ Upstream commit 2ae61a2562c0d1720545b0845829a65fb6a9c2c6 ]
The USB host on Tegra3 works with 32-bit alignment. Previous code tried to align the buffer, but it did align the wrapper struct instead, so the buffer was at a constant offset of 8 bytes (two pointers) from expected alignment. Since kmalloc() guarantees at least 8-byte alignment already, the alignment-extending is removed.
--- drivers/usb/chipidea/host.c | 45 +++++++++++++++---------------------- 1 file changed, 18 insertions(+), 27 deletions(-)
drivers/usb/chipidea/host.c +18 -27
@@ -30,8 +30,7 @@ struct ehci_ci_priv { };struct ci_hdrc_dma_aligned_buffer { -void *kmalloc_ptr; -void *old_xfer_buffer; +void *original_buffer;u8 data[]; };
@@ -372,60 +371,52 @@ static int ci_ehci_bus_suspend(struct usb_hcd *hcd)return 0 ; } -static void ci_hdrc_free_dma_aligned_buffer (struct urb *urb) +static void ci_hdrc_free_dma_aligned_buffer (struct urb *urb,bool copy_back) {struct ci_hdrc_dma_aligned_buffer *temp; -size_t length;if (!(urb->transfer_flags &URB_ALIGNED_TEMP_BUFFER ))return ; + urb->transfer_flags &= ~URB_ALIGNED_TEMP_BUFFER ; temp =container_of (urb->transfer_buffer, struct ci_hdrc_dma_aligned_buffer, data); + urb->transfer_buffer = temp->original_buffer; + +if (copy_back &&usb_urb_dir_in (urb)) { +size_t length; -if (usb_urb_dir_in (urb)) {if (usb_pipeisoc (urb->pipe)) length = urb->transfer_buffer_length;else length = urb->actual_length; -memcpy (temp->old_xfer_buffer, temp->data, length); +memcpy (temp->original_buffer, temp->data, length); } - urb->transfer_buffer = temp->old_xfer_buffer; -kfree (temp->kmalloc_ptr); - urb->transfer_flags &= ~URB_ALIGNED_TEMP_BUFFER ; +kfree (temp); }static int ci_hdrc_alloc_dma_aligned_buffer (struct urb *urb,gfp_t mem_flags) { -struct ci_hdrc_dma_aligned_buffer *temp, *kmalloc_ptr; -const unsigned int ci_hdrc_usb_dma_align =32 ; -size_t kmalloc_size; +struct ci_hdrc_dma_aligned_buffer *temp;if (urb->num_sgs || urb->sg || urb->transfer_buffer_length ==0 )return 0 ; -if (!((uintptr_t )urb->transfer_buffer & (ci_hdrc_usb_dma_align -1 )) && !(urb->transfer_buffer_length &3 )) +if (IS_ALIGNED ((uintptr_t )urb->transfer_buffer,4 ) + &&IS_ALIGNED (urb->transfer_buffer_length,4 ))return 0 ; -/* Allocate a buffer with enough padding for alignment */ - kmalloc_size =ALIGN (urb->transfer_buffer_length,4 ) + -sizeof (struct ci_hdrc_dma_aligned_buffer ) + - ci_hdrc_usb_dma_align -1 ; - - kmalloc_ptr =kmalloc (kmalloc_size, mem_flags); -if (!kmalloc_ptr) + temp =kmalloc (sizeof (*temp) +ALIGN (urb->transfer_buffer_length,4 ), mem_flags); +if (!temp)return -ENOMEM ; -/* Position our struct dma_aligned_buffer such that data is aligned */ - temp =PTR_ALIGN (kmalloc_ptr +1 , ci_hdrc_usb_dma_align) -1 ; - temp->kmalloc_ptr = kmalloc_ptr; - temp->old_xfer_buffer = urb->transfer_buffer;if (usb_urb_dir_out (urb))memcpy (temp->data, urb->transfer_buffer, urb->transfer_buffer_length); - urb->transfer_buffer = temp->data; + temp->original_buffer = urb->transfer_buffer; + urb->transfer_buffer = temp->data; urb->transfer_flags |=URB_ALIGNED_TEMP_BUFFER ;return 0 ;
@@ -442,7 +433,7 @@ static int ci_hdrc_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb, ret =usb_hcd_map_urb_for_dma (hcd, urb, mem_flags);if (ret) -ci_hdrc_free_dma_aligned_buffer (urb); +ci_hdrc_free_dma_aligned_buffer (urb, false);return ret; }
@@ -450,7 +441,7 @@ static int ci_hdrc_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,static void ci_hdrc_unmap_urb_for_dma (struct usb_hcd *hcd,struct urb *urb) {usb_hcd_unmap_urb_for_dma (hcd, urb); -ci_hdrc_free_dma_aligned_buffer (urb); +ci_hdrc_free_dma_aligned_buffer (urb, true); }int ci_hdrc_host_init (struct ci_hdrc *ci)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 178/244 dmaengine: ti: edma: handle irq_of_parse_and_map() errors
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <[email protected]>
[ Upstream commit 14f6d317913f634920a640e9047aa2e66f5bdcb7 ]
Zero is not a valid IRQ for in-kernel code and the irq_of_parse_and_map() function returns zero on error. So this check for valid IRQs should only accept values > 0.
--- drivers/dma/ti/edma.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/dma/ti/edma.c +2 -2
@@ -2459,7 +2459,7 @@ static int edma_probe(struct platform_device *pdev)if (irq <0 && node) irq =irq_of_parse_and_map (node,0 ); -if (irq >=0 ) { +if (irq >0 ) { irq_name =devm_kasprintf (dev,GFP_KERNEL ,"%s_ccint" ,dev_name (dev)); ret = devm_request_irq(dev, irq, dma_irq_handler, 0, irq_name,
@@ -2475,7 +2475,7 @@ static int edma_probe(struct platform_device *pdev)if (irq <0 && node) irq =irq_of_parse_and_map (node,2 ); -if (irq >=0 ) { +if (irq >0 ) { irq_name =devm_kasprintf (dev,GFP_KERNEL ,"%s_ccerrint" ,dev_name (dev)); ret = devm_request_irq(dev, irq, dma_ccerr_handler, 0, irq_name,
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 179/244 misc: st_core: Do not call kfree_skb() under spin_lock_irqsave()
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jinjie Ruan <[email protected]>
[ Upstream commit 4d08c3d12b61022501989f9f071514d2d6f77c47 ]
It is not allowed to call kfree_skb() from hardware interrupt context or with hardware interrupts being disabled. So replace kfree_skb() with dev_kfree_skb_irq() under spin_lock_irqsave(). Compile tested only.
--- drivers/misc/ti-st/st_core.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/misc/ti-st/st_core.c +4 -3
@@ -15,6 +15,7 @@#include <linux/skbuff.h> #include <linux/ti_wilink_st.h> +#include <linux/netdevice.h> extern void st_kim_recv (void *,const unsigned char *,long );void st_int_recv (void *,const unsigned char *,long );
@@ -435,7 +436,7 @@ static void st_int_enqueue(struct st_data_s *st_gdata, struct sk_buff *skb)case ST_LL_AWAKE_TO_ASLEEP :pr_err ("ST LL is illegal state(%ld)," "purging received skb." ,st_ll_getstate (st_gdata)); -kfree_skb (skb); +dev_kfree_skb_irq (skb);break ;case ST_LL_ASLEEP :skb_queue_tail (&st_gdata->tx_waitq, skb);
@@ -444,7 +445,7 @@ static void st_int_enqueue(struct st_data_s *st_gdata, struct sk_buff *skb)default :pr_err ("ST LL is illegal state(%ld)," "purging received skb." ,st_ll_getstate (st_gdata)); -kfree_skb (skb); +dev_kfree_skb_irq (skb);break ; }
@@ -498,7 +499,7 @@ void st_tx_wakeup(struct st_data_s *st_data)spin_unlock_irqrestore (&st_data->lock, flags);break ; } -kfree_skb (skb); +dev_kfree_skb_irq (skb);spin_unlock_irqrestore (&st_data->lock, flags); }/* if wake-up is set in another context- restart sending */
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 180/244 tools: iio: iio_generic_buffer ensure alignment
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matti Vaittinen <[email protected]>
[ Upstream commit 2d3dff577dd0ea8fe9637a13822f7603c4a881c8 ]
The iio_generic_buffer can return garbage values when the total size of scan data is not a multiple of the largest element in the scan. This can be demonstrated by reading a scan, consisting, for example of one 4-byte and one 2-byte element, where the 4-byte element is first in the buffer.
The IIO generic buffer code does not take into account the last two padding bytes that are needed to ensure that the 4-byte data for next scan is correctly aligned.
Add the padding bytes required to align the next sample with the scan size.
--- tools/iio/iio_generic_buffer.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)
tools/iio/iio_generic_buffer.c +12 -1
@@ -54,9 +54,12 @@ enum autochan {static unsigned int size_from_channelarray (struct iio_channel_info *channels,int num_channels) {unsigned int bytes =0 ; -int i =0 ; +int i =0 , max =0 ; +unsigned int misalignment;while (i < num_channels) { +if (channels[i].bytes > max) + max = channels[i].bytes;if (bytes % channels[i].bytes ==0 ) channels[i].location = bytes;else
@@ -66,6 +69,14 @@ static unsigned int size_from_channelarray(struct iio_channel_info *channels, in bytes = channels[i].location + channels[i].bytes; i++; } +/* +* We want the data in next sample to also be properly aligned so +* we'll add padding at the end if needed. Adding padding only +* works for channel data which size is 2^n bytes. +*/ + misalignment = bytes % max; +if (misalignment) + bytes += max - misalignment;return bytes; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 181/244 USB: usbip: fix stub_dev hub disconnect
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jonas Blixt <[email protected]>
[ Upstream commit 97475763484245916735a1aa9a3310a01d46b008 ]
If a hub is disconnected that has device(s) that's attached to the usbip layer the disconnect function might fail because it tries to release the port on an already disconnected hub.
--- drivers/usb/usbip/stub_dev.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
drivers/usb/usbip/stub_dev.c +7 -2
@@ -462,8 +462,13 @@ static void stub_disconnect(struct usb_device *udev)/* release port */ rc =usb_hub_release_port (udev->parent, udev->portnum, (struct usb_dev_state *) udev); -if (rc) { -dev_dbg (&udev->dev,"unable to release port\n" ); +/* +* NOTE: If a HUB disconnect triggered disconnect of the down stream +* device usb_hub_release_port will return -ENODEV so we can safely ignore +* that error here. +*/ +if (rc && (rc != -ENODEV )) { +dev_dbg (&udev->dev,"unable to release port (%i)\n" , rc);return ; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 182/244 dmaengine: pxa_dma: Remove an erroneous BUG_ON() in pxad_free_desc()
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe JAILLET <[email protected]>
[ Upstream commit 83c761f568733277ce1f7eb9dc9e890649c29a8c ]
If pxad_alloc_desc() fails on the first dma_pool_alloc() call, then sw_desc->nb_desc is zero.
In such a case pxad_free_desc() is called and it will BUG_ON().
Remove this erroneous BUG_ON().
It is also useless, because if "sw_desc->nb_desc == 0", then, on the first iteration of the for loop, i is -1 and the loop will not be executed. (both i and sw_desc->nb_desc are 'int')
--- drivers/dma/pxa_dma.c | 1 - 1 file changed, 1 deletion(-)
drivers/dma/pxa_dma.c +0 -1
@@ -722,7 +722,6 @@ static void pxad_free_desc(struct virt_dma_desc *vd)dma_addr_t dma;struct pxad_desc_sw *sw_desc =to_pxad_sw_desc (vd); -BUG_ON (sw_desc->nb_desc ==0 );for (i = sw_desc->nb_desc -1 ; i >=0 ; i--) {if (i >0 ) dma = sw_desc->hw_desc[i -1 ]->ddadr;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 183/244 f2fs: fix to initialize map.m_pblk in f2fs_precache_extents()
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chao Yu <[email protected]>
[ Upstream commit 8b07c1fb0f1ad139373c8253f2fad8bc43fab07d ]
Otherwise, it may print random physical block address in tracepoint of f2fs_map_blocks() as below:
f2fs_map_blocks: dev = (253,16), ino = 2297, file offset = 0, start blkaddr = 0xa356c421, len = 0x0, flags = 0
--- fs/f2fs/file.c | 1 + 1 file changed, 1 insertion(+)
fs/f2fs/file.c +1 -0
@@ -3210,6 +3210,7 @@ int f2fs_precache_extents(struct inode *inode)return -EOPNOTSUPP ; map.m_lblk =0 ; + map.m_pblk =0 ; map.m_next_pgofs =NULL ; map.m_next_extent = &m_next_extent; map.m_seg_type =NO_CHECK_TYPE ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 184/244 powerpc: Only define __parse_fpscr() when required
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe Leroy <[email protected]>
[ Upstream commit c7e0d9bb9154c6e6b2ac8746faba27b53393f25e ]
Clang 17 reports:
arch/powerpc/kernel/traps.c:1167:19: error: unused function '__parse_fpscr' [-Werror,-Wunused-function]
__parse_fpscr() is called from two sites. First call is guarded by #ifdef CONFIG_PPC_FPU_REGS
Second call is guarded by CONFIG_MATH_EMULATION which selects CONFIG_PPC_FPU_REGS.
So only define __parse_fpscr() when CONFIG_PPC_FPU_REGS is defined.
--- arch/powerpc/kernel/traps.c | 2 ++ 1 file changed, 2 insertions(+)
arch/powerpc/kernel/traps.c +2 -0
@@ -1148,6 +1148,7 @@ static void emulate_single_step(struct pt_regs *regs)__single_step_exception (regs); } +#ifdef CONFIG_PPC_FPU_REGS static inline int __parse_fpscr (unsigned long fpscr) {int ret =FPE_FLTUNK ;
@@ -1174,6 +1175,7 @@ static inline int __parse_fpscr(unsigned long fpscr) return ret; } +#endif static void parse_fpe (struct pt_regs *regs) {
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 185/244 modpost: fix tee MODULE_DEVICE_TABLE built on big-endian host
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Masahiro Yamada <[email protected]>
[ Upstream commit 7f54e00e5842663c2cea501bbbdfa572c94348a3 ]
When MODULE_DEVICE_TABLE(tee, ) is built on a host with a different endianness from the target architecture, it results in an incorrect MODULE_ALIAS().
For example, see a case where drivers/char/hw_random/optee-rng.c is built as a module for ARM little-endian.
If you build it on a little-endian host, you will get the correct MODULE_ALIAS:
$ grep MODULE_ALIAS drivers/char/hw_random/optee-rng.mod.c
MODULE_ALIAS("tee:ab7a617c-b8e7-4d8f-8301-d09b61036b64*");However, if you build it on a big-endian host, you will get a wrong MODULE_ALIAS:
$ grep MODULE_ALIAS drivers/char/hw_random/optee-rng.mod.c
MODULE_ALIAS("tee:646b0361-9bd0-0183-8f4d-e7b87c617aab*");The same problem also occurs when you enable CONFIG_CPU_BIG_ENDIAN, and build it on a little-endian host.
This issue has been unnoticed because the ARM kernel is configured for little-endian by default, and most likely built on a little-endian host (cross-build on x86 or native-build on ARM).
The uuid field must not be reversed because uuid_t is an array of __u8.
--- scripts/mod/file2alias.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
scripts/mod/file2alias.c +5 -5
@@ -1339,13 +1339,13 @@ static int do_typec_entry(const char *filename, void *symval, char *alias)/* Looks like: tee:uuid */ static int do_tee_entry (const char *filename,void *symval,char *alias) { -DEF_FIELD (symval, tee_client_device_id, uuid); +DEF_FIELD_ADDR (symval, tee_client_device_id, uuid);sprintf (alias,"tee:%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x" , - uuid.b[0 ], uuid.b[1 ], uuid.b[2 ], uuid.b[3 ], uuid.b[4 ], - uuid.b[5 ], uuid.b[6 ], uuid.b[7 ], uuid.b[8 ], uuid.b[9 ], - uuid.b[10 ], uuid.b[11 ], uuid.b[12 ], uuid.b[13 ], uuid.b[14 ], - uuid.b[15 ]); + uuid->b[0 ], uuid->b[1 ], uuid->b[2 ], uuid->b[3 ], uuid->b[4 ], + uuid->b[5 ], uuid->b[6 ], uuid->b[7 ], uuid->b[8 ], uuid->b[9 ], + uuid->b[10 ], uuid->b[11 ], uuid->b[12 ], uuid->b[13 ], uuid->b[14 ], + uuid->b[15 ]);add_wildcard (alias);return 1 ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 186/244 powerpc/40x: Remove stale PTE_ATOMIC_UPDATES macro
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe Leroy <[email protected]>
[ Upstream commit cc8ee288f484a2a59c01ccd4d8a417d6ed3466e3 ]
40x TLB handlers were reworked by commit 2c74e2586bb9 ("powerpc/40x:
Rework 40x PTE access and TLB miss") to not require PTE_ATOMIC_UPDATES anymore.
Then commit 4e1df545e2fa ("powerpc/pgtable: Drop PTE_ATOMIC_UPDATES") removed all code related to PTE_ATOMIC_UPDATES.
Remove left over PTE_ATOMIC_UPDATES macro.
--- arch/powerpc/include/asm/nohash/32/pte-40x.h | 3 --- 1 file changed, 3 deletions(-)
arch/powerpc/include/asm/nohash/32/pte-40x.h +0 -3
@@ -69,9 +69,6 @@#define _PTE_NONE_MASK 0 -/* Until my rework is finished, 40x still needs atomic PTE updates */ -#define PTE_ATOMIC_UPDATES 1 -#define _PAGE_BASE_NC (_PAGE_PRESENT | _PAGE_ACCESSED)#define _PAGE_BASE (_PAGE_BASE_NC)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 187/244 powerpc/xive: Fix endian conversion size
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Benjamin Gray <[email protected]>
[ Upstream commit ff7a60ab1e065257a0e467c13b519f4debcd7fcf ]
Sparse reports a size mismatch in the endian swap. The Opal implementation[1] passes the value as a __be64, and the receiving variable out_qsize is a u64, so the use of be32_to_cpu() appears to be an error.
[1]: https://github.com/open-power/skiboot/blob/80e2b1dc73/hw/xive.c#L3854
--- arch/powerpc/sysdev/xive/native.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/powerpc/sysdev/xive/native.c +1 -1
@@ -786,7 +786,7 @@ int xive_native_get_queue_info(u32 vp_id, u32 prio,if (out_qpage) *out_qpage =be64_to_cpu (qpage);if (out_qsize) - *out_qsize =be32_to_cpu (qsize); + *out_qsize =be64_to_cpu (qsize);if (out_qeoi_page) *out_qeoi_page =be64_to_cpu (qeoi_page);if (out_escalate_irq)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 188/244 powerpc/imc-pmu: Use the correct spinlock initializer.
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sebastian Andrzej Siewior <[email protected]>
[ Upstream commit 007240d59c11f87ac4f6cfc6a1d116630b6b634c ]
The macro __SPIN_LOCK_INITIALIZER() is implementation specific. Users that desire to initialize a spinlock in a struct must use __SPIN_LOCK_UNLOCKED().
Use __SPIN_LOCK_UNLOCKED() for the spinlock_t in imc_global_refc.
--- arch/powerpc/perf/imc-pmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/powerpc/perf/imc-pmu.c +1 -1
@@ -50,7 +50,7 @@ static int trace_imc_mem_size;* core and trace-imc */ static struct imc_pmu_ref imc_global_refc = { - .lock =__SPIN_LOCK_INITIALIZER (imc_global_refc.lock), + .lock =__SPIN_LOCK_UNLOCKED (imc_global_refc.lock), .id =0 , .refc =0 , };
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 189/244 powerpc/pseries: fix potential memory leak in init_cpu_associativity()
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wang Yufen <[email protected]>
[ Upstream commit 95f1a128cd728a7257d78e868f1f5a145fc43736 ]
If the vcpu_associativity alloc memory successfully but the pcpu_associativity fails to alloc memory, the vcpu_associativity memory leaks.
--- arch/powerpc/platforms/pseries/lpar.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
arch/powerpc/platforms/pseries/lpar.c +3 -1
@@ -524,8 +524,10 @@ static ssize_t vcpudispatch_stats_write(struct file *file, const char __user *p,if (cmd) { rc =init_cpu_associativity (); -if (rc) +if (rc) { +destroy_cpu_associativity (); goto out; + }for_each_possible_cpu (cpu) { disp =per_cpu_ptr (&vcpu_disp_data, cpu);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 190/244 xhci: Loosen RPM as default policy to cover for AMD xHC 1.1
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Basavaraj Natikar <[email protected]>
[ Upstream commit 4baf1218150985ee3ab0a27220456a1f027ea0ac ]
The AMD USB host controller (1022:43f7) isn't going into PCI D3 by default without anything connected. This is because the policy that was introduced by commit a611bf473d1f ("xhci-pci: Set runtime PM as default policy on all xHC 1.2 or later devices") only covered 1.2 or later.
The 1.1 specification also has the same requirement as the 1.2 specification for D3 support. So expand the runtime PM as default policy to all AMD 1.1 devices as well.
--- drivers/usb/host/xhci-pci.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/usb/host/xhci-pci.c +2 -0
@@ -349,6 +349,8 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)/* xHC spec requires PCI devices to support D3hot and D3cold */ if (xhci->hci_version >=0x120 ) xhci->quirks |=XHCI_DEFAULT_PM_RUNTIME_ALLOW ; +else if (pdev->vendor ==PCI_VENDOR_ID_AMD && xhci->hci_version >=0x110 ) + xhci->quirks |=XHCI_DEFAULT_PM_RUNTIME_ALLOW ;if (xhci->quirks &XHCI_RESET_ON_RESUME ) xhci_dbg_trace(xhci, trace_xhci_dbg_quirks,
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 191/244 usb: host: xhci-plat: fix possible kernel oops while resuming
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sergey Shtylyov <[email protected]>
[ Upstream commit a5f928db59519a15e82ecba4ae3e7cbf5a44715a ]
If this driver enables the xHC clocks while resuming from sleep, it calls clk_prepare_enable() without checking for errors and blithely goes on to read/write the xHC's registers -- which, with the xHC not being clocked, at least on ARM32 usually causes an imprecise external abort exceptions which cause kernel oops. Currently, the chips for which the driver does the clock dance on suspend/resume seem to be the Broadcom STB SoCs, based on ARM32 CPUs, as it seems...
Found by Linux Verification Center (linuxtesting.org) with the Svace static analysis tool.
--- drivers/usb/host/xhci-plat.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-)
drivers/usb/host/xhci-plat.c +19 -4
@@ -466,23 +466,38 @@ static int __maybe_unused xhci_plat_resume(struct device *dev)int ret;if (!device_may_wakeup (dev) && (xhci->quirks &XHCI_SUSPEND_RESUME_CLKS )) { -clk_prepare_enable (xhci->clk); -clk_prepare_enable (xhci->reg_clk); + ret =clk_prepare_enable (xhci->clk); +if (ret) +return ret; + + ret =clk_prepare_enable (xhci->reg_clk); +if (ret) { +clk_disable_unprepare (xhci->clk); +return ret; + } } ret =xhci_priv_resume_quirk (hcd);if (ret) -return ret; + goto disable_clks; ret =xhci_resume (xhci,0 );if (ret) -return ret; + goto disable_clks;pm_runtime_disable (dev);pm_runtime_set_active (dev);pm_runtime_enable (dev);return 0 ; + +disable_clks: +if (!device_may_wakeup (dev) && (xhci->quirks &XHCI_SUSPEND_RESUME_CLKS )) { +clk_disable_unprepare (xhci->clk); +clk_disable_unprepare (xhci->reg_clk); + } + +return ret; }static int __maybe_unused xhci_plat_runtime_suspend (struct device *dev)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 192/244 perf machine: Avoid out of bounds LBR memory read
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ian Rogers <[email protected]>
[ Upstream commit ab8ce150781d326c6bfbe1e09f175ffde1186f80 ]
Running perf top with address sanitizer and "--call-graph=lbr" fails due to reading sample 0 when no samples exist. Add a guard to prevent this.
--- tools/perf/util/machine.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-)
tools/perf/util/machine.c +12 -10
@@ -2437,16 +2437,18 @@ static int lbr_callchain_add_lbr_ip(struct thread *thread,save_lbr_cursor_node (thread, cursor, i); } -/* Add LBR ip from first entries.to */ - ip = entries[0 ].to; - flags = &entries[0 ].flags; - *branch_from = entries[0 ].from; - err =add_callchain_ip (thread, cursor, parent, - root_al, &cpumode, ip, - true, flags,NULL , - *branch_from); -if (err) -return err; +if (lbr_nr >0 ) { +/* Add LBR ip from first entries.to */ + ip = entries[0 ].to; + flags = &entries[0 ].flags; + *branch_from = entries[0 ].from; + err =add_callchain_ip (thread, cursor, parent, + root_al, &cpumode, ip, + true, flags,NULL , + *branch_from); +if (err) +return err; + }return 0 ; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 193/244 perf hist: Add missing puts to hist__account_cycles
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ian Rogers <[email protected]>
[ Upstream commit c1149037f65bcf0334886180ebe3d5efcf214912 ]
Caught using reference count checking on perf top with "--call-graph=lbr". After this no memory leaks were detected.
--- tools/perf/util/hist.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
tools/perf/util/hist.c +7 -3
@@ -2635,8 +2635,6 @@ void hist__account_cycles(struct branch_stack *bs, struct addr_location *al,/* If we have branch cycles always annotate them. */ if (bs && bs->nr && entries[0 ].flags.cycles) { -int i; - bi =sample__resolve_bstack (sample, al);if (bi) {struct addr_map_symbol *prev =NULL ;
@@ -2651,7 +2649,7 @@ void hist__account_cycles(struct branch_stack *bs, struct addr_location *al,* Note that perf stores branches reversed from * program order! */ -for (i = bs->nr -1 ; i >=0 ; i--) { +for (int i = bs->nr -1 ; i >=0 ; i--) {addr_map_symbol__account_cycles (&bi[i].from, nonany_branch_mode ?NULL : prev, bi[i].flags.cycles);
@@ -2660,6 +2658,12 @@ void hist__account_cycles(struct branch_stack *bs, struct addr_location *al,if (total_cycles) *total_cycles += bi[i].flags.cycles; } +for (unsigned int i =0 ; i < bs->nr; i++) { +map__put (bi[i].to.ms.map); +maps__put (bi[i].to.ms.maps); +map__put (bi[i].from.ms.map); +maps__put (bi[i].from.ms.maps); + }free (bi); } }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 194/244 9p/net: fix possible memory leak in p9_check_errors()
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hangyu Hua <[email protected]>
[ Upstream commit ce07087964208eee2ca2f9ee4a98f8b5d9027fe6 ]
When p9pdu_readf() is called with "s?d" attribute, it allocates a pointer that will store a string. But when p9pdu_readf() fails while handling "d" then this pointer will not be freed in p9_check_errors().
Message-ID: <[email protected]>
--- net/9p/client.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
net/9p/client.c +4 -2
@@ -520,12 +520,14 @@ static int p9_check_errors(struct p9_client *c, struct p9_req_t *req)return 0 ;if (!p9_is_proto_dotl (c)) { -char *ename; +char *ename =NULL ; err =p9pdu_readf (&req->rc, c->proto_version,"s?d" , &ename, &ecode); -if (err) +if (err) { +kfree (ename); goto out_err; + }if (p9_is_proto_dotu (c) && ecode <512 ) err = -ecode;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 195/244 i3c: Fix potential refcount leak in i3c_master_register_new_i3c_devs
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dinghao Liu <[email protected]>
[ Upstream commit cab63f64887616e3c4e31cfd8103320be6ebc8d3 ]
put_device() needs to be called on failure of device_register() to give up the reference initialized in it to avoid refcount leak.
--- drivers/i3c/master.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/i3c/master.c +3 -1
@@ -1506,9 +1506,11 @@ i3c_master_register_new_i3c_devs(struct i3c_master_controller *master) desc->dev->dev.of_node = desc->boardinfo->of_node; ret =device_register (&desc->dev->dev); -if (ret) +if (ret) {dev_err (&master->dev,"Failed to add I3C device (err = %d)\n" , ret); +put_device (&desc->dev->dev); + } } }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 196/244 cxl/mem: Fix shutdown order
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Williams <[email protected]>
[ Upstream commit 88d3917f82ed4215a2154432c26de1480a61b209 ]
Ira reports that removing cxl_mock_mem causes a crash with the following trace:
BUG: kernel NULL pointer dereference, address: 0000000000000044 [..] RIP: 0010:cxl_region_decode_reset+0x7f/0x180 [cxl_core] [..] Call Trace: <TASK> cxl_region_detach+0xe8/0x210 [cxl_core] cxl_decoder_kill_region+0x27/0x40 [cxl_core] cxld_unregister+0x29/0x40 [cxl_core] devres_release_all+0xb8/0x110 device_unbind_cleanup+0xe/0x70 device_release_driver_internal+0x1d2/0x210 bus_remove_device+0xd7/0x150 device_del+0x155/0x3e0 device_unregister+0x13/0x60 devm_release_action+0x4d/0x90 ? __pfx_unregister_port+0x10/0x10 [cxl_core] delete_endpoint+0x121/0x130 [cxl_core] devres_release_all+0xb8/0x110 device_unbind_cleanup+0xe/0x70 device_release_driver_internal+0x1d2/0x210 bus_remove_device+0xd7/0x150 device_del+0x155/0x3e0 ? lock_release+0x142/0x290 cdev_device_del+0x15/0x50 cxl_memdev_unregister+0x54/0x70 [cxl_core]
This crash is due to the clearing out the cxl_memdev's driver context (@cxlds) before the subsystem is done with it. This is ultimately due to the region(s), that this memdev is a member, being torn down and expecting to be able to de-reference @cxlds, like here:
static int cxl_region_decode_reset(struct cxl_region *cxlr, int count)
...
if (cxlds->rcd)
goto endpoint_reset;...
Fix it by keeping the driver context valid until memdev-device unregistration, and subsequently the entire stack of related dependencies, unwinds.
--- drivers/cxl/core/memdev.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/cxl/core/memdev.c +1 -2
@@ -139,10 +139,9 @@ static void cxl_memdev_unregister(void *struct cdev *cdev = &cxlmd->cdev;const struct cdevm_file_operations *cdevm_fops; +cdev_device_del (&cxlmd->cdev, dev); cdevm_fops =container_of (cdev->ops,typeof (*cdevm_fops), fops); cdevm_fops->shutdown (dev); - -cdev_device_del (&cxlmd->cdev, dev);put_device (dev); }
Greg Kroah-Hartman
maintainerPATCH 197/244 rtc: pcf85363: fix wrong mask/val parameters in regmap_update_bits call
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Javier Carrasco <[email protected]>
[ Upstream commit 2be36c09b6b07306be33519e1aa70d2e2a2161bb ]
The current implementation passes PIN_IO_INTA_OUT (2) as a mask and PIN_IO_INTAPM (GENMASK(1, 0)) as a value.
Swap the variables to assign mask and value the right way.
This error was first introduced with the alarm support. For better or worse it worked as expected because 0x02 was applied as a mask to 0x03, resulting 0x02 anyway. This will of course not work for any other value.
--- drivers/rtc/rtc-pcf85363.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/rtc/rtc-pcf85363.c +1 -1
@@ -403,7 +403,7 @@ static int pcf85363_probe(struct i2c_client *client,if (client->irq >0 ) {regmap_write (pcf85363->regmap,CTRL_FLAGS ,0 );regmap_update_bits (pcf85363->regmap,CTRL_PIN_IO , -PIN_IO_INTA_OUT ,PIN_IO_INTAPM ); +PIN_IO_INTAPM ,PIN_IO_INTA_OUT ); ret = devm_request_threaded_irq(&client->dev, client->irq, NULL, pcf85363_rtc_handle_irq, IRQF_TRIGGER_LOW | IRQF_ONESHOT,
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 198/244 pcmcia: cs: fix possible hung task and memory leak pccardd()
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yang Yingliang <[email protected]>
[ Upstream commit e3ea1b4847e49234e691c0d66bf030bd65bb7f2b ]
If device_register() returns error in pccardd(), it leads two issues:
1. The socket_released has never been completed, it will block pcmcia_unregister_socket(), because of waiting for completion of socket_released.
2. The device name allocated by dev_set_name() is leaked.
Fix this two issues by calling put_device() when device_register() fails. socket_released can be completed in pcmcia_release_socket(), the name can be freed in kobject_cleanup().
--- drivers/pcmcia/cs.c | 1 + 1 file changed, 1 insertion(+)
drivers/pcmcia/cs.c +1 -0
@@ -605,6 +605,7 @@ static int pccardd(void *__skt)dev_warn (&skt->dev,"PCMCIA: unable to register socket\n" ); skt->thread =NULL ;complete (&skt->thread_done); +put_device (&skt->dev);return 0 ; } ret =pccard_sysfs_add_socket (&skt->dev);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 199/244 pcmcia: ds: fix refcount leak in pcmcia_device_add()
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yang Yingliang <[email protected]>
[ Upstream commit 402ab979b29126068e0b596b641422ff7490214c ]
As the comment of device_register() says, it should use put_device() to give up the reference in the error path. Then, insofar resources will be freed in pcmcia_release_dev(), the error path is no longer needed. In particular, this means that the (previously missing) dropping of the reference to &p_dev->function_config->ref is now handled by pcmcia_release_dev().
--- drivers/pcmcia/ds.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
drivers/pcmcia/ds.c +8 -2
@@ -573,8 +573,14 @@ static struct pcmcia_device *pcmcia_device_add(struct pcmcia_socket *s,pcmcia_device_query (p_dev); -if (device_register (&p_dev->dev)) - goto err_unreg; +if (device_register (&p_dev->dev)) { +mutex_lock (&s->ops_mutex); +list_del (&p_dev->socket_device_list); + s->device_count--; +mutex_unlock (&s->ops_mutex); +put_device (&p_dev->dev); +return NULL ; + }return p_dev;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 200/244 pcmcia: ds: fix possible name leak in error path in pcmcia_device_add()
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yang Yingliang <[email protected]>
[ Upstream commit 99e1241049a92dd3e9a90a0f91e32ce390133278 ]
Afer commit 1fa5ae857bb1 ("driver core: get rid of struct device's bus_id string array"), the name of device is allocated dynamically. Therefore, it needs to be freed, which is done by the driver core for us once all references to the device are gone. Therefore, move the dev_set_name() call immediately before the call device_register(), which either succeeds (then the freeing will be done upon subsequent remvoal), or puts the reference in the error call. Also, it is not unusual that the return value of dev_set_name is not checked.
--- drivers/pcmcia/ds.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/pcmcia/ds.c +1 -3
@@ -513,9 +513,6 @@ static struct pcmcia_device *pcmcia_device_add(struct pcmcia_socket *s,/* by default don't allow DMA */ p_dev->dma_mask =0 ; p_dev->dev.dma_mask = &p_dev->dma_mask; -dev_set_name (&p_dev->dev,"%d.%d" , p_dev->socket->sock, p_dev->device_no); -if (!dev_name (&p_dev->dev)) - goto err_free; p_dev->devname =kasprintf (GFP_KERNEL ,"pcmcia%s" ,dev_name (&p_dev->dev));if (!p_dev->devname) goto err_free;
@@ -573,6 +570,7 @@ static struct pcmcia_device *pcmcia_device_add(struct pcmcia_socket *s,pcmcia_device_query (p_dev); +dev_set_name (&p_dev->dev,"%d.%d" , p_dev->socket->sock, p_dev->device_no);if (device_register (&p_dev->dev)) {mutex_lock (&s->ops_mutex);list_del (&p_dev->socket_device_list);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 201/244 media: i2c: max9286: Fix some redundant of_node_put() calls
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe JAILLET <[email protected]>
[ Upstream commit 0822315e46b400f611cba1193456ee6a5dc3e41d ]
This is odd to have a of_node_put() just after a for_each_child_of_node() or a for_each_endpoint_of_node() loop. It should already be called during the last iteration.
Remove these calls.
--- drivers/media/i2c/max9286.c | 2 -- 1 file changed, 2 deletions(-)
drivers/media/i2c/max9286.c +0 -2
@@ -1231,7 +1231,6 @@ static int max9286_parse_dt(struct max9286_priv *priv) i2c_mux_mask |=BIT (id); } -of_node_put (node);of_node_put (i2c_mux);/* Parse the endpoints */
@@ -1295,7 +1294,6 @@ static int max9286_parse_dt(struct max9286_priv *priv) priv->source_mask |=BIT (ep.port); priv->nsources++; } -of_node_put (node);/* * Parse the initial value of the reverse channel amplitude from
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 202/244 media: bttv: fix use after free error due to btv->timeout timer
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zheng Wang <[email protected]>
[ Upstream commit bd5b50b329e850d467e7bcc07b2b6bde3752fbda ]
There may be some a race condition between timer function bttv_irq_timeout and bttv_remove. The timer is setup in probe and there is no timer_delete operation in remove function. When it hit kfree btv, the function might still be invoked, which will cause use after free bug.
This bug is found by static analysis, it may be false positive.
Fix it by adding del_timer_sync invoking to the remove function.
cpu0 cpu1
bttv_probe
->timer_setup
->bttv_set_dma
->mod_timer;
bttv_remove
->kfree(btv);
->bttv_irq_timeout
->USE btv--- drivers/media/pci/bt8xx/bttv-driver.c | 1 + 1 file changed, 1 insertion(+)
drivers/media/pci/bt8xx/bttv-driver.c +1 -0
@@ -4250,6 +4250,7 @@ static void bttv_remove(struct pci_dev *pci_dev)/* free resources */ free_irq (btv->c.pci->irq,btv); +del_timer_sync (&btv->timeout);iounmap (btv->bt848_mmio);release_mem_region (pci_resource_start (btv->c.pci,0 ),pci_resource_len (btv->c.pci,0 ));
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 203/244 media: s3c-camif: Avoid inappropriate kfree()
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Katya Orlova <[email protected]>
[ Upstream commit 61334819aca018c3416ee6c330a08a49c1524fc3 ]
s3c_camif_register_video_node() works with video_device structure stored as a field of camif_vp, so it should not be kfreed.
But there is video_device_release() on error path that do it.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
--- drivers/media/platform/s3c-camif/camif-capture.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/platform/s3c-camif/camif-capture.c +2 -4
@@ -1132,12 +1132,12 @@ int s3c_camif_register_video_node(struct camif_dev *camif, int idx) ret =vb2_queue_init (q);if (ret) - goto err_vd_rel; +return ret; vp->pad.flags =MEDIA_PAD_FL_SINK ; ret =media_entity_pads_init (&vfd->entity,1 , &vp->pad);if (ret) - goto err_vd_rel; +return ret;video_set_drvdata (vfd, vp);
@@ -1170,8 +1170,6 @@ int s3c_camif_register_video_node(struct camif_dev *camif, int idx)v4l2_ctrl_handler_free (&vp->ctrl_handler); err_me_cleanup:media_entity_cleanup (&vfd->entity); -err_vd_rel: -video_device_release (vfd);return ret; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 204/244 media: vidtv: psi: Add check for kstrdup
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiasheng Jiang <[email protected]>
[ Upstream commit 76a2c5df6ca8bd8ada45e953b8c72b746f42918d ]
Add check for the return value of kstrdup() and return the error if it fails in order to avoid NULL pointer dereference.
--- drivers/media/test-drivers/vidtv/vidtv_psi.c | 45 +++++++++++++++++--- 1 file changed, 40 insertions(+), 5 deletions(-)
drivers/media/test-drivers/vidtv/vidtv_psi.c +40 -5
@@ -307,16 +307,29 @@ struct vidtv_psi_desc_service *vidtv_psi_service_desc_init(struct vidtv_psi_desc desc->service_name_len = service_name_len; -if (service_name && service_name_len) +if (service_name && service_name_len) { desc->service_name =kstrdup (service_name,GFP_KERNEL ); +if (!desc->service_name) + goto free_desc; + } desc->provider_name_len = provider_name_len; -if (provider_name && provider_name_len) +if (provider_name && provider_name_len) { desc->provider_name =kstrdup (provider_name,GFP_KERNEL ); +if (!desc->provider_name) + goto free_desc_service_name; + }vidtv_psi_desc_chain (head, (struct vidtv_psi_desc *)desc);return desc; + +free_desc_service_name: +if (service_name && service_name_len) +kfree (desc->service_name); +free_desc: +kfree (desc); +return NULL ; }struct vidtv_psi_desc_registration
@@ -361,8 +374,13 @@ struct vidtv_psi_desc_network_name desc->length = network_name_len; -if (network_name && network_name_len) +if (network_name && network_name_len) { desc->network_name =kstrdup (network_name,GFP_KERNEL ); +if (!desc->network_name) { +kfree (desc); +return NULL ; + } + }vidtv_psi_desc_chain (head, (struct vidtv_psi_desc *)desc);return desc;
@@ -448,15 +466,32 @@ struct vidtv_psi_desc_short_event iso_language_code ="eng" ; desc->iso_language_code =kstrdup (iso_language_code,GFP_KERNEL ); +if (!desc->iso_language_code) + goto free_desc; -if (event_name && event_name_len) +if (event_name && event_name_len) { desc->event_name =kstrdup (event_name,GFP_KERNEL ); +if (!desc->event_name) + goto free_desc_language_code; + } -if (text && text_len) +if (text && text_len) { desc->text =kstrdup (text,GFP_KERNEL ); +if (!desc->text) + goto free_desc_event_name; + }vidtv_psi_desc_chain (head, (struct vidtv_psi_desc *)desc);return desc; + +free_desc_event_name: +if (event_name && event_name_len) +kfree (desc->event_name); +free_desc_language_code: +kfree (desc->iso_language_code); +free_desc: +kfree (desc); +return NULL ; }struct vidtv_psi_desc *vidtv_psi_desc_clone (struct vidtv_psi_desc *desc)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 205/244 media: vidtv: mux: Add check and kfree for kstrdup
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiasheng Jiang <[email protected]>
[ Upstream commit 1fd6eb12642e0c32692924ff359c07de4b781d78 ]
Add check for the return value of kstrdup() and return the error if it fails in order to avoid NULL pointer dereference. Moreover, use kfree() in the later error handling in order to avoid memory leak.
--- drivers/media/test-drivers/vidtv/vidtv_mux.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/media/test-drivers/vidtv/vidtv_mux.c +6 -1
@@ -504,13 +504,16 @@ struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe, m->priv = args->priv; m->network_id = args->network_id; m->network_name =kstrdup (args->network_name,GFP_KERNEL ); +if (!m->network_name) + goto free_mux_buf; + m->timing.current_jiffies =get_jiffies_64 ();if (args->channels) m->channels = args->channels;else if (vidtv_channels_init (m) <0 ) - goto free_mux_buf; + goto free_mux_network_name;/* will alloc data for pmt_sections after initializing pat */ if (vidtv_channel_si_init (m) <0 )
@@ -527,6 +530,8 @@ struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe,vidtv_channel_si_destroy (m); free_channels:vidtv_channels_destroy (m); +free_mux_network_name: +kfree (m->network_name); free_mux_buf:vfree (m->mux_buf); free_mux:
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 206/244 media: cedrus: Fix clock/reset sequence
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jernej Skrabec <[email protected]>
[ Upstream commit 36fe515c1a3cd5eac148e8a591a82108d92d5522 ]
According to H6 user manual, resets should always be de-asserted before clocks are enabled. This is also consistent with vendor driver.
--- .../staging/media/sunxi/cedrus/cedrus_hw.c | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-)
drivers/staging/media/sunxi/cedrus/cedrus_hw.c +12 -12
@@ -147,12 +147,12 @@ int cedrus_hw_suspend(struct device *device) {struct cedrus_dev *dev =dev_get_drvdata (device); -reset_control_assert (dev->rstc); -clk_disable_unprepare (dev->ram_clk);clk_disable_unprepare (dev->mod_clk);clk_disable_unprepare (dev->ahb_clk); +reset_control_assert (dev->rstc); +return 0 ; }
@@ -161,11 +161,18 @@ int cedrus_hw_resume(struct device *device)struct cedrus_dev *dev =dev_get_drvdata (device);int ret; + ret =reset_control_reset (dev->rstc); +if (ret) { +dev_err (dev->dev,"Failed to apply reset\n" ); + +return ret; + } + ret =clk_prepare_enable (dev->ahb_clk);if (ret) {dev_err (dev->dev,"Failed to enable AHB clock\n" ); -return ret; + goto err_rst; } ret =clk_prepare_enable (dev->mod_clk);
@@ -182,21 +189,14 @@ int cedrus_hw_resume(struct device *device) goto err_mod_clk; } - ret =reset_control_reset (dev->rstc); -if (ret) { -dev_err (dev->dev,"Failed to apply reset\n" ); - - goto err_ram_clk; - } -return 0 ; -err_ram_clk: -clk_disable_unprepare (dev->ram_clk); err_mod_clk:clk_disable_unprepare (dev->mod_clk); err_ahb_clk:clk_disable_unprepare (dev->ahb_clk); +err_rst: +reset_control_assert (dev->rstc);return ret; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 207/244 media: dvb-usb-v2: af9035: fix missing unlock
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans Verkuil <[email protected]>
[ Upstream commit f31b2cb85f0ee165d78e1c43f6d69f82cc3b2145 ]
Instead of returning an error, goto the mutex unlock at the end of the function.
Fixes smatch warning:
drivers/media/usb/dvb-usb-v2/af9035.c:467 af9035_i2c_master_xfer() warn: inconsistent returns '&d->i2c_mutex'.
Locked on : 326,387
Unlocked on: 465,467
--- drivers/media/usb/dvb-usb-v2/af9035.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
drivers/media/usb/dvb-usb-v2/af9035.c +9 -4
@@ -323,8 +323,10 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap, ret = -EOPNOTSUPP ; }else if ((msg[0 ].addr == state->af9033_i2c_addr[0 ]) || (msg[0 ].addr == state->af9033_i2c_addr[1 ])) { -if (msg[0 ].len <3 || msg[1 ].len <1 ) -return -EOPNOTSUPP ; +if (msg[0 ].len <3 || msg[1 ].len <1 ) { + ret = -EOPNOTSUPP ; + goto unlock; + }/* demod access via firmware interface */ reg = msg[0 ].buf[0 ] <<16 | msg[0 ].buf[1 ] <<8 | msg[0 ].buf[2 ];
@@ -384,8 +386,10 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap, ret = -EOPNOTSUPP ; }else if ((msg[0 ].addr == state->af9033_i2c_addr[0 ]) || (msg[0 ].addr == state->af9033_i2c_addr[1 ])) { -if (msg[0 ].len <3 ) -return -EOPNOTSUPP ; +if (msg[0 ].len <3 ) { + ret = -EOPNOTSUPP ; + goto unlock; + }/* demod access via firmware interface */ reg = msg[0 ].buf[0 ] <<16 | msg[0 ].buf[1 ] <<8 | msg[0 ].buf[2 ];
@@ -460,6 +464,7 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap, ret = -EOPNOTSUPP ; } +unlock:mutex_unlock (&d->i2c_mutex);if (ret <0 )
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 208/244 regmap: prevent noinc writes from clobbering cache
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ben Wolsieffer <[email protected]>
[ Upstream commit 984a4afdc87a1fc226fd657b1cd8255c13d3fc1a ]
Currently, noinc writes are cached as if they were standard incrementing writes, overwriting unrelated register values in the cache. Instead, we want to cache the last value written to the register, as is done in the accelerated noinc handler (regmap_noinc_readwrite).
--- drivers/base/regmap/regmap.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)
drivers/base/regmap/regmap.c +9 -7
@@ -1683,17 +1683,19 @@ static int _regmap_raw_write_impl(struct regmap *map, unsigned int reg, }if (!map->cache_bypass && map->format.parse_val) { -unsigned int ival; +unsigned int ival, offset;int val_bytes = map->format.val_bytes; -for (i =0 ; i < val_len / val_bytes; i++) { - ival = map->format.parse_val (val + (i * val_bytes)); - ret =regcache_write (map, - reg +regmap_get_offset (map, i), - ival); + +/* Cache the last written value for noinc writes */ + i = noinc ? val_len - val_bytes :0 ; +for (; i < val_len; i += val_bytes) { + ival = map->format.parse_val (val + i); + offset = noinc ?0 :regmap_get_offset (map, i / val_bytes); + ret =regcache_write (map, reg + offset, ival);if (ret) {dev_err (map->dev,"Error in caching of register: %x ret: %d\n" , - reg +regmap_get_offset (map, i), ret); + reg + offset, ret);return ret; } }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 209/244 pwm: sti: Reduce number of allocations and drop usage of chip_data
In reply to Greg Kroah-Hartman5.15-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;
@@ -417,7 +418,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:
@@ -615,30 +616,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 210/244 pwm: brcmstb: Utilize appropriate clock APIs in suspend/resume
In reply to Greg Kroah-Hartman5.15-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
@@ -294,7 +294,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 ; }
@@ -303,7 +303,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 211/244 Input: synaptics-rmi4 - fix use after free in rmi_unregister_function()
In reply to Greg Kroah-Hartman5.15-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
@@ -276,11 +276,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 212/244 llc: verify mac len before reading mac header
In reply to Greg Kroah-Hartman5.15-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 213/244 hsr: Prevent use after free in prp_create_tagged_frame()
In reply to Greg Kroah-Hartman5.15-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
@@ -300,9 +300,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 214/244 tipc: Change nla_policy for bearer-related names to NLA_NUL_STRING
In reply to Greg Kroah-Hartman5.15-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 215/244 bpf: Check map->usercnt after timer->timer is assigned
In reply to Greg Kroah-Hartman5.15-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
@@ -1118,13 +1118,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) {
@@ -1137,7 +1130,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;
@@ -1305,7 +1312,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 216/244 inet: shrink struct flowi_common
In reply to Greg Kroah-Hartman5.15-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
@@ -39,8 +39,8 @@ struct flowi_common {#define FLOWI_FLAG_SKIP_NH_OIF 0x04__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 217/244 octeontx2-pf: Fix error codes
In reply to Greg Kroah-Hartman5.15-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
@@ -311,23 +311,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 218/244 octeontx2-pf: Fix holes in error code
In reply to Greg Kroah-Hartman5.15-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
@@ -1180,31 +1180,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)
@@ -1224,14 +1225,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); }
@@ -1254,7 +1257,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; }
@@ -1264,8 +1268,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 ));
@@ -1282,16 +1289,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 219/244 dccp: Call security_inet_conn_request() after setting IPv4 addresses.
In reply to Greg Kroah-Hartman5.15-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
@@ -623,9 +623,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);
@@ -633,6 +630,9 @@ int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb) ireq->ireq_family =AF_INET ; ireq->ir_iif = 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 220/244 dccp/tcp: Call security_inet_conn_request() after setting IPv6 addresses.
In reply to Greg Kroah-Hartman5.15-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
@@ -359,15 +359,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 221/244 net: r8169: Disable multicast filter for RTL8168H and RTL8107E
In reply to Greg Kroah-Hartman5.15-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
@@ -2551,7 +2551,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 222/244 Fix termination state for idr_for_each_entry_ul()
In reply to Greg Kroah-Hartman5.15-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 223/244 net: stmmac: xgmac: Enable support for multiple Flexible PPS outputs
In reply to Greg Kroah-Hartman5.15-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
@@ -222,7 +222,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
@@ -1134,7 +1134,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 224/244 selftests: pmtu.sh: fix result checking
In reply to Greg Kroah-Hartman5.15-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
@@ -1880,7 +1880,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 225/244 net/smc: fix dangling sock under state SMC_APPFINCLOSEWAIT
In reply to Greg Kroah-Hartman5.15-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
@@ -145,7 +145,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 ) {
@@ -1334,7 +1334,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
@@ -315,4 +315,9 @@ static inline bool using_ipsec(struct smc_sock *smc)struct sock *smc_accept_dequeue (struct sock *parent,struct socket *new_sock);void smc_close_non_accepted (struct sock *sk); +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
@@ -370,7 +370,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
@@ -170,7 +170,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 226/244 net/smc: allow cdc msg send rather than drop it with NULL sndbuf_desc
In reply to Greg Kroah-Hartman5.15-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 */
@@ -104,9 +106,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 227/244 net/smc: put sk reference if close work was canceled
In reply to Greg Kroah-Hartman5.15-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
@@ -113,7 +113,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 228/244 tg3: power down device only on SYSTEM_POWER_OFF
In reply to Greg Kroah-Hartman5.15-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
@@ -18088,7 +18088,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 229/244 block: remove unneeded return value of bio_check_ro()
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Miaohe Lin <[email protected]>
[ Upstream commit bdb7d420c6f6d2618d4c907cd7742c3195c425e2 ]
bio_check_ro() always return false now. Remove this unneeded return value and cleanup the sole caller. No functional change intended.
Stable-dep-of: 1b0a151c10a6 ("blk-core: use pr_warn_ratelimited() in bio_check_ro()")
--- block/blk-core.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-)
block/blk-core.c +3 -7
@@ -693,18 +693,15 @@ static inline bool should_fail_request(struct block_device *part,#endif /* CONFIG_FAIL_MAKE_REQUEST */ -static inline bool bio_check_ro (struct bio *bio) +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 false; +return ;pr_warn ("Trying to write to read-only block-device %pg\n" , bio->bi_bdev);/* Older lvm-tools actually trigger this */ -return false; } - -return false; } static noinline int should_fail_bio(struct bio *bio)
@@ -810,8 +807,7 @@ static noinline_for_stack bool submit_bio_checks(struct bio *bio)if (should_fail_bio (bio)) goto end_io; -if (unlikely (bio_check_ro (bio))) - goto end_io; +bio_check_ro (bio);if (!bio_flagged (bio,BIO_REMAPPED )) {if (unlikely (bio_check_eod (bio))) goto end_io;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 230/244 blk-core: use pr_warn_ratelimited() in bio_check_ro()
In reply to Greg Kroah-Hartman5.15-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
@@ -698,8 +698,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 231/244 r8169: respect userspace disabling IFF_MULTICAST
In reply to Greg Kroah-Hartman5.15-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
@@ -2549,6 +2549,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 232/244 i2c: iproc: handle invalid slave state
In reply to Greg Kroah-Hartman5.15-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
@@ -326,26 +326,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)
@@ -430,48 +448,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++;
@@ -503,8 +479,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 );
@@ -525,9 +502,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 233/244 netfilter: xt_recent: fix (increase) ipv6 literal buffer length
In reply to Greg Kroah-Hartman5.15-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 234/244 netfilter: nft_redir: use `struct nf_nat_range2` throughout and deduplicate eval call-backs
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jeremy Sowden <[email protected]>
[ Upstream commit 6f56ad1b92328997e1b1792047099df6f8d7acb5 ]
nf_nat_redirect_ipv4 takes a struct nf_nat_ipv4_multi_range_compat, but converts it internally to a struct nf_nat_range2. Change the function to take the latter, factor out the code now shared with nf_nat_redirect_ipv6, move the conversion to the xt_REDIRECT module, and update the ipv4 range initialization in the nft_redir module.
Replace a bare hex constant for 127.0.0.1 with a macro.
Remove WARN_ON. nf_nat_setup_info calls nf_ct_is_confirmed:
/* Can't setup nat info for confirmed ct. */ if (nf_ct_is_confirmed(ct)) return NF_ACCEPT;
This means that ct cannot be null or the kernel will crash, and implies that ctinfo is IP_CT_NEW or IP_CT_RELATED.
nft_redir has separate ipv4 and ipv6 call-backs which share much of their code, and an inet one switch containing a switch that calls one of the others based on the family of the packet. Merge the ipv4 and ipv6 ones into the inet one in order to get rid of the duplicate code.
Const-qualify the priv pointer since we don't need to write through it.
Assign priv->flags to the range instead of OR-ing it in.
Set the NF_NAT_RANGE_PROTO_SPECIFIED flag once during init, rather than on every eval.
Stable-dep-of: 80abbe8a8263 ("netfilter: nat: fix ipv6 nat redirect with mapped and scoped addresses")
--- include/net/netfilter/nf_nat_redirect.h | 3 +- net/netfilter/nf_nat_redirect.c | 71 ++++++++++----------- net/netfilter/nft_redir.c | 84 +++++++++---------------- net/netfilter/xt_REDIRECT.c | 10 ++- 4 files changed, 72 insertions(+), 96 deletions(-)
include/net/netfilter/nf_nat_redirect.h +1 -2
@@ -6,8 +6,7 @@#include <uapi/linux/netfilter/nf_nat.h> unsigned int -nf_nat_redirect_ipv4 (struct sk_buff *skb, -const struct nf_nat_ipv4_multi_range_compat *mr, +nf_nat_redirect_ipv4 (struct sk_buff *skb,const struct nf_nat_range2 *range,unsigned int hooknum); unsigned int nf_nat_redirect_ipv6(struct sk_buff *skb, const struct nf_nat_range2 *range,
net/netfilter/nf_nat_redirect.c +32 -39
125 lines not on this page · raw message
net/netfilter/nft_redir.c +31 -53
131 lines not on this page · raw message
net/netfilter/xt_REDIRECT.c +8 -2
@@ -46,7 +46,6 @@ static void redirect_tg_destroy(const struct xt_tgdtor_param *par)nf_ct_netns_put (par->net, par->family); } -/* FIXME: Take multiple ranges --RR */ static int redirect_tg4_check (const struct xt_tgchk_param *par) {const struct nf_nat_ipv4_multi_range_compat *mr = par->targinfo;
@@ -65,7 +64,14 @@ static int redirect_tg4_check(const struct xt_tgchk_param *par)static unsigned int redirect_tg4 (struct sk_buff *skb,const struct xt_action_param *par) { -return nf_nat_redirect_ipv4 (skb, par->targinfo,xt_hooknum (par)); +const struct nf_nat_ipv4_multi_range_compat *mr = par->targinfo; +struct nf_nat_range2 range = { + .flags = mr->range[0 ].flags, + .min_proto = mr->range[0 ].min, + .max_proto = mr->range[0 ].max, + }; + +return nf_nat_redirect_ipv4 (skb, &range,xt_hooknum (par)); }static struct xt_target redirect_tg_reg[]__read_mostly = {
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 235/244 netfilter: nat: fix ipv6 nat redirect with mapped and scoped addresses
In reply to Greg Kroah-Hartman5.15-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 236/244 drm/syncobj: fix DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE
In reply to Greg Kroah-Hartman5.15-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
@@ -1056,7 +1056,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 237/244 ASoC: hdmi-codec: register hpd callback on component probe
In reply to Greg Kroah-Hartman5.15-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
@@ -870,18 +870,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)
@@ -965,6 +960,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);
@@ -975,6 +985,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 238/244 spi: spi-zynq-qspi: add spi-mem to driver kconfig dependencies
In reply to Greg Kroah-Hartman5.15-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
@@ -976,6 +976,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 239/244 fbdev: imsttfb: Fix error path of imsttfb_probe()
In reply to Greg Kroah-Hartman5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Helge Deller <[email protected]>
[ Upstream commit 518ecb6a209f6ff678aeadf9f2bf870c0982ca85 ]
Release ressources when init_imstt() returns failure.
Stable-dep-of: aba6ab57a910 ("fbdev: imsttfb: fix a resource leak in probe")
--- drivers/video/fbdev/imsttfb.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/video/fbdev/imsttfb.c +4 -2
@@ -1525,8 +1525,10 @@ static int imsttfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent) goto error; info->pseudo_palette = par->palette; ret =init_imstt (info); -if (!ret) -pci_set_drvdata (pdev, info); +if (ret) + goto error; + +pci_set_drvdata (pdev, info);return ret; error:
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 240/244 fbdev: imsttfb: fix a resource leak in probe
In reply to Greg Kroah-Hartman5.15-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
@@ -1489,8 +1489,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) {
@@ -1507,36 +1507,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 241/244 fbdev: fsl-diu-fb: mark wr_reg_wa() static
In reply to Greg Kroah-Hartman5.15-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 242/244 tracing/kprobes: Fix the order of argument descriptions
In reply to Greg Kroah-Hartman5.15-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
@@ -942,9 +942,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 243/244 Revert "mmc: core: Capture correct oemid-bits for eMMC cards"
In reply to Greg Kroah-Hartman5.15-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
@@ -96,7 +96,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 244/244 btrfs: use u64 for buffer sizes in the tree search ioctls
In reply to Greg Kroah-Hartman5.15-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
@@ -2094,7 +2094,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)
@@ -2226,7 +2226,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);
@@ -2295,7 +2295,7 @@ static noinline int btrfs_ioctl_tree_search(struct file *file,struct btrfs_ioctl_search_key sk;struct inode *inode;int ret; -size_t buf_size; +u64 buf_size;if (!capable (CAP_SYS_ADMIN ))return -EPERM ;
@@ -2329,8 +2329,8 @@ static noinline int btrfs_ioctl_tree_search_v2(struct file *file,struct btrfs_ioctl_search_args_v2 args;struct inode *inode;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
Hello,
Quoted 5 lines · On Wed, 15 Nov 2023 15:33:12 -0500 Greg Kroah-Hartman…
This is the start of the stable review cycle for the 5.15.139 release. There are 244 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 20:34:45 +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/v5.x/stable-review/patch-5.15.139-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.15.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] 0d55b31d7e1d ("Linux 5.15.139-rc1")
Thanks,
SJ
[...]
---
ok 1 selftests: damon: debugfs_attrs.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 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.15.139 release. There are 244 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 20:34:45 +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/v5.x/stable-review/patch-5.15.139-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.15.y
and the diffstat can be found below.thanks,
greg k-h
Same as with 5.15-rc and AFAIR the previous -rc cyle, we get perf build failures:
/local/stbopt_p/toolchains_303/stbgcc-12.3-0.2/bin/../lib/gcc/arm-unknown-linux-musleabihf/12.3.0/../../../../arm-unknown-linux-musleabihf/bin/ld: /local/users/fainelli/buildroot/output/arm/build/linux-custom/tools/perf/perf-in.o: in function `evlist__add_aux_dummy':
/local/users/fainelli/buildroot/output/arm/build/linux-custom/tools/perf/util/evlist.c:266: undefined reference to `evlist__dummy_event'
collect2: error: ld returned 1 exit status
make[4]: *** [Makefile.perf:670: /local/users/fainelli/buildroot/output/arm/build/linux-custom/tools/perf/perf] Error 1
same culprit: 21e98e11091bd6ef5e8e70650c6a52dee0e6c11f ("perf evlist: Add evlist__add_dummy_on_all_cpus()")
Signature · 1 line
Florian
Hi Greg,
Quoted 5 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.15.139 release. There are 244 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 9 lines
Responses should be made by Fri, 17 Nov 2023 20:34:45 +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/v5.x/stable-review/patch-5.15.139-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.15.y
and the diffstat can be found below.
As Florian pointed:
I am also seeing build failure with perf, which is same as the previous cycle.
BUILDSTDERR: util/evlist.c: In function 'evlist__add_aux_dummy': BUILDSTDERR: util/evlist.c:266:31: error: implicit declaration of function 'evlist__dummy_event'; did you mean 'evlist__add_sb_event'? [-Werror=implicit-function-declaration] BUILDSTDERR: 266 | struct evsel *evsel = evlist__dummy_event(evlist); BUILDSTDERR: | ^~~~~~~~~~~~~~~~~~~ BUILDSTDERR: | evlist__add_sb_event BUILDSTDERR: util/evlist.c:266:31: error: initialization of 'struct evsel *' from 'int' makes pointer from integer without a cast [-Werror=int-conversion]
I think we should drop:3dcc2e4843277 perf evlist: Avoid frequency mode for the dummy event 4898cce349953 perf tools: Get rid of evlist__add_on_all_cpus() a6157c9aa899a perf evlist: Add evlist__add_dummy_on_all_cpus()
Thanks,
Harshit
Quoted 5 lines
thanks,
greg k-h
---
Sasha Levin
maintainerQuoted 29 lines · Harshit Mogalapalli
Hi Greg,
Quoted 5 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.15.139 release. There are 244 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 9 lines
Responses should be made by Fri, 17 Nov 2023 20:34:45 +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/v5.x/stable-review/patch-5.15.139-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.15.y
and the diffstat can be found below.As Florian pointed:
I am also seeing build failure with perf, which is same as the previous cycle.
BUILDSTDERR: util/evlist.c: In function 'evlist__add_aux_dummy': BUILDSTDERR: util/evlist.c:266:31: error: implicit declaration of function 'evlist__dummy_event'; did you mean 'evlist__add_sb_event'? [-Werror=implicit-function-declaration] BUILDSTDERR: 266 | struct evsel *evsel = evlist__dummy_event(evlist); BUILDSTDERR: | ^~~~~~~~~~~~~~~~~~~ BUILDSTDERR: | evlist__add_sb_event BUILDSTDERR: util/evlist.c:266:31: error: initialization of 'struct evsel *' from 'int' makes pointer from integer without a cast [-Werror=int-conversion]
Quoted 4 lines
I think we should drop:
3dcc2e4843277perf evlist: Avoid frequency mode for the dummy event4898cce349953perf tools: Get rid ofevlist__add_on_all_cpus()a6157c9aa899aperf evlist: Addevlist__add_dummy_on_all_cpus()
Dropped, thanks!
Signature · 2 lines
Thanks, Sasha
Harshit Mogalapalli
Tested-byHello Sasha and Greg,
Quoted 30 lines · Sasha Levin
Quoted 29 lines · Harshit Mogalapalli
Hi Greg,
Quoted 5 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.15.139 release. There are 244 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 9 lines
Responses should be made by Fri, 17 Nov 2023 20:34:45 +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/v5.x/stable-review/patch-5.15.139-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-5.15.y and the diffstat can be found below.As Florian pointed:
I am also seeing build failure with perf, which is same as the previous cycle.
BUILDSTDERR:
util/evlist.c: In function 'evlist__add_aux_dummy':
BUILDSTDERR:util/evlist.c:266:31: error: implicit declaration of function 'evlist__dummy_event'; did you mean 'evlist__add_sb_event'? [-Werror=implicit-function-declaration] BUILDSTDERR: 266 | struct evsel *evsel =evlist__dummy_event(evlist);
BUILDSTDERR: | ^~~~~~~~~~~~~~~~~~~
BUILDSTDERR: |evlist__add_sb_event
BUILDSTDERR:util/evlist.c:266:31: error: initialization of 'struct evsel *' from 'int' makes pointer from integer without a cast [-Werror=int-conversion]
Quoted 6 lines
Quoted 4 lines
I think we should drop:
3dcc2e4843277perf evlist: Avoid frequency mode for the dummy event4898cce349953perf tools: Get rid ofevlist__add_on_all_cpus()a6157c9aa899aperf evlist: Addevlist__add_dummy_on_all_cpus()Dropped, thanks!
I have reverted these locally and triggered tests on 5.15.139-rc1.
No problems seen on x86_64 and aarch64 with our testing.
Thanks,
Harshit
Quoted 1 line
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.15.139 release. There are 244 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 20:34:45 +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/v5.x/stable-review/patch-5.15.139-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.15.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.
## Build
* kernel: 5.15.139-rc1
* git: https://gitlab.com/Linaro/lkft/mirrors/stable/linux-stable-rc
* git branch: linux-5.15.y
* git commit: 0d55b31d7e1db6eee3c65c0e64d373dd4269578c
* git describe: v5.15.138-245-g0d55b31d7e1d
* test details:
https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-5.15.y/build/v5.15.138-245-g0d55b31d7e1d
## Test Regressions (compared to v5.15.138)
## Metric Regressions (compared to v5.15.138)
## Test Fixes (compared to v5.15.138)
## Metric Fixes (compared to v5.15.138)
## Test result summary
total: 85933, pass: 68466, fail: 2348, skip: 15070, xfail: 49
## Build Summary
* arc: 5 total, 5 passed, 0 failed
* arm: 115 total, 115 passed, 0 failed
* arm64: 43 total, 43 passed, 0 failed
* i386: 34 total, 33 passed, 1 failed
* mips: 24 total, 24 passed, 0 failed
* parisc: 4 total, 4 passed, 0 failed
* powerpc: 26 total, 26 passed, 0 failed
* riscv: 10 total, 10 passed, 0 failed
* s390: 11 total, 11 passed, 0 failed
* sh: 10 total, 10 passed, 0 failed
* sparc: 8 total, 8 passed, 0 failed
* x86_64: 37 total, 37 passed, 0 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-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-tmpfs
* kselftest-tpm2
* kselftest-user
* kselftest-user_events
* kselftest-vDSO
* kselftest-vm
* kselftest-x86
* kselftest-zram
* kunit
* libgpiod
* 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
* perf
* rcutorture
--
Linaro LKFT
https://lkft.linaro.org
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.15.139 release. There are 244 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 20:34:45 +0000. Anything received after that time might be too late.
Build results:
total: 160 pass: 158 fail: 2 Failed builds: i386:tools/perf x86_64:tools/perf Qemu test results: total: 509 pass: 509 fail: 0
Sam perf build failure as reported by others. Note that I see the same problem in the v5.10.y release candidate.
Guenter
Allen Pais
Tested-byQuoted 16 lines
Quoted 8 lines
This is the start of the stable review cycle for the 5.15.139 release. There are 244 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 20:34:45 +0000. Anything received after that time might be too late.
Build results:
total: 160 pass: 158 fail: 2 Failed builds: i386:tools/perf x86_64:tools/perf Qemu test results: total: 509 pass: 509 fail: 0
Quoted 3 lines
Sam perf build failure as reported by others. Note that I see the same problem in the v5.10.y release candidate.
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 5.15.139 release. There are 244 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 20:34:45 +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/v5.x/stable-review/patch-5.15.139-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.15.y
and the diffstat can be found below.thanks,
greg k-h
Built and booted successfully on RISC-V RV64 (HiFive Unmatched).