Linux 5.10.109
Greg Kroah-Hartman
maintainerI'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
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 0x3680static inline void buff_to_be (u32 *buf,size_t len)
drivers/nfc/st21nfca/se.c +10 -0
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -938,8 +938,8 @@ static int snd_ac97_ad18xx_pcm_get_volume(struct snd_kcontrol *kcontrol, structint 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 ;
Alexey Khoroshilov
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 RoeckStable release process proposal (Was: Linux 5.10.109)
In reply to Greg Kroah-HartmanDear 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
Greg Kroah-Hartman
maintainerRe: 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->devwhen 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 commitb37a46683739("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:Tested-by Pavel Machek (CIP) <[email protected]>Tested-by Fox Chen <[email protected]>Tested-by Florian Fainelli <[email protected]>Tested-by Shuah Khan <[email protected]>Tested-by Bagas Sanjaya <[email protected]>Tested-by Salvatore Bonaccorso <[email protected]>Tested-by Sudip Mukherjee <[email protected]>Tested-by Guenter Roeck <[email protected]>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
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->devwhen 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 commitb37a46683739("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:Tested-by Pavel Machek (CIP) <[email protected]>Tested-by Fox Chen <[email protected]>Tested-by Florian Fainelli <[email protected]>Tested-by Shuah Khan <[email protected]>Tested-by Bagas Sanjaya <[email protected]>Tested-by Salvatore Bonaccorso <[email protected]>Tested-by Sudip Mukherjee <[email protected]>Tested-by Guenter Roeck <[email protected]>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
Greg Kroah-Hartman
maintainerRe: 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->devwhen 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 commitb37a46683739("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:Tested-by Pavel Machek (CIP) <[email protected]>Tested-by Fox Chen <[email protected]>Tested-by Florian Fainelli <[email protected]>Tested-by Shuah Khan <[email protected]>Tested-by Bagas Sanjaya <[email protected]>Tested-by Salvatore Bonaccorso <[email protected]>Tested-by Sudip Mukherjee <[email protected]>Tested-by Guenter Roeck <[email protected]>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
Re: Stable release process proposal (Was: Linux 5.10.109)
In reply to Alexey KhoroshilovQuoted 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:Tested-by Pavel Machek (CIP) <[email protected]>Tested-by Fox Chen <[email protected]>Tested-by Florian Fainelli <[email protected]>Tested-by Shuah Khan <[email protected]>Tested-by Bagas Sanjaya <[email protected]>Tested-by Salvatore Bonaccorso <[email protected]>Tested-by Sudip Mukherjee <[email protected]>Tested-by Guenter Roeck <[email protected]>
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