Linux 5.10.74
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.74 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/m68k/kernel/signal.c | 88 ++++++++--------- drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c | 3 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 3 drivers/hid/hid-apple.c | 7 + drivers/hid/wacom_wac.c | 8 + drivers/hwmon/ltc2947-core.c | 8 + drivers/hwmon/pmbus/ibm-cffps.c | 10 + drivers/net/ethernet/sun/Kconfig | 1 drivers/scsi/ses.c | 2 drivers/scsi/virtio_scsi.c | 4 fs/ext4/inline.c | 15 -- fs/ext4/inode.c | 41 ++++---- fs/vboxsf/super.c | 12 -- include/linux/perf_event.h | 4 include/linux/sched.h | 2 include/net/pkt_sched.h | 1 kernel/events/core.c | 34 +++++- net/ipv6/netfilter/ip6_tables.c | 1 net/mac80211/mesh_pathtbl.c | 5 net/mac80211/rx.c | 3 net/netfilter/nf_nat_masquerade.c | 168 +++++++++++++++++++-------------- net/sched/sch_api.c | 6 + sound/soc/intel/boards/sof_sdw.c | 5 sound/soc/sof/core.c | 4 sound/soc/sof/loader.c | 2 26 files changed, 263 insertions(+), 176 deletions(-)
Al Viro (1):
m68k: Handle arrivals of multiple signals correctly
Brandon Wyman (1):
hwmon: (pmbus/ibm-cffps) max_power_out swap changes
Colin Ian King (1):
scsi: virtio_scsi: Fix spelling mistake "Unsupport" -> "Unsupported"
Florian Westphal (2):
netfilter: nf_nat_masquerade: make async masq_inet6_event handling generic
netfilter: nf_nat_masquerade: defer conntrack walk to work queue
Greg Kroah-Hartman (1):
Linux 5.10.74
Jeremy Sowden (1):
netfilter: ip6_tables: zero-initialize fragment offset
Jiapeng Chong (1):
scsi: ses: Fix unsigned comparison with less than zero
Joshua-Dickens (1):
HID: wacom: Add new Intuos BT (CTL-4100WL/CTL-6100WL) device IDs
Leslie Shi (1):
drm/amdgpu: fix gart.bo pin_count leak
Linus Torvalds (1):
vboxfs: fix broken legacy mount signature checking
Marc Herbert (1):
ASoC: SOF: loader: release_firmware() on load failure to avoid batching
MichelleJin (1):
mac80211: check return value of rhashtable_init
Mizuho Mori (1):
HID: apple: Fix logical maximum and usage maximum of Magic Keyboard JIS
Peter Zijlstra (1):
sched: Always inline is_percpu_thread()
Pierre-Louis Bossart (1):
ASoC: Intel: sof_sdw: tag SoundWire BEs as non-atomic
Randy Dunlap (1):
net: sun: SUNVNET_COMMON should depend on INET
Song Liu (1):
perf/core: fix userpage->time_enabled of inactive events
Uwe Kleine-König (1):
hwmon: (ltc2947) Properly handle errors when looking for the external clock
YueHaibing (1):
mac80211: Drop frames from invalid MAC address in ad-hoc mode
Zhang Yi (2):
ext4: check and update i_disksize properly
ext4: correct the error path of ext4_write_inline_data_end()
王贇 (1):
net: prevent user from passing illegal stab size
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 73 +SUBLEVEL = 74 EXTRAVERSION = NAME = Dare mighty things
arch/m68k/kernel/signal.c +42 -46
184 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c +2 -1
@@ -1018,6 +1018,8 @@ static int gmc_v10_0_hw_fini(void *handle) {struct amdgpu_device *adev = (struct amdgpu_device *)handle; +gmc_v10_0_gart_disable (adev); +if (amdgpu_sriov_vf (adev)) {/* full access mode, so don't touch any GMC register */ DRM_DEBUG ("For SRIOV client, shouldn't do anything.\n" );
@@ -1026,7 +1028,6 @@ static int gmc_v10_0_hw_fini(void *handle)amdgpu_irq_put (adev, &adev->gmc.ecc_irq,0 );amdgpu_irq_put (adev, &adev->gmc.vm_fault,0 ); -gmc_v10_0_gart_disable (adev);return 0 ; }
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c +2 -1
@@ -1677,6 +1677,8 @@ static int gmc_v9_0_hw_fini(void *handle) {struct amdgpu_device *adev = (struct amdgpu_device *)handle; +gmc_v9_0_gart_disable (adev); +if (amdgpu_sriov_vf (adev)) {/* full access mode, so don't touch any GMC register */ DRM_DEBUG ("For SRIOV client, shouldn't do anything.\n" );
@@ -1685,7 +1687,6 @@ static int gmc_v9_0_hw_fini(void *handle)amdgpu_irq_put (adev, &adev->gmc.ecc_irq,0 );amdgpu_irq_put (adev, &adev->gmc.vm_fault,0 ); -gmc_v9_0_gart_disable (adev);return 0 ; }
drivers/hid/hid-apple.c +7 -0
@@ -322,12 +322,19 @@ static int apple_event(struct hid_device *hdev, struct hid_field *field,/* * MacBook JIS keyboard has wrong logical maximum +* Magic Keyboard JIS has wrong logical maximum */ static __u8 *apple_report_fixup (struct hid_device *hdev,__u8 *rdesc,unsigned int *rsize) {struct apple_sc *asc =hid_get_drvdata (hdev); +if (*rsize >=71 && rdesc[70 ] ==0x65 && rdesc[64 ] ==0x65 ) { +hid_info (hdev, +"fixing up Magic Keyboard JIS report descriptor\n" ); + rdesc[64 ] = rdesc[70 ] =0xe7 ; + } +if ((asc->quirks &APPLE_RDESC_JIS ) && *rsize >=60 && rdesc[53 ] ==0x65 && rdesc[59 ] ==0x65 ) { hid_info(hdev,
drivers/hid/wacom_wac.c +8 -0
@@ -4715,6 +4715,12 @@ static const struct wacom_features wacom_features_0x393 = {"Wacom Intuos Pro S" ,31920 ,19950 ,8191 ,63 ,INTUOSP2S_BT ,WACOM_INTUOS3_RES ,WACOM_INTUOS3_RES ,7 , .touch_max = 10 }; +static const struct wacom_features wacom_features_0x3c6 = + {"Wacom Intuos BT S" ,15200 ,9500 ,4095 ,63 , +INTUOSHT3_BT ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES ,4 }; +static const struct wacom_features wacom_features_0x3c8 = + {"Wacom Intuos BT M" ,21600 ,13500 ,4095 ,63 , +INTUOSHT3_BT ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES ,4 };static const struct wacom_features wacom_features_HID_ANY_ID = {"Wacom HID" , .type =HID_GENERIC , .oVid =HID_ANY_ID , .oPid =HID_ANY_ID };
@@ -4888,6 +4894,8 @@ const struct hid_device_id wacom_ids[] = { { USB_DEVICE_WACOM(0x37A) }, { USB_DEVICE_WACOM(0x37B) }, { BT_DEVICE_WACOM(0x393) }, + { BT_DEVICE_WACOM(0x3c6) }, + { BT_DEVICE_WACOM(0x3c8) }, { USB_DEVICE_WACOM(0x4001) }, { USB_DEVICE_WACOM(0x4004) }, { USB_DEVICE_WACOM(0x5000) },
drivers/hwmon/ltc2947-core.c +6 -2
@@ -989,8 +989,12 @@ static int ltc2947_setup(struct ltc2947_data *st)return ret;/* check external clock presence */ - extclk =devm_clk_get (st->dev,NULL ); -if (!IS_ERR (extclk)) { + extclk =devm_clk_get_optional (st->dev,NULL ); +if (IS_ERR (extclk)) +return dev_err_probe (st->dev,PTR_ERR (extclk), +"Failed to get external clock\n" ); + +if (extclk) {unsigned long rate_hz;u8 pre =0 , div, tbctl;u64 aux;
drivers/hwmon/pmbus/ibm-cffps.c +8 -2
@@ -171,8 +171,14 @@ static ssize_t ibm_cffps_debugfs_read(struct file *file, char __user *buf, cmd =CFFPS_SN_CMD ;break ;case CFFPS_DEBUGFS_MAX_POWER_OUT : - rc =i2c_smbus_read_word_swapped (psu->client, -CFFPS_MAX_POWER_OUT_CMD ); +if (psu->version == cffps1) { + rc =i2c_smbus_read_word_swapped (psu->client, +CFFPS_MAX_POWER_OUT_CMD ); + }else { + rc =i2c_smbus_read_word_data (psu->client, +CFFPS_MAX_POWER_OUT_CMD ); + } +if (rc <0 )return rc;
drivers/net/ethernet/sun/Kconfig +1 -0
@@ -73,6 +73,7 @@ config CASSINI config SUNVNET_COMMON tristate "Common routines to support Sun Virtual Networking" depends on SUN_LDOMS + depends on INET default m config SUNVNET
drivers/scsi/ses.c +1 -1
@@ -118,7 +118,7 @@ static int ses_recv_diag(struct scsi_device *sdev, int page_code,static int ses_send_diag (struct scsi_device *sdev,int page_code,void *buf,int bufflen) { -u32 result; +int result;unsigned char cmd[] = {SEND_DIAGNOSTIC ,
drivers/scsi/virtio_scsi.c +2 -2
@@ -302,7 +302,7 @@ static void virtscsi_handle_transport_reset(struct virtio_scsi *vscsi, }break ;default : -pr_info ("Unsupport virtio scsi event reason %x\n" , event->reason); +pr_info ("Unsupported virtio scsi event reason %x\n" , event->reason); } }
@@ -394,7 +394,7 @@ static void virtscsi_handle_event(struct work_struct *work)virtscsi_handle_param_change (vscsi, event);break ;default : -pr_err ("Unsupport virtio scsi event %x\n" , event->event); +pr_err ("Unsupported virtio scsi event %x\n" , event->event); }virtscsi_kick_event (vscsi, event_node); }
fs/ext4/inline.c +5 -10
@@ -733,18 +733,13 @@ int ext4_write_inline_data_end(struct inode *inode, loff_t pos, unsigned len,void *kaddr;struct ext4_iloc iloc; -if (unlikely (copied < len)) { -if (!PageUptodate (page)) { - copied =0 ; - goto out; - } - } +if (unlikely (copied < len) && !PageUptodate (page)) +return 0 ; ret =ext4_get_inode_loc (inode, &iloc);if (ret) {ext4_std_error (inode->i_sb, ret); - copied =0 ; - goto out; +return ret; }ext4_write_lock_xattr (inode, &no_expand);
@@ -757,7 +752,7 @@ int ext4_write_inline_data_end(struct inode *inode, loff_t pos, unsigned len, (void )ext4_find_inline_data_nolock (inode); kaddr =kmap_atomic (page); -ext4_write_inline_data (inode, &iloc, kaddr, pos, len); +ext4_write_inline_data (inode, &iloc, kaddr, pos, copied);kunmap_atomic (kaddr);SetPageUptodate (page);/* clear page dirty so that writepages wouldn't work for us. */
@@ -766,7 +761,7 @@ int ext4_write_inline_data_end(struct inode *inode, loff_t pos, unsigned len,ext4_write_unlock_xattr (inode, &no_expand);brelse (iloc.bh);mark_inode_dirty (inode); -out: +return copied; }
fs/ext4/inode.c +23 -18
96 lines not on this page · raw message
fs/vboxsf/super.c +2 -10
@@ -21,10 +21,7 @@#define VBOXSF_SUPER_MAGIC 0x786f4256/* 'VBox' little endian */ -#define VBSF_MOUNT_SIGNATURE_BYTE_0 ('\000') -#define VBSF_MOUNT_SIGNATURE_BYTE_1 ('\377') -#define VBSF_MOUNT_SIGNATURE_BYTE_2 ('\376') -#define VBSF_MOUNT_SIGNATURE_BYTE_3 ('\375') +static const unsigned char VBSF_MOUNT_SIGNATURE [4 ] ="\000\377\376\375" ;static int follow_symlinks;module_param (follow_symlinks, int,0444 );
@@ -386,12 +383,7 @@ static int vboxsf_setup(void)static int vboxsf_parse_monolithic (struct fs_context *fc,void *data) { -unsigned char *options = data; - -if (options && options[0 ] ==VBSF_MOUNT_SIGNATURE_BYTE_0 && - options[1 ] ==VBSF_MOUNT_SIGNATURE_BYTE_1 && - options[2 ] ==VBSF_MOUNT_SIGNATURE_BYTE_2 && - options[3 ] ==VBSF_MOUNT_SIGNATURE_BYTE_3 ) { +if (data && !memcmp (data,VBSF_MOUNT_SIGNATURE ,4 )) {vbg_err ("vboxsf: Old binary mount data not supported, remove obsolete mount.vboxsf and/or update your VBoxService.\n" );return -EINVAL ; }
include/linux/perf_event.h +3 -1
@@ -682,7 +682,9 @@ struct perf_event {/* * timestamp shadows the actual context timing but it can * be safely used in NMI interrupt context. It reflects the -* context time as it was when the event was last scheduled in. +* context time as it was when the event was last scheduled in, +* or when ctx_sched_in failed to schedule the event because we +* run out of PMC. * * ctx_time already accounts for ctx->timestamp. Therefore to * compute ctx_time for a sample, simply add perf_clock().
include/linux/sched.h +1 -1
@@ -1589,7 +1589,7 @@ extern struct pid *cad_pid;#define tsk_used_math (p) ((p)->flags & PF_USED_MATH)#define used_math () tsk_used_math(current) -static inline bool is_percpu_thread (void ) +static __always_inline bool is_percpu_thread(void) {#ifdef CONFIG_SMP return (current->flags & PF_NO_SETAFFINITY) &&
include/net/pkt_sched.h +1 -0
@@ -11,6 +11,7 @@#include <uapi/linux/pkt_sched.h> #define DEFAULT_TX_QUEUE_LEN 1000 +#define STAB_SIZE_LOG_MAX 30struct qdisc_walker {int stop;
kernel/events/core.c +30 -4
@@ -3695,6 +3695,29 @@ static noinline int visit_groups_merge(struct perf_cpu_context *cpuctx,return 0 ; } +static inline bool event_update_userpage (struct perf_event *event) +{ +if (likely (!atomic_read (&event->mmap_count))) +return false; + +perf_event_update_time (event); +perf_set_shadow_time (event, event->ctx); +perf_event_update_userpage (event); + +return true; +} + +static inline void group_update_userpage (struct perf_event *group_event) +{ +struct perf_event *event; + +if (!event_update_userpage (group_event)) +return ; + +for_each_sibling_event (event, group_event) +event_update_userpage (event); +} +static int merge_sched_in (struct perf_event *event,void *data) {struct perf_event_context *ctx = event->ctx;
@@ -3713,14 +3736,15 @@ static int merge_sched_in(struct perf_event *event, void *data) }if (event->state ==PERF_EVENT_STATE_INACTIVE ) { + *can_add_hw =0 ;if (event->attr.pinned) {perf_cgroup_event_disable (event, ctx);perf_event_set_state (event,PERF_EVENT_STATE_ERROR ); + }else { + ctx->rotate_necessary =1 ; +perf_mux_hrtimer_restart (cpuctx); +group_update_userpage (event); } - - *can_add_hw =0 ; - ctx->rotate_necessary =1 ; -perf_mux_hrtimer_restart (cpuctx); }return 0 ;
@@ -6239,6 +6263,8 @@ static int perf_mmap(struct file *file, struct vm_area_struct *vma)ring_buffer_attach (event, rb); +perf_event_update_time (event); +perf_set_shadow_time (event, event->ctx);perf_event_init_userpage (event);perf_event_update_userpage (event); }else {
net/ipv6/netfilter/ip6_tables.c +1 -0
@@ -273,6 +273,7 @@ ip6t_do_table(struct sk_buff *skb,* things we don't know, ie. tcp syn flag or ports). If the * rule is also a fragment-specific rule, non-fragments won't * match it. */ + acpar.fragoff =0 ; acpar.hotdrop = false; acpar.state = state;
net/mac80211/mesh_pathtbl.c +4 -1
@@ -60,7 +60,10 @@ static struct mesh_table *mesh_table_alloc(void)atomic_set (&newtbl->entries,0 );spin_lock_init (&newtbl->gates_lock);spin_lock_init (&newtbl->walk_lock); -rhashtable_init (&newtbl->rhead, &mesh_rht_params); +if (rhashtable_init (&newtbl->rhead, &mesh_rht_params)) { +kfree (newtbl); +return NULL ; + }return newtbl; }
net/mac80211/rx.c +2 -1
@@ -4064,7 +4064,8 @@ static bool ieee80211_accept_frame(struct ieee80211_rx_data *rx)if (!bssid)return false;if (ether_addr_equal (sdata->vif.addr, hdr->addr2) || -ether_addr_equal (sdata->u.ibss.bssid, hdr->addr2)) +ether_addr_equal (sdata->u.ibss.bssid, hdr->addr2) || + !is_valid_ether_addr (hdr->addr2))return false;if (ieee80211_is_beacon (hdr->frame_control))return true;
net/netfilter/nf_nat_masquerade.c +97 -71
245 lines not on this page · raw message
net/sched/sch_api.c +6 -0
@@ -513,6 +513,12 @@ static struct qdisc_size_table *qdisc_get_stab(struct nlattr *opt,return stab; } +if (s->size_log >STAB_SIZE_LOG_MAX || + s->cell_log >STAB_SIZE_LOG_MAX ) { +NL_SET_ERR_MSG (extack,"Invalid logarithmic size of size table" ); +return ERR_PTR (-EINVAL ); + } + stab =kmalloc (sizeof (*stab) + tsize *sizeof (u16),GFP_KERNEL );if (!stab)return ERR_PTR (-ENOMEM );
sound/soc/intel/boards/sof_sdw.c +5 -0
@@ -847,6 +847,11 @@ static int create_sdw_dailink(struct device *dev, int *be_index, cpus + *cpu_id, cpu_dai_num, codecs, codec_num, NULL, &sdw_ops); +/* +* SoundWire DAILINKs use 'stream' functions and Bank Switch operations +* based on wait_for_completion(), tag them as 'nonatomic'. +*/ + dai_links[*be_index].nonatomic = true; ret =set_codec_init_func (link, dai_links + (*be_index)++, playback, group_id);
sound/soc/sof/core.c +1 -3
@@ -354,7 +354,6 @@ int snd_sof_device_remove(struct device *dev)dev_warn (dev,"error: %d failed to prepare DSP for device removal" , ret); -snd_sof_fw_unload (sdev);snd_sof_ipc_free (sdev);snd_sof_free_debug (sdev);snd_sof_free_trace (sdev);
@@ -377,8 +376,7 @@ int snd_sof_device_remove(struct device *dev)snd_sof_remove (sdev);/* release firmware */ -release_firmware (pdata->fw); - pdata->fw =NULL ; +snd_sof_fw_unload (sdev);return 0 ; }
sound/soc/sof/loader.c +2 -0
@@ -830,5 +830,7 @@ EXPORT_SYMBOL(snd_sof_run_firmware);void snd_sof_fw_unload (struct snd_sof_dev *sdev) {/* TODO: support module unloading at runtime */ +release_firmware (sdev->pdata->fw); + sdev->pdata->fw =NULL ; }EXPORT_SYMBOL (snd_sof_fw_unload);