Skip to contentSkip to conversation

Linux 5.10.109

DISCUSSION Greg Kroah-Hartman 3 participants 7 messages Mar 28, 2022 – Apr 8, 2022 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 5.10.109 kernel.

All users of the 5.10 kernel series must upgrade.

The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary

thanks,

greg k-h

------------

 Makefile                                         |    2 
 arch/nds32/include/asm/uaccess.h                 |   22 ++++-
 arch/x86/kernel/acpi/boot.c                      |   24 +++++
 drivers/acpi/battery.c                           |   12 ++
 drivers/acpi/video_detect.c                      |   75 +++++++++++++++++
 drivers/char/tpm/tpm-dev-common.c                |    8 +
 drivers/char/tpm/tpm2-space.c                    |    8 -
 drivers/crypto/qat/qat_common/qat_crypto.c       |    8 +
 drivers/net/ethernet/apm/xgene/xgene_enet_main.c |   12 +-
 drivers/net/wireless/ath/regd.c                  |   10 +-
 drivers/net/wireless/ath/wcn36xx/main.c          |    3 
 drivers/net/wireless/ath/wcn36xx/wcn36xx.h       |    1 
 drivers/nfc/st21nfca/se.c                        |   10 ++
 drivers/staging/fbtft/fb_st7789v.c               |    2 
 fs/exfat/super.c                                 |    2 
 include/sound/pcm.h                              |    1 
 kernel/cgroup/cgroup-internal.h                  |   19 ++++
 kernel/cgroup/cgroup-v1.c                        |   32 ++++---
 kernel/cgroup/cgroup.c                           |   84 +++++++++++++------
 kernel/rcu/tree_plugin.h                         |    9 +-
 net/ipv6/ip6_output.c                            |    4 
 net/llc/af_llc.c                                 |   49 +++++++----
 net/mac80211/cfg.c                               |    3 
 net/netfilter/nf_tables_core.c                   |    2 
 sound/core/oss/pcm_oss.c                         |   12 +-
 sound/core/oss/pcm_plugin.c                      |    5 -
 sound/core/pcm.c                                 |    2 
 sound/core/pcm_lib.c                             |    4 
 sound/core/pcm_memory.c                          |   11 +-
 sound/core/pcm_native.c                          |   97 ++++++++++++++---------
 sound/pci/ac97/ac97_codec.c                      |    4 
 sound/pci/cmipci.c                               |    3 
 sound/pci/hda/patch_realtek.c                    |    4 
 sound/soc/sti/uniperif_player.c                  |    6 -
 sound/soc/sti/uniperif_reader.c                  |    2 
 sound/usb/mixer_maps.c                           |   10 ++
 sound/usb/mixer_quirks.c                         |    7 -
 37 files changed, 421 insertions(+), 148 deletions(-)

Arnd Bergmann (1):
nds32: fix access_ok() checks in get/put_user

Brian Norris (1):

      Revert "ath: add support for special 0x0 regulatory domain"

Bryan O'Donoghue (1):

      wcn36xx: Differentiate wcn3660 from wcn3620

Chen Li (1):
exfat: avoid incorrectly releasing for root inode

Eric Dumazet (2):
llc: fix netdevice reference leaks in llc_ui_bind()
llc: only change llc->dev when bind() succeeds

Giacomo Guiduzzi (1):
ALSA: pci: fix reading of swapped values from pcmreg in AC97 codec

Giovanni Cabiddu (1):
crypto: qat - disable registration of algorithms

Greg Kroah-Hartman (1):

      Linux 5.10.109

James Bottomley (1):
tpm: use try_get_ops() in tpm-space.c

Jason Zheng (1):
ALSA: hda/realtek: Add quirk for ASUS GA402

Jonathan Teh (1):
ALSA: cmipci: Restore aux vol on suspend/resume

Jordy Zomer (1):
nfc: st21nfca: Fix potential buffer overflows in EVT_TRANSACTION

Lars-Peter Clausen (1):
ALSA: usb-audio: Add mute TLV for playback volumes on RODE NT-USB

Linus Lüssing (1):
mac80211: fix potential double free on mesh join

Mark Cilissen (1):
ACPI / x86: Work around broken XSDT on Advantech DAC-BJ01 board

Maximilian Luz (1):
ACPI: battery: Add device HID and quirk for Microsoft Surface Go 3

Michal Koutný (1):
cgroup-v1: Correct privileges check in release_agent writes

Oliver Graute (1):
staging: fbtft: fb_st7789v: reset display before initialization

Pablo Neira Ayuso (1):
netfilter: nf_tables: initialize registers in nft_do_chain()

Paul E. McKenney (1):
rcu: Don't deboost before reporting expedited quiescent state

Reza Jahanbakhshi (1):
ALSA: usb-audio: add mapping for new Corsair Virtuoso SE

Stephane Graber (1):
drivers: net: xgene: Fix regression in CRC stripping

Tadeusz Struk (2):
net: ipv6: fix skb_over_panic in __ip6_append_data
tpm: Fix error handling in async work

Takashi Iwai (7):
ASoC: sti: Fix deadlock via snd_pcm_stop_xrun() call
ALSA: oss: Fix PCM OSS buffer allocation overflow
ALSA: pcm: Fix races among concurrent hw_params and hw_free calls
ALSA: pcm: Fix races among concurrent read/write and buffer changes
ALSA: pcm: Fix races among concurrent prepare and hw_params/hw_free calls
ALSA: pcm: Fix races among concurrent prealloc proc writes
ALSA: pcm: Add stream lock during PCM reset ioctl operations

Tejun Heo (2):
cgroup: Allocate cgroup_file_ctx for kernfs_open_file->priv
cgroup: Use open-time cgroup namespace for process migration perm checks

Tim Crawford (2):
ALSA: hda/realtek: Add quirk for Clevo NP70PNJ
ALSA: hda/realtek: Add quirk for Clevo NP50PNJ

Werner Sembach (1):
ACPI: video: Force backlight native for Clevo NL5xRU and NL5xNU

huangwenhui (1):
ALSA: hda/realtek - Fix headset mic problem for a HP machine with alc671

author maintainer
#1 lore raw
Makefile +1 -1
index 08b3066fe6e5..3b462df1134b 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 5
 PATCHLEVEL = 10
-SUBLEVEL = 108
+SUBLEVEL = 109
 EXTRAVERSION =
 NAME = Dare mighty things
 
arch/nds32/include/asm/uaccess.h +17 -5
index 010ba5f1d7dd..54500e81efe5 100644
@@ -70,9 +70,7 @@ static inline void set_fs(mm_segment_t fs)
  * versions are void (ie, don't return a value as such).
  */
 
-#define get_user	__get_user					\
-
-#define __get_user(x, ptr)						\
+#define get_user(x, ptr)						\
 ({									\
 	long __gu_err = 0;						\
 	__get_user_check((x), (ptr), __gu_err);				\
@@ -85,6 +83,14 @@ static inline void set_fs(mm_segment_t fs)
 	(void)0;							\
 })
 
+#define __get_user(x, ptr)						\
+({									\
+	long __gu_err = 0;						\
+	const __typeof__(*(ptr)) __user *__p = (ptr);			\
+	__get_user_err((x), __p, (__gu_err));				\
+	__gu_err;							\
+})
+
 #define __get_user_check(x, ptr, err)					\
 ({									\
 	const __typeof__(*(ptr)) __user *__p = (ptr);			\
@@ -165,12 +171,18 @@ do {									\
 		: "r"(addr), "i"(-EFAULT)				\
 		: "cc")
 
-#define put_user	__put_user					\
+#define put_user(x, ptr)						\
+({									\
+	long __pu_err = 0;						\
+	__put_user_check((x), (ptr), __pu_err);				\
+	__pu_err;							\
+})
 
 #define __put_user(x, ptr)						\
 ({									\
 	long __pu_err = 0;						\
-	__put_user_err((x), (ptr), __pu_err);				\
+	__typeof__(*(ptr)) __user *__p = (ptr);				\
+	__put_user_err((x), __p, __pu_err);				\
 	__pu_err;							\
 })
 
arch/x86/kernel/acpi/boot.c +24 -0
index 14cd3186dc77..55562a9b7f92 100644
@@ -1340,6 +1340,17 @@ static int __init disable_acpi_pci(const struct dmi_system_id *d)
 	return 0;
 }
 
+static int __init disable_acpi_xsdt(const struct dmi_system_id *d)
+{
+	if (!acpi_force) {
+		pr_notice("%s detected: force use of acpi=rsdt\n", d->ident);
+		acpi_gbl_do_not_use_xsdt = TRUE;
+	} else {
+		pr_notice("Warning: DMI blacklist says broken, but acpi XSDT forced\n");
+	}
+	return 0;
+}
+
 static int __init dmi_disable_acpi(const struct dmi_system_id *d)
 {
 	if (!acpi_force) {
@@ -1464,6 +1475,19 @@ static const struct dmi_system_id acpi_dmi_table[] __initconst = {
 		     DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"),
 		     },
 	 },
+	/*
+	 * Boxes that need ACPI XSDT use disabled due to corrupted tables
+	 */
+	{
+	 .callback = disable_acpi_xsdt,
+	 .ident = "Advantech DAC-BJ01",
+	 .matches = {
+		     DMI_MATCH(DMI_SYS_VENDOR, "NEC"),
+		     DMI_MATCH(DMI_PRODUCT_NAME, "Bearlake CRB Board"),
+		     DMI_MATCH(DMI_BIOS_VERSION, "V1.12"),
+		     DMI_MATCH(DMI_BIOS_DATE, "02/01/2011"),
+		     },
+	 },
 	{}
 };
 
drivers/acpi/battery.c +12 -0
index 2376f57b3617..be743d177bcb 100644
@@ -66,6 +66,10 @@ MODULE_PARM_DESC(cache_time, "cache time in milliseconds");
 
 static const struct acpi_device_id battery_device_ids[] = {
 	{"PNP0C0A", 0},
+
+	/* Microsoft Surface Go 3 */
+	{"MSHW0146", 0},
+
 	{"", 0},
 };
 
@@ -1171,6 +1175,14 @@ static const struct dmi_system_id bat_dmi_table[] __initconst = {
 			DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad"),
 		},
 	},
+	{
+		/* Microsoft Surface Go 3 */
+		.callback = battery_notification_delay_quirk,
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "Surface Go 3"),
+		},
+	},
 	{},
 };
 
drivers/acpi/video_detect.c +75 -0

81 lines not on this page · raw message

drivers/char/tpm/tpm-dev-common.c +7 -1
index 1784530b8387..b99e1941c52c 100644
@@ -70,7 +70,13 @@ static void tpm_dev_async_work(struct work_struct *work)
 	ret = tpm_dev_transmit(priv->chip, priv->space, priv->data_buffer,
 			       sizeof(priv->data_buffer));
 	tpm_put_ops(priv->chip);
-	if (ret > 0) {
+
+	/*
+	 * If ret is > 0 then tpm_dev_transmit returned the size of the
+	 * response. If ret is < 0 then tpm_dev_transmit failed and
+	 * returned an error code.
+	 */
+	if (ret != 0) {
 		priv->response_length = ret;
 		mod_timer(&priv->user_read_timer, jiffies + (120 * HZ));
 	}
drivers/char/tpm/tpm2-space.c +4 -4
index 97e916856cf3..d2225020e4d2 100644
@@ -58,12 +58,12 @@ int tpm2_init_space(struct tpm_space *space, unsigned int buf_size)
 
 void tpm2_del_space(struct tpm_chip *chip, struct tpm_space *space)
 {
-	mutex_lock(&chip->tpm_mutex);
-	if (!tpm_chip_start(chip)) {
+
+	if (tpm_try_get_ops(chip) == 0) {
 		tpm2_flush_sessions(chip, space);
-		tpm_chip_stop(chip);
+		tpm_put_ops(chip);
 	}
-	mutex_unlock(&chip->tpm_mutex);
+
 	kfree(space->context_buf);
 	kfree(space->session_buf);
 }
drivers/crypto/qat/qat_common/qat_crypto.c +8 -0
index ab621b7dbd20..9210af8a1f58 100644
@@ -126,6 +126,14 @@ int qat_crypto_dev_config(struct adf_accel_dev *accel_dev)
 		goto err;
 	if (adf_cfg_section_add(accel_dev, "Accelerator0"))
 		goto err;
+
+	/* Temporarily set the number of crypto instances to zero to avoid
+	 * registering the crypto algorithms.
+	 * This will be removed when the algorithms will support the
+	 * CRYPTO_TFM_REQ_MAY_BACKLOG flag
+	 */
+	instances = 0;
+
 	for (i = 0; i < instances; i++) {
 		val = i;
 		snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_BANK_NUM, i);
drivers/net/ethernet/apm/xgene/xgene_enet_main.c +7 -5
index 5f1fc6582d74..78c7cbc372b0 100644
@@ -696,6 +696,12 @@ static int xgene_enet_rx_frame(struct xgene_enet_desc_ring *rx_ring,
 	buf_pool->rx_skb[skb_index] = NULL;
 
 	datalen = xgene_enet_get_data_len(le64_to_cpu(raw_desc->m1));
+
+	/* strip off CRC as HW isn't doing this */
+	nv = GET_VAL(NV, le64_to_cpu(raw_desc->m0));
+	if (!nv)
+		datalen -= 4;
+
 	skb_put(skb, datalen);
 	prefetch(skb->data - NET_IP_ALIGN);
 	skb->protocol = eth_type_trans(skb, ndev);
@@ -717,12 +723,8 @@ static int xgene_enet_rx_frame(struct xgene_enet_desc_ring *rx_ring,
 		}
 	}
 
-	nv = GET_VAL(NV, le64_to_cpu(raw_desc->m0));
-	if (!nv) {
-		/* strip off CRC as HW isn't doing this */
-		datalen -= 4;
+	if (!nv)
 		goto skip_jumbo;
-	}
 
 	slots = page_pool->slots - 1;
 	head = page_pool->head;
drivers/net/wireless/ath/regd.c +5 -5
index bee9110b91f3..20f4f8ea9f89 100644
@@ -666,14 +666,14 @@ ath_regd_init_wiphy(struct ath_regulatory *reg,
 
 /*
  * Some users have reported their EEPROM programmed with
- * 0x8000 or 0x0 set, this is not a supported regulatory
- * domain but since we have more than one user with it we
- * need a solution for them. We default to 0x64, which is
- * the default Atheros world regulatory domain.
+ * 0x8000 set, this is not a supported regulatory domain
+ * but since we have more than one user with it we need
+ * a solution for them. We default to 0x64, which is the
+ * default Atheros world regulatory domain.
  */
 static void ath_regd_sanitize(struct ath_regulatory *reg)
 {
-	if (reg->current_rd != COUNTRY_ERD_FLAG && reg->current_rd != 0)
+	if (reg->current_rd != COUNTRY_ERD_FLAG)
 		return;
 	printk(KERN_DEBUG "ath: EEPROM regdomain sanitized\n");
 	reg->current_rd = 0x64;
drivers/net/wireless/ath/wcn36xx/main.c +3 -0
index 9aaf6f747333..37e6e49de336 100644
@@ -1362,6 +1362,9 @@ static int wcn36xx_platform_get_resources(struct wcn36xx *wcn,
 	if (iris_node) {
 		if (of_device_is_compatible(iris_node, "qcom,wcn3620"))
 			wcn->rf_id = RF_IRIS_WCN3620;
+		if (of_device_is_compatible(iris_node, "qcom,wcn3660") ||
+		    of_device_is_compatible(iris_node, "qcom,wcn3660b"))
+			wcn->rf_id = RF_IRIS_WCN3660;
 		if (of_device_is_compatible(iris_node, "qcom,wcn3680"))
 			wcn->rf_id = RF_IRIS_WCN3680;
 		of_node_put(iris_node);
drivers/net/wireless/ath/wcn36xx/wcn36xx.h +1 -0
index 5c40d0bdee24..82be08265c06 100644
@@ -96,6 +96,7 @@ enum wcn36xx_ampdu_state {
 
 #define RF_UNKNOWN	0x0000
 #define RF_IRIS_WCN3620	0x3620
+#define RF_IRIS_WCN3660	0x3660
 #define RF_IRIS_WCN3680	0x3680
 
 static inline void buff_to_be(u32 *buf, size_t len)
drivers/nfc/st21nfca/se.c +10 -0
index c8bdf078d111..0841e0e370a0 100644
@@ -320,6 +320,11 @@ int st21nfca_connectivity_event_received(struct nfc_hci_dev *hdev, u8 host,
 			return -ENOMEM;
 
 		transaction->aid_len = skb->data[1];
+
+		/* Checking if the length of the AID is valid */
+		if (transaction->aid_len > sizeof(transaction->aid))
+			return -EINVAL;
+
 		memcpy(transaction->aid, &skb->data[2],
 		       transaction->aid_len);
 
@@ -329,6 +334,11 @@ int st21nfca_connectivity_event_received(struct nfc_hci_dev *hdev, u8 host,
 			return -EPROTO;
 
 		transaction->params_len = skb->data[transaction->aid_len + 3];
+
+		/* Total size is allocated (skb->len - 2) minus fixed array members */
+		if (transaction->params_len > ((skb->len - 2) - sizeof(struct nfc_evt_transaction)))
+			return -EINVAL;
+
 		memcpy(transaction->params, skb->data +
 		       transaction->aid_len + 4, transaction->params_len);
 
drivers/staging/fbtft/fb_st7789v.c +2 -0
index 3a280cc1892c..0a2dbed9ffc7 100644
@@ -82,6 +82,8 @@ enum st7789v_command {
  */
 static int init_display(struct fbtft_par *par)
 {
+	par->fbtftops.reset(par);
+
 	/* turn off sleep mode */
 	write_reg(par, MIPI_DCS_EXIT_SLEEP_MODE);
 	mdelay(120);
fs/exfat/super.c +1 -1
index cd04c912f02e..ba70ed1c9804 100644
@@ -690,7 +690,7 @@ static int exfat_fill_super(struct super_block *sb, struct fs_context *fc)
 	if (!sb->s_root) {
 		exfat_err(sb, "failed to get the root dentry");
 		err = -ENOMEM;
-		goto put_inode;
+		goto free_table;
 	}
 
 	return 0;
include/sound/pcm.h +1 -0
index 2336bf9243e1..ab966563e852 100644
@@ -398,6 +398,7 @@ struct snd_pcm_runtime {
 	wait_queue_head_t tsleep;	/* transfer sleep */
 	struct fasync_struct *fasync;
 	bool stop_operating;		/* sync_stop will be called */
+	struct mutex buffer_mutex;	/* protect for buffer changes */
 
 	/* -- private section -- */
 	void *private_data;
kernel/cgroup/cgroup-internal.h +19 -0
index bfbeabc17a9d..6e36e854b512 100644
@@ -65,6 +65,25 @@ static inline struct cgroup_fs_context *cgroup_fc2context(struct fs_context *fc)
 	return container_of(kfc, struct cgroup_fs_context, kfc);
 }
 
+struct cgroup_pidlist;
+
+struct cgroup_file_ctx {
+	struct cgroup_namespace	*ns;
+
+	struct {
+		void			*trigger;
+	} psi;
+
+	struct {
+		bool			started;
+		struct css_task_iter	iter;
+	} procs;
+
+	struct {
+		struct cgroup_pidlist	*pidlist;
+	} procs1;
+};
+
 /*
  * A cgroup can be associated with multiple css_sets as different tasks may
  * belong to different cgroups on different hierarchies.  In the other
kernel/cgroup/cgroup-v1.c +18 -14
index 69fba563c810..8f0ea12d7cee 100644
@@ -393,6 +393,7 @@ static void *cgroup_pidlist_start(struct seq_file *s, loff_t *pos)
 	 * next pid to display, if any
 	 */
 	struct kernfs_open_file *of = s->private;
+	struct cgroup_file_ctx *ctx = of->priv;
 	struct cgroup *cgrp = seq_css(s)->cgroup;
 	struct cgroup_pidlist *l;
 	enum cgroup_filetype type = seq_cft(s)->private;
@@ -402,25 +403,24 @@ static void *cgroup_pidlist_start(struct seq_file *s, loff_t *pos)
 	mutex_lock(&cgrp->pidlist_mutex);
 
 	/*
-	 * !NULL @of->priv indicates that this isn't the first start()
-	 * after open.  If the matching pidlist is around, we can use that.
-	 * Look for it.  Note that @of->priv can't be used directly.  It
-	 * could already have been destroyed.
+	 * !NULL @ctx->procs1.pidlist indicates that this isn't the first
+	 * start() after open. If the matching pidlist is around, we can use
+	 * that. Look for it. Note that @ctx->procs1.pidlist can't be used
+	 * directly. It could already have been destroyed.
 	 */
-	if (of->priv)
-		of->priv = cgroup_pidlist_find(cgrp, type);
+	if (ctx->procs1.pidlist)
+		ctx->procs1.pidlist = cgroup_pidlist_find(cgrp, type);
 
 	/*
 	 * Either this is the first start() after open or the matching
 	 * pidlist has been destroyed inbetween.  Create a new one.
 	 */
-	if (!of->priv) {
-		ret = pidlist_array_load(cgrp, type,
-					 (struct cgroup_pidlist **)&of->priv);
+	if (!ctx->procs1.pidlist) {
+		ret = pidlist_array_load(cgrp, type, &ctx->procs1.pidlist);
 		if (ret)
 			return ERR_PTR(ret);
 	}
-	l = of->priv;
+	l = ctx->procs1.pidlist;
 
 	if (pid) {
 		int end = l->length;
@@ -448,7 +448,8 @@ static void *cgroup_pidlist_start(struct seq_file *s, loff_t *pos)
 static void cgroup_pidlist_stop(struct seq_file *s, void *v)
 {
 	struct kernfs_open_file *of = s->private;
-	struct cgroup_pidlist *l = of->priv;
+	struct cgroup_file_ctx *ctx = of->priv;
+	struct cgroup_pidlist *l = ctx->procs1.pidlist;
 
 	if (l)
 		mod_delayed_work(cgroup_pidlist_destroy_wq, &l->destroy_dwork,
@@ -459,7 +460,8 @@ static void cgroup_pidlist_stop(struct seq_file *s, void *v)
 static void *cgroup_pidlist_next(struct seq_file *s, void *v, loff_t *pos)
 {
 	struct kernfs_open_file *of = s->private;
-	struct cgroup_pidlist *l = of->priv;
+	struct cgroup_file_ctx *ctx = of->priv;
+	struct cgroup_pidlist *l = ctx->procs1.pidlist;
 	pid_t *p = v;
 	pid_t *end = l->list + l->length;
 	/*
@@ -542,6 +544,7 @@ static ssize_t cgroup_release_agent_write(struct kernfs_open_file *of,
 					  char *buf, size_t nbytes, loff_t off)
 {
 	struct cgroup *cgrp;
+	struct cgroup_file_ctx *ctx;
 
 	BUILD_BUG_ON(sizeof(cgrp->root->release_agent_path) < PATH_MAX);
 
@@ -549,8 +552,9 @@ static ssize_t cgroup_release_agent_write(struct kernfs_open_file *of,
 	 * Release agent gets called with all capabilities,
 	 * require capabilities to set release agent.
 	 */
-	if ((of->file->f_cred->user_ns != &init_user_ns) ||
-	    !capable(CAP_SYS_ADMIN))
+	ctx = of->priv;
+	if ((ctx->ns->user_ns != &init_user_ns) ||
+	    !file_ns_capable(of->file, &init_user_ns, CAP_SYS_ADMIN))
 		return -EPERM;
 
 	cgrp = cgroup_kn_lock_live(of->kn, false);
kernel/cgroup/cgroup.c +55 -29

213 lines not on this page · raw message

kernel/rcu/tree_plugin.h +5 -4
index 658427c33b93..f5ba0740f9b5 100644
@@ -531,16 +531,17 @@ rcu_preempt_deferred_qs_irqrestore(struct task_struct *t, unsigned long flags)
 			raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
 		}
 
-		/* Unboost if we were boosted. */
-		if (IS_ENABLED(CONFIG_RCU_BOOST) && drop_boost_mutex)
-			rt_mutex_futex_unlock(&rnp->boost_mtx);
-
 		/*
 		 * If this was the last task on the expedited lists,
 		 * then we need to report up the rcu_node hierarchy.
 		 */
 		if (!empty_exp && empty_exp_now)
 			rcu_report_exp_rnp(rnp, true);
+
+		/* Unboost if we were boosted. */
+		if (IS_ENABLED(CONFIG_RCU_BOOST) && drop_boost_mutex)
+			rt_mutex_futex_unlock(&rnp->boost_mtx);
+
 	} else {
 		local_irq_restore(flags);
 	}
net/ipv6/ip6_output.c +2 -2
index d6f2126f4618..2aa39ce7093d 100644
@@ -1500,8 +1500,8 @@ static int __ip6_append_data(struct sock *sk,
 		      sizeof(struct frag_hdr) : 0) +
 		     rt->rt6i_nfheader_len;
 
-	if (mtu < fragheaderlen ||
-	    ((mtu - fragheaderlen) & ~7) + fragheaderlen < sizeof(struct frag_hdr))
+	if (mtu <= fragheaderlen ||
+	    ((mtu - fragheaderlen) & ~7) + fragheaderlen <= sizeof(struct frag_hdr))
 		goto emsgsize;
 
 	maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen -
net/llc/af_llc.c +32 -17

107 lines not on this page · raw message

net/mac80211/cfg.c +0 -3
index d46ed4cbe771..8010967a6874 100644
@@ -2076,14 +2076,12 @@ static int copy_mesh_setup(struct ieee80211_if_mesh *ifmsh,
 		const struct mesh_setup *setup)
 {
 	u8 *new_ie;
-	const u8 *old_ie;
 	struct ieee80211_sub_if_data *sdata = container_of(ifmsh,
 					struct ieee80211_sub_if_data, u.mesh);
 	int i;
 
 	/* allocate information elements */
 	new_ie = NULL;
-	old_ie = ifmsh->ie;
 
 	if (setup->ie_len) {
 		new_ie = kmemdup(setup->ie, setup->ie_len,
@@ -2093,7 +2091,6 @@ static int copy_mesh_setup(struct ieee80211_if_mesh *ifmsh,
 	}
 	ifmsh->ie_len = setup->ie_len;
 	ifmsh->ie = new_ie;
-	kfree(old_ie);
 
 	/* now copy the rest of the setup parameters */
 	ifmsh->mesh_id_len = setup->mesh_id_len;
net/netfilter/nf_tables_core.c +1 -1
index dbc2e945c98e..a61b5bf5aa0f 100644
@@ -162,7 +162,7 @@ nft_do_chain(struct nft_pktinfo *pkt, void *priv)
 	struct nft_rule *const *rules;
 	const struct nft_rule *rule;
 	const struct nft_expr *expr, *last;
-	struct nft_regs regs;
+	struct nft_regs regs = {};
 	unsigned int stackptr = 0;
 	struct nft_jumpstack jumpstack[NFT_JUMP_STACK_SIZE];
 	bool genbit = READ_ONCE(net->nft.gencursor);
sound/core/oss/pcm_oss.c +8 -4
index d79febeebf0c..f88de74da1eb 100644
@@ -774,6 +774,11 @@ static int snd_pcm_oss_period_size(struct snd_pcm_substream *substream,
 
 	if (oss_period_size < 16)
 		return -EINVAL;
+
+	/* don't allocate too large period; 1MB period must be enough */
+	if (oss_period_size > 1024 * 1024)
+		return -ENOMEM;
+
 	runtime->oss.period_bytes = oss_period_size;
 	runtime->oss.period_frames = 1;
 	runtime->oss.periods = oss_periods;
@@ -1042,10 +1047,9 @@ static int snd_pcm_oss_change_params_locked(struct snd_pcm_substream *substream)
 			goto failure;
 	}
 #endif
-	oss_period_size *= oss_frame_size;
-
-	oss_buffer_size = oss_period_size * runtime->oss.periods;
-	if (oss_buffer_size < 0) {
+	oss_period_size = array_size(oss_period_size, oss_frame_size);
+	oss_buffer_size = array_size(oss_period_size, runtime->oss.periods);
+	if (oss_buffer_size <= 0) {
 		err = -EINVAL;
 		goto failure;
 	}
sound/core/oss/pcm_plugin.c +4 -1
index d5ca161d588c..1e2d1b35c194 100644
@@ -61,7 +61,10 @@ static int snd_pcm_plugin_alloc(struct snd_pcm_plugin *plugin, snd_pcm_uframes_t
 	}
 	if ((width = snd_pcm_format_physical_width(format->format)) < 0)
 		return width;
-	size = frames * format->channels * width;
+	size = array3_size(frames, format->channels, width);
+	/* check for too large period size once again */
+	if (size > 1024 * 1024)
+		return -ENOMEM;
 	if (snd_BUG_ON(size % 8))
 		return -ENXIO;
 	size /= 8;
sound/core/pcm.c +2 -0
index a8ae5928decd..8e5c6b227e52 100644
@@ -969,6 +969,7 @@ int snd_pcm_attach_substream(struct snd_pcm *pcm, int stream,
 	init_waitqueue_head(&runtime->tsleep);
 
 	runtime->status->state = SNDRV_PCM_STATE_OPEN;
+	mutex_init(&runtime->buffer_mutex);
 
 	substream->runtime = runtime;
 	substream->private_data = pcm->private_data;
@@ -1002,6 +1003,7 @@ void snd_pcm_detach_substream(struct snd_pcm_substream *substream)
 	} else {
 		substream->runtime = NULL;
 	}
+	mutex_destroy(&runtime->buffer_mutex);
 	kfree(runtime);
 	put_pid(substream->pid);
 	substream->pid = NULL;
sound/core/pcm_lib.c +4 -0
index 5e04c4b9e023..45afef73275f 100644
@@ -1871,9 +1871,11 @@ static int wait_for_avail(struct snd_pcm_substream *substream,
 		if (avail >= runtime->twake)
 			break;
 		snd_pcm_stream_unlock_irq(substream);
+		mutex_unlock(&runtime->buffer_mutex);
 
 		tout = schedule_timeout(wait_time);
 
+		mutex_lock(&runtime->buffer_mutex);
 		snd_pcm_stream_lock_irq(substream);
 		set_current_state(TASK_INTERRUPTIBLE);
 		switch (runtime->status->state) {
@@ -2167,6 +2169,7 @@ snd_pcm_sframes_t __snd_pcm_lib_xfer(struct snd_pcm_substream *substream,
 
 	nonblock = !!(substream->f_flags & O_NONBLOCK);
 
+	mutex_lock(&runtime->buffer_mutex);
 	snd_pcm_stream_lock_irq(substream);
 	err = pcm_accessible_state(runtime);
 	if (err < 0)
@@ -2254,6 +2257,7 @@ snd_pcm_sframes_t __snd_pcm_lib_xfer(struct snd_pcm_substream *substream,
 	if (xfer > 0 && err >= 0)
 		snd_pcm_update_state(substream, runtime);
 	snd_pcm_stream_unlock_irq(substream);
+	mutex_unlock(&runtime->buffer_mutex);
 	return xfer > 0 ? (snd_pcm_sframes_t)xfer : err;
 }
 EXPORT_SYMBOL(__snd_pcm_lib_xfer);
sound/core/pcm_memory.c +7 -4
index 4f03ba8ed0ae..a9a0d74f3165 100644
@@ -164,19 +164,20 @@ static void snd_pcm_lib_preallocate_proc_write(struct snd_info_entry *entry,
 	size_t size;
 	struct snd_dma_buffer new_dmab;
 
+	mutex_lock(&substream->pcm->open_mutex);
 	if (substream->runtime) {
 		buffer->error = -EBUSY;
-		return;
+		goto unlock;
 	}
 	if (!snd_info_get_line(buffer, line, sizeof(line))) {
 		snd_info_get_str(str, line, sizeof(str));
 		size = simple_strtoul(str, NULL, 10) * 1024;
 		if ((size != 0 && size < 8192) || size > substream->dma_max) {
 			buffer->error = -EINVAL;
-			return;
+			goto unlock;
 		}
 		if (substream->dma_buffer.bytes == size)
-			return;
+			goto unlock;
 		memset(&new_dmab, 0, sizeof(new_dmab));
 		new_dmab.dev = substream->dma_buffer.dev;
 		if (size > 0) {
@@ -185,7 +186,7 @@ static void snd_pcm_lib_preallocate_proc_write(struct snd_info_entry *entry,
 					   substream->dma_buffer.dev.dev,
 					   size, &new_dmab) < 0) {
 				buffer->error = -ENOMEM;
-				return;
+				goto unlock;
 			}
 			substream->buffer_bytes_max = size;
 		} else {
@@ -197,6 +198,8 @@ static void snd_pcm_lib_preallocate_proc_write(struct snd_info_entry *entry,
 	} else {
 		buffer->error = -EINVAL;
 	}
+ unlock:
+	mutex_unlock(&substream->pcm->open_mutex);
 }
 
 static inline void preallocate_info_init(struct snd_pcm_substream *substream)
sound/core/pcm_native.c +61 -36

200 lines not on this page · raw message

sound/pci/ac97/ac97_codec.c +2 -2
index 012a7ee849e8..963731cf0d8c 100644
@@ -938,8 +938,8 @@ static int snd_ac97_ad18xx_pcm_get_volume(struct snd_kcontrol *kcontrol, struct
 	int codec = kcontrol->private_value & 3;
 	
 	mutex_lock(&ac97->page_mutex);
-	ucontrol->value.integer.value[0] = 31 - ((ac97->spec.ad18xx.pcmreg[codec] >> 0) & 31);
-	ucontrol->value.integer.value[1] = 31 - ((ac97->spec.ad18xx.pcmreg[codec] >> 8) & 31);
+	ucontrol->value.integer.value[0] = 31 - ((ac97->spec.ad18xx.pcmreg[codec] >> 8) & 31);
+	ucontrol->value.integer.value[1] = 31 - ((ac97->spec.ad18xx.pcmreg[codec] >> 0) & 31);
 	mutex_unlock(&ac97->page_mutex);
 	return 0;
 }
sound/pci/cmipci.c +1 -2
index 7363d61eaec2..120dd8b33ac8 100644
@@ -302,7 +302,6 @@ MODULE_PARM_DESC(joystick_port, "Joystick port address.");
 #define CM_MICGAINZ		0x01	/* mic boost */
 #define CM_MICGAINZ_SHIFT	0
 
-#define CM_REG_MIXER3		0x24
 #define CM_REG_AUX_VOL		0x26
 #define CM_VAUXL_MASK		0xf0
 #define CM_VAUXR_MASK		0x0f
@@ -3291,7 +3290,7 @@ static void snd_cmipci_remove(struct pci_dev *pci)
  */
 static const unsigned char saved_regs[] = {
 	CM_REG_FUNCTRL1, CM_REG_CHFORMAT, CM_REG_LEGACY_CTRL, CM_REG_MISC_CTRL,
-	CM_REG_MIXER0, CM_REG_MIXER1, CM_REG_MIXER2, CM_REG_MIXER3, CM_REG_PLL,
+	CM_REG_MIXER0, CM_REG_MIXER1, CM_REG_MIXER2, CM_REG_AUX_VOL, CM_REG_PLL,
 	CM_REG_CH0_FRAME1, CM_REG_CH0_FRAME2,
 	CM_REG_CH1_FRAME1, CM_REG_CH1_FRAME2, CM_REG_EXT_MISC,
 	CM_REG_INT_STATUS, CM_REG_INT_HLDCLR, CM_REG_FUNCTRL0,
sound/pci/hda/patch_realtek.c +4 -0
index ed0cfcb05ef0..3bd37c02ce0e 100644
@@ -8801,6 +8801,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x1043, 0x1e51, "ASUS Zephyrus M15", ALC294_FIXUP_ASUS_GU502_PINS),
 	SND_PCI_QUIRK(0x1043, 0x1e8e, "ASUS Zephyrus G15", ALC289_FIXUP_ASUS_GA401),
 	SND_PCI_QUIRK(0x1043, 0x1f11, "ASUS Zephyrus G14", ALC289_FIXUP_ASUS_GA401),
+	SND_PCI_QUIRK(0x1043, 0x1d42, "ASUS Zephyrus G14 2022", ALC289_FIXUP_ASUS_GA401),
 	SND_PCI_QUIRK(0x1043, 0x16b2, "ASUS GU603", ALC289_FIXUP_ASUS_GA401),
 	SND_PCI_QUIRK(0x1043, 0x3030, "ASUS ZN270IE", ALC256_FIXUP_ASUS_AIO_GPIO2),
 	SND_PCI_QUIRK(0x1043, 0x831a, "ASUS P901", ALC269_FIXUP_STEREO_DMIC),
@@ -8884,6 +8885,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x1558, 0x8561, "System76 Gazelle (gaze14)", ALC269_FIXUP_HEADSET_MIC),
 	SND_PCI_QUIRK(0x1558, 0x8562, "Clevo NH[5|7][0-9]RZ[Q]", ALC269_FIXUP_DMIC),
 	SND_PCI_QUIRK(0x1558, 0x8668, "Clevo NP50B[BE]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
+	SND_PCI_QUIRK(0x1558, 0x866d, "Clevo NP5[05]PN[HJK]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
+	SND_PCI_QUIRK(0x1558, 0x867d, "Clevo NP7[01]PN[HJK]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
 	SND_PCI_QUIRK(0x1558, 0x8680, "Clevo NJ50LU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
 	SND_PCI_QUIRK(0x1558, 0x8686, "Clevo NH50[CZ]U", ALC256_FIXUP_MIC_NO_PRESENCE_AND_RESUME),
 	SND_PCI_QUIRK(0x1558, 0x8a20, "Clevo NH55DCQ-Y", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
@@ -10839,6 +10842,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x1028, 0x069f, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
 	SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
 	SND_PCI_QUIRK(0x103c, 0x873e, "HP", ALC671_FIXUP_HP_HEADSET_MIC2),
+	SND_PCI_QUIRK(0x103c, 0x885f, "HP 288 Pro G8", ALC671_FIXUP_HP_HEADSET_MIC2),
 	SND_PCI_QUIRK(0x1043, 0x1080, "Asus UX501VW", ALC668_FIXUP_HEADSET_MODE),
 	SND_PCI_QUIRK(0x1043, 0x11cd, "Asus N550", ALC662_FIXUP_ASUS_Nx50),
 	SND_PCI_QUIRK(0x1043, 0x129d, "Asus N750", ALC662_FIXUP_ASUS_Nx50),
sound/soc/sti/uniperif_player.c +3 -3
index 2ed92c990b97..dd9013c47664 100644
@@ -91,7 +91,7 @@ static irqreturn_t uni_player_irq_handler(int irq, void *dev_id)
 			SET_UNIPERIF_ITM_BCLR_FIFO_ERROR(player);
 
 			/* Stop the player */
-			snd_pcm_stop_xrun(player->substream);
+			snd_pcm_stop(player->substream, SNDRV_PCM_STATE_XRUN);
 		}
 
 		ret = IRQ_HANDLED;
@@ -105,7 +105,7 @@ static irqreturn_t uni_player_irq_handler(int irq, void *dev_id)
 		SET_UNIPERIF_ITM_BCLR_DMA_ERROR(player);
 
 		/* Stop the player */
-		snd_pcm_stop_xrun(player->substream);
+		snd_pcm_stop(player->substream, SNDRV_PCM_STATE_XRUN);
 
 		ret = IRQ_HANDLED;
 	}
@@ -138,7 +138,7 @@ static irqreturn_t uni_player_irq_handler(int irq, void *dev_id)
 		dev_err(player->dev, "Underflow recovery failed\n");
 
 		/* Stop the player */
-		snd_pcm_stop_xrun(player->substream);
+		snd_pcm_stop(player->substream, SNDRV_PCM_STATE_XRUN);
 
 		ret = IRQ_HANDLED;
 	}
sound/soc/sti/uniperif_reader.c +1 -1
index 136059331211..065c5f0d1f5f 100644
@@ -65,7 +65,7 @@ static irqreturn_t uni_reader_irq_handler(int irq, void *dev_id)
 	if (unlikely(status & UNIPERIF_ITS_FIFO_ERROR_MASK(reader))) {
 		dev_err(reader->dev, "FIFO error detected\n");
 
-		snd_pcm_stop_xrun(reader->substream);
+		snd_pcm_stop(reader->substream, SNDRV_PCM_STATE_XRUN);
 
 		ret = IRQ_HANDLED;
 	}
sound/usb/mixer_maps.c +10 -0
index 8f6823df944f..81ace832d7e4 100644
@@ -542,6 +542,16 @@ static const struct usbmix_ctl_map usbmix_ctl_maps[] = {
 		.id = USB_ID(0x25c4, 0x0003),
 		.map = scms_usb3318_map,
 	},
+	{
+		/* Corsair Virtuoso SE Latest (wired mode) */
+		.id = USB_ID(0x1b1c, 0x0a3f),
+		.map = corsair_virtuoso_map,
+	},
+	{
+		/* Corsair Virtuoso SE Latest (wireless mode) */
+		.id = USB_ID(0x1b1c, 0x0a40),
+		.map = corsair_virtuoso_map,
+	},
 	{
 		.id = USB_ID(0x30be, 0x0101), /*  Schiit Hel */
 		.ignore_ctl_error = 1,
sound/usb/mixer_quirks.c +4 -3
index 86fdd669f3fd..99f2203bf51f 100644
@@ -3135,9 +3135,10 @@ void snd_usb_mixer_fu_apply_quirk(struct usb_mixer_interface *mixer,
 		if (unitid == 7 && cval->control == UAC_FU_VOLUME)
 			snd_dragonfly_quirk_db_scale(mixer, cval, kctl);
 		break;
-	/* lowest playback value is muted on C-Media devices */
-	case USB_ID(0x0d8c, 0x000c):
-	case USB_ID(0x0d8c, 0x0014):
+	/* lowest playback value is muted on some devices */
+	case USB_ID(0x0d8c, 0x000c): /* C-Media */
+	case USB_ID(0x0d8c, 0x0014): /* C-Media */
+	case USB_ID(0x19f7, 0x0003): /* RODE NT-USB */
 		if (strstr(kctl->id.name, "Playback"))
 			cval->min_mute = 1;
 		break;
Tested-by Pavel Machek (CIP) Tested-by Fox Chen Tested-by Florian Fainelli Tested-by Shuah Khan Tested-by Bagas Sanjaya Tested-by Salvatore Bonaccorso Tested-by Linux Kernel Functional Testing Tested-by Sudip Mukherjee Tested-by Guenter Roeck
#2 lore raw

Stable release process proposal (Was: Linux 5.10.109)

In reply to Greg Kroah-Hartman

Dear Greg,

First of all, thank you very much for keeping stable maintenance so well.

We (Linux Verification Center of ISPRAS (linuxtesting.org)) are going to join a team of regular testers for releases in 5.10 stable branch (and other branches later). We are deploying some test automation for that and have met an oddity that would to discuss.

Sometimes, like in 5.10.109 release, we have a situation when a released version (5.10.109) differs from the release candidate (5.10.109-rс1). In this case there was a patch "llc: only change llc->dev when bind()succeeds" added to fix a bug in another llc fix. Unfortunately, as Pavel noted, this patch does not fix a bug, but introduces a new one, because another commit b37a46683739 ("netdevice:
add the case if dev is NULL") was missed in 5.10 branch.

The problem will be fixed in 5.10.110, but we still have a couple oddities:
- we have a release that should not be recommended for use
- we have a commit message misleading users when says:

but actually nobody tested that version.

There are potential modifications in stable release process that can prevent such problems:

(1) to always release rс2 when there are changes in rc1 introduced

(2) to avoid Tested-by: section from release commits in such situations.

Or may be it is overkill and it too complicates maintenance work to be worth. What do you think?

Best regards,
Alexey Khoroshilov

author maintainer
#3 lore raw

Re: Stable release process proposal (Was: Linux 5.10.109)

Quoted 9 lines · Alexey Khoroshilov

Dear Greg,

First of all, thank you very much for keeping stable maintenance so well.

We (Linux Verification Center of ISPRAS (linuxtesting.org)) are going to join a team of regular testers for releases in 5.10 stable branch (and other branches later). We are deploying some test automation for that and have met an oddity that would to discuss.

Quoted 7 lines

Sometimes, like in 5.10.109 release, we have a situation when a released version (5.10.109) differs from the release candidate (5.10.109-rс1). In this case there was a patch "llc: only change llc->dev when bind()succeeds" added to fix a bug in another llc fix. Unfortunately, as Pavel noted, this patch does not fix a bug, but introduces a new one, because another commit b37a46683739 ("netdevice:
add the case if dev is NULL") was missed in 5.10 branch.

This happens quite frequently due to issues found in testing. It's not a new thing.

Quoted 19 lines

The problem will be fixed in 5.10.110, but we still have a couple oddities:
- we have a release that should not be recommended for use
- we have a commit message misleading users when says:

but actually nobody tested that version.

There are potential modifications in stable release process that can prevent such problems:

Quoted 6 lines

(1) to always release rс2 when there are changes in rc1 introduced

(2) to avoid Tested-by: section from release commits in such situations.

Or may be it is overkill and it too complicates maintenance work to be worth. What do you think?

I think it's not worth the extra work on my side for this given the already large workload. What would benifit from this to justify it?

thanks,

greg k-h

#4 lore raw

Re: Stable release process proposal (Was: Linux 5.10.109)

Quoted 39 lines · Greg Kroah-Hartman
Quoted 9 lines · Alexey Khoroshilov

Dear Greg,

First of all, thank you very much for keeping stable maintenance so well.

We (Linux Verification Center of ISPRAS (linuxtesting.org)) are going to join a team of regular testers for releases in 5.10 stable branch (and other branches later). We are deploying some test automation for that and have met an oddity that would to discuss.

Quoted 7 lines

Sometimes, like in 5.10.109 release, we have a situation when a released version (5.10.109) differs from the release candidate (5.10.109-rс1). In this case there was a patch "llc: only change llc->dev when bind()succeeds" added to fix a bug in another llc fix. Unfortunately, as Pavel noted, this patch does not fix a bug, but introduces a new one, because another commit b37a46683739 ("netdevice:
add the case if dev is NULL") was missed in 5.10 branch.

This happens quite frequently due to issues found in testing. It's not a new thing.

Quoted 19 lines

The problem will be fixed in 5.10.110, but we still have a couple oddities:
- we have a release that should not be recommended for use
- we have a commit message misleading users when says:

but actually nobody tested that version.

There are potential modifications in stable release process that can prevent such problems:

Quoted 8 lines
Quoted 6 lines

(1) to always release rс2 when there are changes in rc1 introduced

(2) to avoid Tested-by: section from release commits in such situations.

Or may be it is overkill and it too complicates maintenance work to be worth. What do you think?

I think it's not worth the extra work on my side for this given the already large workload. What would benifit from this to justify it?

I see, thank you.

I believed the goal is to provide some minimal quality guarantees for a particular version of the code. But if the process of updates is quite intensive, it may make sense to transfer responsibility for particular release verification downstream.

Best regards,
Alexey

author maintainer
#5 lore raw

Re: Stable release process proposal (Was: Linux 5.10.109)

Quoted 44 lines · Alexey Khoroshilov
Quoted 43 lines · Greg Kroah-Hartman
Quoted 9 lines · Alexey Khoroshilov

Dear Greg,

First of all, thank you very much for keeping stable maintenance so well.

We (Linux Verification Center of ISPRAS (linuxtesting.org)) are going to join a team of regular testers for releases in 5.10 stable branch (and other branches later). We are deploying some test automation for that and have met an oddity that would to discuss.

Quoted 7 lines

Sometimes, like in 5.10.109 release, we have a situation when a released version (5.10.109) differs from the release candidate (5.10.109-rс1). In this case there was a patch "llc: only change llc->dev when bind()succeeds" added to fix a bug in another llc fix. Unfortunately, as Pavel noted, this patch does not fix a bug, but introduces a new one, because another commit b37a46683739 ("netdevice:
add the case if dev is NULL") was missed in 5.10 branch.

This happens quite frequently due to issues found in testing. It's not a new thing.

Quoted 23 lines

The problem will be fixed in 5.10.110, but we still have a couple oddities:
- we have a release that should not be recommended for use
- we have a commit message misleading users when says:

but actually nobody tested that version.

There are potential modifications in stable release process that can prevent such problems:

(1) to always release rс2 when there are changes in rc1 introduced

(2) to avoid Tested-by: section from release commits in such situations.

Quoted 8 lines
Quoted 4 lines
Quoted 2 lines

Or may be it is overkill and it too complicates maintenance work to be worth. What do you think?

I think it's not worth the extra work on my side for this given the already large workload. What would benifit from this to justify it?

I see, thank you.

I believed the goal is to provide some minimal quality guarantees for a particular version of the code.

I do not understand what you mean by this. Can you please explain?

Quoted 3 lines

But if the process of updates is quite
intensive, it may make sense to transfer responsibility for particular release verification downstream.

There is no need to transfer anything as per the license of the kernel, right?

I do not understand what you are trying to do here. Can you provide details please?

thanks,

greg k-h

#6 lore raw

Re: Stable release process proposal (Was: Linux 5.10.109)

In reply to Alexey Khoroshilov
Quoted 14 lines · Alexey Khoroshilov

The problem will be fixed in 5.10.110, but we still have a couple oddities:
- we have a release that should not be recommended for use
- we have a commit message misleading users when says:

Quoted 1 line

but actually nobody tested that version.

I think you missed the point of having Tested-by in stable releases here. The tag is used to indicate that the entity (individuals, organizations, or bots) had successfully tested the release candidate (stable-rc). The degree of testing can vary. For example, I only did cross-compile test [1], then I offered Tested-by in my name.

[1]: https://lore.kernel.org/stable/[email protected]/

On the other hand, Naresh Kamboju (LKFT) did full testing as indicated on [2].

[2]: https://lore.kernel.org/stable/CA+G9fYu9CjYCQwM3EO5eguRC0rq00HMuE7cEAG4E68shzw4OHA@mail.gmail.com/

Regardless of how testing is done by entities involved, the point of having Tested-by is to give kernel users confidence to upgrade to more recent release, as almost all sufferings of testing is represented by Tested-by entities.

Signature · 1 line
An old man doll... just what I always wanted! - Clara