Linux 5.4.233
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 232 +SUBLEVEL = 233 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-2.dtsi new file +44 -0
44 lines not on this page · raw message
arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-3.dtsi new file +44 -0
44 lines not on this page · raw message
arch/powerpc/boot/dts/fsl/t2081si-post.dtsi +18 -2
@@ -609,8 +609,8 @@ /include/ "qoriq-bman1.dtsi" /include/ "qoriq-fman3-0.dtsi" -/include/ "qoriq-fman3-0-1g-0.dtsi" -/include/ "qoriq-fman3-0-1g-1.dtsi" +/include/ "qoriq-fman3-0-10g-2.dtsi" +/include/ "qoriq-fman3-0-10g-3.dtsi" /include/ "qoriq-fman3-0-1g-2.dtsi" /include/ "qoriq-fman3-0-1g-3.dtsi" /include/ "qoriq-fman3-0-1g-4.dtsi"
@@ -659,3 +659,19 @@ interrupts = <16 2 1 9>; }; }; + +&fman0_rx_0x08 { + /delete-property/ fsl,fman-10g-port; +}; + +&fman0_tx_0x28 { + /delete-property/ fsl,fman-10g-port; +}; + +&fman0_rx_0x09 { + /delete-property/ fsl,fman-10g-port; +}; + +&fman0_tx_0x29 { + /delete-property/ fsl,fman-10g-port; +};
arch/x86/kvm/vmx/nested.c +11 -0
@@ -4118,6 +4118,17 @@ void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 exit_reason,vmx_switch_vmcs (vcpu, &vmx->vmcs01); +/* +* If IBRS is advertised to the vCPU, KVM must flush the indirect +* branch predictors when transitioning from L2 to L1, as L1 expects +* hardware (KVM in this case) to provide separate predictor modes. +* Bare metal isolates VMX root (host) from VMX non-root (guest), but +* doesn't isolate different VMCSs, i.e. in this case, doesn't provide +* separate modes for L2 vs L1. +*/ +if (guest_cpuid_has (vcpu,X86_FEATURE_SPEC_CTRL )) +indirect_branch_prediction_barrier (); +/* Update any VMCS fields that might have changed while L2 ran */ vmcs_write32 (VM_EXIT_MSR_LOAD_COUNT , vmx->msr_autoload.host.nr);vmcs_write32 (VM_ENTRY_MSR_LOAD_COUNT , vmx->msr_autoload.guest.nr);
arch/x86/kvm/vmx/vmx.c +4 -2
@@ -1397,8 +1397,10 @@ void vmx_vcpu_load_vmcs(struct kvm_vcpu *vcpu, int cpu,/* * No indirect branch prediction barrier needed when switching -* the active VMCS within a guest, e.g. on nested VM-Enter. -* The L1 VMM can protect itself with retpolines, IBPB or IBRS. +* the active VMCS within a vCPU, unless IBRS is advertised to +* the vCPU. To minimize the number of IBPBs executed, KVM +* performs IBPB on nested VM-Exit (a single nested transition +* may switch the active VMCS multiple times). */ if (!buddy ||WARN_ON_ONCE (buddy->vmcs != prev))indirect_branch_prediction_barrier ();
arch/x86/kvm/x86.c +3 -1
@@ -6787,7 +6787,9 @@ int x86_emulate_instruction(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa, write_fault_to_spt, emulation_type))return 1 ; -if (ctxt->have_exception) { + +if (ctxt->have_exception && + !(emulation_type &EMULTYPE_SKIP )) {/* * #UD should result in just EMULATION_FAILED, and trap-like * exception should not be encountered during decode.
drivers/gpu/drm/etnaviv/etnaviv_gem.c +5 -7
@@ -27,7 +27,7 @@ static void etnaviv_gem_scatter_map(struct etnaviv_gem_object *etnaviv_obj)* because display controller, GPU, etc. are not coherent. */ if (etnaviv_obj->flags &ETNA_BO_CACHE_MASK ) -dma_map_sg (dev->dev, sgt->sgl, sgt->nents,DMA_BIDIRECTIONAL ); +dma_map_sgtable (dev->dev, sgt,DMA_BIDIRECTIONAL ,0 ); }static void etnaviv_gem_scatterlist_unmap (struct etnaviv_gem_object *etnaviv_obj)
@@ -51,7 +51,7 @@ static void etnaviv_gem_scatterlist_unmap(struct etnaviv_gem_object *etnaviv_obj* discard those writes. */ if (etnaviv_obj->flags &ETNA_BO_CACHE_MASK ) -dma_unmap_sg (dev->dev, sgt->sgl, sgt->nents,DMA_BIDIRECTIONAL ); +dma_unmap_sgtable (dev->dev, sgt,DMA_BIDIRECTIONAL ,0 ); }/* called with etnaviv_obj->lock held */
@@ -403,9 +403,8 @@ int etnaviv_gem_cpu_prep(struct drm_gem_object *obj, u32 op, }if (etnaviv_obj->flags &ETNA_BO_CACHED ) { -dma_sync_sg_for_cpu (dev->dev, etnaviv_obj->sgt->sgl, - etnaviv_obj->sgt->nents, -etnaviv_op_to_dma_dir (op)); +dma_sync_sgtable_for_cpu (dev->dev, etnaviv_obj->sgt, +etnaviv_op_to_dma_dir (op)); etnaviv_obj->last_cpu_prep_op = op; }
@@ -420,8 +419,7 @@ int etnaviv_gem_cpu_fini(struct drm_gem_object *obj)if (etnaviv_obj->flags &ETNA_BO_CACHED ) {/* fini without a prep is almost certainly a userspace error */ WARN_ON (etnaviv_obj->last_cpu_prep_op ==0 ); -dma_sync_sg_for_device (dev->dev, etnaviv_obj->sgt->sgl, - etnaviv_obj->sgt->nents, +dma_sync_sgtable_for_device (dev->dev, etnaviv_obj->sgt,etnaviv_op_to_dma_dir (etnaviv_obj->last_cpu_prep_op)); etnaviv_obj->last_cpu_prep_op =0 ; }
drivers/gpu/drm/etnaviv/etnaviv_mmu.c +6 -13
@@ -73,17 +73,17 @@ static int etnaviv_iommu_map(struct etnaviv_iommu_context *context, u32 iova, struct sg_table *sgt, unsigned len, int prot) { struct scatterlist *sg;unsigned int da = iova; -unsigned int i, j; +unsigned int i;int ret;if (!context || !sgt)return -EINVAL ; -for_each_sg (sgt->sgl, sg, sgt->nents, i) { -u32 pa =sg_dma_address (sg) - sg->offset; +for_each_sgtable_dma_sg (sgt, sg, i) { +phys_addr_t pa =sg_dma_address (sg) - sg->offset;size_t bytes =sg_dma_len (sg) + sg->offset; -VERB ("map[%d]: %08x %08x(%zx)" , i, iova, pa, bytes); +VERB ("map[%d]: %08x %pap(%zx)" , i, iova, &pa, bytes); ret =etnaviv_context_map (context, da, pa, bytes, prot);if (ret)
@@ -95,14 +95,7 @@ static int etnaviv_iommu_map(struct etnaviv_iommu_context *context, u32 iova,return 0 ; fail: - da = iova; - -for_each_sg (sgt->sgl, sg, i, j) { -size_t bytes =sg_dma_len (sg) + sg->offset; - -etnaviv_context_unmap (context, da, bytes); - da += bytes; - } +etnaviv_context_unmap (context, iova, da - iova);return ret; }
@@ -113,7 +106,7 @@ static void etnaviv_iommu_unmap(struct etnaviv_iommu_context *context, u32 iova,unsigned int da = iova;int i; -for_each_sg (sgt->sgl, sg, sgt->nents, i) { +for_each_sgtable_dma_sg (sgt, sg, i) {size_t bytes =sg_dma_len (sg) + sg->offset;etnaviv_context_unmap (context, da, bytes);
drivers/gpu/drm/i915/gvt/gtt.c +13 -4
@@ -1186,10 +1186,8 @@ static int split_2MB_gtt_entry(struct intel_vgpu *vgpu,for_each_shadow_entry (sub_spt, &sub_se, sub_index) { ret =intel_gvt_hypervisor_dma_map_guest_page (vgpu, start_gfn + sub_index,PAGE_SIZE , &dma_addr); -if (ret) { -ppgtt_invalidate_spt (spt); -return ret; - } +if (ret) + goto err; sub_se.val64 = se->val64;/* Copy the PAT field from PDE. */
@@ -1208,6 +1206,17 @@ static int split_2MB_gtt_entry(struct intel_vgpu *vgpu, ops->set_pfn (se, sub_spt->shadow_page.mfn);ppgtt_set_shadow_entry (spt, se, index);return 0 ; +err: +/* Cancel the existing addess mappings of DMA addr. */ +for_each_present_shadow_entry (sub_spt, &sub_se, sub_index) { +gvt_vdbg_mm ("invalidate 4K entry\n" ); +ppgtt_invalidate_pte (sub_spt, &sub_se); + } +/* Release the new allocated spt. */ +trace_spt_change (sub_spt->vgpu->id,"release" , sub_spt, + sub_spt->guest_page.gfn, sub_spt->shadow_page.type); +ppgtt_free_spt (sub_spt); +return ret; } static int split_64KB_gtt_entry(struct intel_vgpu *vgpu,
drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c +24 -9
@@ -518,6 +518,7 @@ static int kvaser_usb_hydra_send_simple_cmd(struct kvaser_usb *dev, u8 cmd_no, int channel) {struct kvaser_cmd *cmd; +size_t cmd_len;int err; cmd =kcalloc (1 ,sizeof (struct kvaser_cmd ),GFP_KERNEL );
@@ -525,6 +526,7 @@ static int kvaser_usb_hydra_send_simple_cmd(struct kvaser_usb *dev,return -ENOMEM ; cmd->header.cmd_no = cmd_no; + cmd_len =kvaser_usb_hydra_cmd_size (cmd);if (channel <0 ) {kvaser_usb_hydra_set_cmd_dest_he (cmd,KVASER_USB_HYDRA_HE_ADDRESS_ILLEGAL );
@@ -541,7 +543,7 @@ static int kvaser_usb_hydra_send_simple_cmd(struct kvaser_usb *dev,kvaser_usb_hydra_set_cmd_transid (cmd,kvaser_usb_hydra_get_next_transid (dev)); - err =kvaser_usb_send_cmd (dev, cmd,kvaser_usb_hydra_cmd_size (cmd)); + err =kvaser_usb_send_cmd (dev, cmd, cmd_len);if (err) goto end;
@@ -557,6 +559,7 @@ kvaser_usb_hydra_send_simple_cmd_async(struct kvaser_usb_net_priv *priv, {struct kvaser_cmd *cmd;struct kvaser_usb *dev = priv->dev; +size_t cmd_len;int err; cmd =kcalloc (1 ,sizeof (struct kvaser_cmd ),GFP_ATOMIC );
@@ -564,14 +567,14 @@ kvaser_usb_hydra_send_simple_cmd_async(struct kvaser_usb_net_priv *priv,return -ENOMEM ; cmd->header.cmd_no = cmd_no; + cmd_len =kvaser_usb_hydra_cmd_size (cmd);kvaser_usb_hydra_set_cmd_dest_he (cmd, dev->card_data.hydra.channel_to_he[priv->channel]);kvaser_usb_hydra_set_cmd_transid (cmd,kvaser_usb_hydra_get_next_transid (dev)); - err =kvaser_usb_send_cmd_async (priv, cmd, -kvaser_usb_hydra_cmd_size (cmd)); + err =kvaser_usb_send_cmd_async (priv, cmd, cmd_len);if (err)kfree (cmd);
@@ -715,6 +718,7 @@ static int kvaser_usb_hydra_get_single_capability(struct kvaser_usb *dev, {struct kvaser_usb_dev_card_data *card_data = &dev->card_data;struct kvaser_cmd *cmd; +size_t cmd_len;u32 value =0 ;u32 mask =0 ;u16 cap_cmd_res;
@@ -726,13 +730,14 @@ static int kvaser_usb_hydra_get_single_capability(struct kvaser_usb *dev,return -ENOMEM ; cmd->header.cmd_no =CMD_GET_CAPABILITIES_REQ ; + cmd_len =kvaser_usb_hydra_cmd_size (cmd); cmd->cap_req.cap_cmd =cpu_to_le16 (cap_cmd_req);kvaser_usb_hydra_set_cmd_dest_he (cmd, card_data->hydra.sysdbg_he);kvaser_usb_hydra_set_cmd_transid (cmd,kvaser_usb_hydra_get_next_transid (dev)); - err =kvaser_usb_send_cmd (dev, cmd,kvaser_usb_hydra_cmd_size (cmd)); + err =kvaser_usb_send_cmd (dev, cmd, cmd_len);if (err) goto end;
@@ -1555,6 +1560,7 @@ static int kvaser_usb_hydra_get_busparams(struct kvaser_usb_net_priv *priv,struct kvaser_usb *dev = priv->dev;struct kvaser_usb_net_hydra_priv *hydra = priv->sub_priv;struct kvaser_cmd *cmd; +size_t cmd_len;int err;if (!hydra)
@@ -1565,6 +1571,7 @@ static int kvaser_usb_hydra_get_busparams(struct kvaser_usb_net_priv *priv,return -ENOMEM ; cmd->header.cmd_no =CMD_GET_BUSPARAMS_REQ ; + cmd_len =kvaser_usb_hydra_cmd_size (cmd);kvaser_usb_hydra_set_cmd_dest_he (cmd, dev->card_data.hydra.channel_to_he[priv->channel]); kvaser_usb_hydra_set_cmd_transid
@@ -1574,7 +1581,7 @@ static int kvaser_usb_hydra_get_busparams(struct kvaser_usb_net_priv *priv,reinit_completion (&priv->get_busparams_comp); - err =kvaser_usb_send_cmd (dev, cmd,kvaser_usb_hydra_cmd_size (cmd)); + err =kvaser_usb_send_cmd (dev, cmd, cmd_len);if (err)return err;
@@ -1601,6 +1608,7 @@ static int kvaser_usb_hydra_set_bittiming(const struct net_device *netdev,struct kvaser_cmd *cmd;struct kvaser_usb_net_priv *priv =netdev_priv (netdev);struct kvaser_usb *dev = priv->dev; +size_t cmd_len;int err; cmd =kcalloc (1 ,sizeof (struct kvaser_cmd ),GFP_KERNEL );
@@ -1608,6 +1616,7 @@ static int kvaser_usb_hydra_set_bittiming(const struct net_device *netdev,return -ENOMEM ; cmd->header.cmd_no =CMD_SET_BUSPARAMS_REQ ; + cmd_len =kvaser_usb_hydra_cmd_size (cmd);memcpy (&cmd->set_busparams_req.busparams_nominal, busparams,sizeof (cmd->set_busparams_req.busparams_nominal));
@@ -1616,7 +1625,7 @@ static int kvaser_usb_hydra_set_bittiming(const struct net_device *netdev,kvaser_usb_hydra_set_cmd_transid (cmd,kvaser_usb_hydra_get_next_transid (dev)); - err =kvaser_usb_send_cmd (dev, cmd,kvaser_usb_hydra_cmd_size (cmd)); + err =kvaser_usb_send_cmd (dev, cmd, cmd_len);kfree (cmd);
@@ -1629,6 +1638,7 @@ static int kvaser_usb_hydra_set_data_bittiming(const struct net_device *netdev,struct kvaser_cmd *cmd;struct kvaser_usb_net_priv *priv =netdev_priv (netdev);struct kvaser_usb *dev = priv->dev; +size_t cmd_len;int err; cmd =kcalloc (1 ,sizeof (struct kvaser_cmd ),GFP_KERNEL );
@@ -1636,6 +1646,7 @@ static int kvaser_usb_hydra_set_data_bittiming(const struct net_device *netdev,return -ENOMEM ; cmd->header.cmd_no =CMD_SET_BUSPARAMS_FD_REQ ; + cmd_len =kvaser_usb_hydra_cmd_size (cmd);memcpy (&cmd->set_busparams_req.busparams_data, busparams,sizeof (cmd->set_busparams_req.busparams_data));
@@ -1653,7 +1664,7 @@ static int kvaser_usb_hydra_set_data_bittiming(const struct net_device *netdev,kvaser_usb_hydra_set_cmd_transid (cmd,kvaser_usb_hydra_get_next_transid (dev)); - err =kvaser_usb_send_cmd (dev, cmd,kvaser_usb_hydra_cmd_size (cmd)); + err =kvaser_usb_send_cmd (dev, cmd, cmd_len);kfree (cmd);
@@ -1781,6 +1792,7 @@ static int kvaser_usb_hydra_get_software_info(struct kvaser_usb *dev)static int kvaser_usb_hydra_get_software_details (struct kvaser_usb *dev) {struct kvaser_cmd *cmd; +size_t cmd_len;int err;u32 flags;struct kvaser_usb_dev_card_data *card_data = &dev->card_data;
@@ -1790,6 +1802,7 @@ static int kvaser_usb_hydra_get_software_details(struct kvaser_usb *dev)return -ENOMEM ; cmd->header.cmd_no =CMD_GET_SOFTWARE_DETAILS_REQ ; + cmd_len =kvaser_usb_hydra_cmd_size (cmd); cmd->sw_detail_req.use_ext_cmd =1 ;kvaser_usb_hydra_set_cmd_dest_he (cmd,KVASER_USB_HYDRA_HE_ADDRESS_ILLEGAL );
@@ -1797,7 +1810,7 @@ static int kvaser_usb_hydra_get_software_details(struct kvaser_usb *dev)kvaser_usb_hydra_set_cmd_transid (cmd,kvaser_usb_hydra_get_next_transid (dev)); - err =kvaser_usb_send_cmd (dev, cmd,kvaser_usb_hydra_cmd_size (cmd)); + err =kvaser_usb_send_cmd (dev, cmd, cmd_len);if (err) goto end;
@@ -1913,6 +1926,7 @@ static int kvaser_usb_hydra_set_opt_mode(const struct kvaser_usb_net_priv *priv) {struct kvaser_usb *dev = priv->dev;struct kvaser_cmd *cmd; +size_t cmd_len;int err; if ((priv->can.ctrlmode &
@@ -1928,6 +1942,7 @@ static int kvaser_usb_hydra_set_opt_mode(const struct kvaser_usb_net_priv *priv)return -ENOMEM ; cmd->header.cmd_no =CMD_SET_DRIVERMODE_REQ ; + cmd_len =kvaser_usb_hydra_cmd_size (cmd);kvaser_usb_hydra_set_cmd_dest_he (cmd, dev->card_data.hydra.channel_to_he[priv->channel]); kvaser_usb_hydra_set_cmd_transid
@@ -1937,7 +1952,7 @@ static int kvaser_usb_hydra_set_opt_mode(const struct kvaser_usb_net_priv *priv)else cmd->set_ctrlmode.mode =KVASER_USB_HYDRA_CTRLMODE_NORMAL ; - err =kvaser_usb_send_cmd (dev, cmd,kvaser_usb_hydra_cmd_size (cmd)); + err =kvaser_usb_send_cmd (dev, cmd, cmd_len);kfree (cmd);return err;
drivers/net/wireless/marvell/mwifiex/sdio.c +1 -0
@@ -58,6 +58,7 @@ static struct memory_type_mapping mem_type_mapping_tbl[] = { };static const struct of_device_id mwifiex_sdio_of_match_table[] = { + { .compatible ="marvell,sd8787" }, { .compatible ="marvell,sd8897" }, { .compatible ="marvell,sd8997" }, { }
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c +2 -6
@@ -4372,12 +4372,9 @@ void rtl8xxxu_gen1_report_connect(struct rtl8xxxu_priv *priv,void rtl8xxxu_gen2_report_connect (struct rtl8xxxu_priv *priv,u8 macid,bool connect) { -#ifdef RTL8XXXU_GEN2_REPORT_CONNECT /* -* Barry Day reports this causes issues with 8192eu and 8723bu -* devices reconnecting. The reason for this is unclear, but -* until it is better understood, leave the code in place but -* disabled, so it is not lost. +* The firmware turns on the rate control when it knows it's +* connected to a network. */ struct h2c_cmd h2c;
@@ -4390,7 +4387,6 @@ void rtl8xxxu_gen2_report_connect(struct rtl8xxxu_priv *priv, h2c.media_status_rpt.parm &= ~BIT (0 );rtl8xxxu_gen2_h2c_cmd (priv, &h2c,sizeof (h2c.media_status_rpt)); -#endif }void rtl8xxxu_gen1_init_aggregation (struct rtl8xxxu_priv *priv)
fs/ext4/sysfs.c +6 -1
@@ -383,6 +383,11 @@ static void ext4_sb_release(struct kobject *kobj)complete (&sbi->s_kobj_unregister); } +static void ext4_feat_release (struct kobject *kobj) +{ +kfree (kobj); +} +static const struct sysfs_ops ext4_attr_ops = { .show = ext4_attr_show, .store = ext4_attr_store,
@@ -397,7 +402,7 @@ static struct kobj_type ext4_sb_ktype = {static struct kobj_type ext4_feat_ktype = { .default_groups = ext4_feat_groups, .sysfs_ops = &ext4_attr_ops, - .release = (void (*)(struct kobject *))kfree, + .release = ext4_feat_release, };static struct kobject *ext4_root;
include/linux/dma-mapping.h +80 -0
86 lines not on this page · raw message
include/linux/nospec.h +4 -0
@@ -9,6 +9,10 @@struct task_struct ; +#ifndef barrier_nospec +# define barrier_nospec () do { } while (0) +#endif +/** * array_index_mask_nospec() - generate a ~0 mask when index < size, 0 otherwise * @index: array element index
include/linux/random.h +3 -3
@@ -19,14 +19,14 @@ void add_input_randomness(unsigned int type, unsigned int code, void add_interrupt_randomness(int irq) __latent_entropy;void add_hwgenerator_randomness (const void *buf,size_t len,size_t entropy); -#if defined(LATENT_ENTROPY_PLUGIN ) && !defined(__CHECKER__)static inline void add_latent_entropy (void ) { +#if defined(LATENT_ENTROPY_PLUGIN ) && !defined(__CHECKER__)add_device_randomness ((const void *)&latent_entropy,sizeof (latent_entropy)); -}#else -static inline void add_latent_entropy (void ) { } +add_device_randomness (NULL ,0 );#endif +}void get_random_bytes (void *buf,size_t len);size_t __must_check get_random_bytes_arch (void *buf,size_t len);
include/linux/scatterlist.h +47 -3
80 lines not on this page · raw message
kernel/bpf/core.c +1 -2
@@ -30,6 +30,7 @@#include <linux/kallsyms.h> #include <linux/rcupdate.h> #include <linux/perf_event.h> +#include <linux/nospec.h> #include <asm/barrier.h> #include <asm/unaligned.h>
@@ -1567,9 +1568,7 @@ static u64 ___bpf_prog_run(u64 *regs, const struct bpf_insn *insn, u64 *stack)* reuse preexisting logic from Spectre v1 mitigation that * happens to produce the required code on x86 for v4 as well. */ -#ifdef CONFIG_X86 barrier_nospec (); -#endif CONT ;#define LDST (SIZEOP ,SIZE ) \ STX_MEM_##SIZEOP: \
kernel/time/alarmtimer.c +29 -4
@@ -479,11 +479,35 @@ u64 alarm_forward(struct alarm *alarm, ktime_t now, ktime_t interval) }EXPORT_SYMBOL_GPL (alarm_forward); -u64 alarm_forward_now (struct alarm *alarm,ktime_t interval) +static u64 __alarm_forward_now (struct alarm *alarm,ktime_t interval,bool throttle) {struct alarm_base *base = &alarm_bases[alarm->type]; +ktime_t now = base->gettime (); + +if (IS_ENABLED (CONFIG_HIGH_RES_TIMERS ) && throttle) { +/* +* Same issue as with posix_timer_fn(). Timers which are +* periodic but the signal is ignored can starve the system +* with a very small interval. The real fix which was +* promised in the context of posix_timer_fn() never +* materialized, but someone should really work on it. +* +* To prevent DOS fake @now to be 1 jiffie out which keeps +* the overrun accounting correct but creates an +* inconsistency vs. timer_gettime(2). +*/ +ktime_t kj =NSEC_PER_SEC /HZ ; + +if (interval < kj) + now =ktime_add (now, kj); + } + +return alarm_forward (alarm, now, interval); +} -return alarm_forward (alarm, base->gettime (), interval); +u64 alarm_forward_now (struct alarm *alarm,ktime_t interval) +{ +return __alarm_forward_now (alarm, interval, false); }EXPORT_SYMBOL_GPL (alarm_forward_now);
@@ -557,9 +581,10 @@ static enum alarmtimer_restart alarm_handle_timer(struct alarm *alarm,if (posix_timer_event (ptr, si_private) && ptr->it_interval) {/* * Handle ignored signals and rearm the timer. This will go -* away once we handle ignored signals proper. +* away once we handle ignored signals proper. Ensure that +* small intervals cannot starve the system. */ - ptr->it_overrun +=alarm_forward_now (alarm, ptr->it_interval); + ptr->it_overrun +=__alarm_forward_now (alarm, ptr->it_interval, true); ++ptr->it_requeue_pending; ptr->it_active =1 ; result =ALARMTIMER_RESTART ;
lib/usercopy.c +7 -0
@@ -1,6 +1,7 @@// SPDX-License-Identifier: GPL-2.0 #include <linux/uaccess.h> #include <linux/bitops.h> +#include <linux/nospec.h> /* out-of-line parts */
@@ -10,6 +11,12 @@ unsigned long _copy_from_user(void *to, const void __user *from, unsigned long nunsigned long res = n;might_fault ();if (likely (access_ok (from, n))) { +/* +* Ensure that bad access_ok() speculation will not +* lead to nasty side effects *after* the copy is +* finished: +*/ +barrier_nospec ();kasan_check_write (to, n); res =raw_copy_from_user (to, from, n); }
net/mac80211/ieee80211_i.h +22 -2
@@ -632,6 +632,26 @@ struct mesh_csa_settings {struct cfg80211_csa_settings settings; }; +/** +* struct mesh_table +* +* @known_gates: list of known mesh gates and their mpaths by the station. The +* gate's mpath may or may not be resolved and active. +* @gates_lock: protects updates to known_gates +* @rhead: the rhashtable containing struct mesh_paths, keyed by dest addr +* @walk_head: linked list containing all mesh_path objects +* @walk_lock: lock protecting walk_head +* @entries: number of entries in the table +*/ +struct mesh_table { +struct hlist_head known_gates; +spinlock_t gates_lock; +struct rhashtable rhead; +struct hlist_head walk_head; +spinlock_t walk_lock; +atomic_t entries;/* Up to MAX_MESH_NEIGHBOURS */ +}; +struct ieee80211_if_mesh {struct timer_list housekeeping_timer;struct timer_list mesh_path_timer;
@@ -706,8 +726,8 @@ struct ieee80211_if_mesh {/* offset from skb->data while building IE */ int meshconf_offset; -struct mesh_table *mesh_paths; -struct mesh_table *mpp_paths;/* Store paths for MPP&MAP */ +struct mesh_table mesh_paths; +struct mesh_table mpp_paths;/* Store paths for MPP&MAP */ int mesh_paths_generation;int mpp_paths_generation; };
net/mac80211/mesh.h +1 -21
@@ -127,26 +127,6 @@ struct mesh_path {u32 path_change_count; }; -/** -* struct mesh_table -* -* @known_gates: list of known mesh gates and their mpaths by the station. The -* gate's mpath may or may not be resolved and active. -* @gates_lock: protects updates to known_gates -* @rhead: the rhashtable containing struct mesh_paths, keyed by dest addr -* @walk_head: linked list containging all mesh_path objects -* @walk_lock: lock protecting walk_head -* @entries: number of entries in the table -*/ -struct mesh_table { -struct hlist_head known_gates; -spinlock_t gates_lock; -struct rhashtable rhead; -struct hlist_head walk_head; -spinlock_t walk_lock; -atomic_t entries;/* Up to MAX_MESH_NEIGHBOURS */ -}; -/* Recent multicast cache */ /* RMC_BUCKETS must be a power of 2, maximum 256 */ #define RMC_BUCKETS 256
@@ -306,7 +286,7 @@ int mesh_path_error_tx(struct ieee80211_sub_if_data *sdata,void mesh_path_assign_nexthop (struct mesh_path *mpath,struct sta_info *sta);void mesh_path_flush_pending (struct mesh_path *mpath);void mesh_path_tx_pending (struct mesh_path *mpath); -int mesh_pathtbl_init (struct ieee80211_sub_if_data *sdata); +void mesh_pathtbl_init (struct ieee80211_sub_if_data *sdata);void mesh_pathtbl_unregister (struct ieee80211_sub_if_data *sdata);int mesh_path_del (struct ieee80211_sub_if_data *sdata,const u8 *addr);void mesh_path_timer (struct timer_list *t);
net/mac80211/mesh_pathtbl.c +31 -58
195 lines not on this page · raw message
net/sched/sch_taprio.c +3 -5
@@ -1908,14 +1908,12 @@ static int taprio_dump(struct Qdisc *sch, struct sk_buff *skb)static struct Qdisc *taprio_leaf (struct Qdisc *sch,unsigned long cl) { -struct taprio_sched *q =qdisc_priv (sch); -struct net_device *dev =qdisc_dev (sch); -unsigned int ntx = cl -1 ; +struct netdev_queue *dev_queue =taprio_queue_get (sch, cl); -if (ntx >= dev->num_tx_queues) +if (!dev_queue)return NULL ; -return q->qdiscs[ntx]; +return dev_queue->qdisc_sleeping; }static unsigned long taprio_find (struct Qdisc *sch,u32 classid)
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.233 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.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/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-2.dtsi | 44 ++++++++ arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-3.dtsi | 44 ++++++++ arch/powerpc/boot/dts/fsl/t2081si-post.dtsi | 20 +++- arch/x86/kvm/vmx/nested.c | 11 ++ arch/x86/kvm/vmx/vmx.c | 6 - arch/x86/kvm/x86.c | 4 drivers/gpu/drm/etnaviv/etnaviv_gem.c | 12 +- drivers/gpu/drm/etnaviv/etnaviv_mmu.c | 19 +-- drivers/gpu/drm/i915/gvt/gtt.c | 17 ++- drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c | 33 ++++-- drivers/net/wireless/marvell/mwifiex/sdio.c | 1 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 8 - fs/ext4/sysfs.c | 7 + include/linux/dma-mapping.h | 80 ++++++++++++++++ include/linux/nospec.h | 4 include/linux/random.h | 6 - include/linux/scatterlist.h | 50 +++++++++- kernel/bpf/core.c | 3 kernel/time/alarmtimer.c | 33 +++++- lib/usercopy.c | 7 + net/mac80211/ieee80211_i.h | 24 ++++ net/mac80211/mesh.h | 22 ---- net/mac80211/mesh_pathtbl.c | 89 ++++++------------ net/sched/sch_taprio.c | 8 - 25 files changed, 410 insertions(+), 144 deletions(-)
Bitterblue Smith (1):
wifi: rtl8xxxu: gen2: Turn on the rate control
Dave Hansen (1):
uaccess: Add speculation barrier to copy_from_user()
Greg Kroah-Hartman (1):
Linux 5.4.233
Jason A. Donenfeld (1):
random: always mix cycle counter in add_latent_entropy()
Jim Mattson (1):
KVM: VMX: Execute IBPB on emulated VM-exit when guest has IBRS
Kees Cook (1):
ext4: Fix function prototype mismatch for ext4_feat_ktype
Linus Torvalds (1):
bpf: add missing header file include
Lucas Stach (1):
drm/etnaviv: don't truncate physical page address
Lukas Wunner (1):
wifi: mwifiex: Add missing compatible string for SD8787
Marc Kleine-Budde (1):
can: kvaser_usb: hydra: help gcc-13 to figure out cmd_len
Marek Szyprowski (3):
dma-mapping: add generic helpers for mapping sgtable objects
scatterlist: add generic wrappers for iterating over sgtable objects
drm: etnaviv: fix common struct sg_table related issues
Pavel Skripkin (1):
mac80211: mesh: embedd mesh_paths and mpp_paths into ieee80211_if_mesh
Sean Anderson (2):
powerpc: dts: t208x: Mark MAC1 and MAC2 as 10G
powerpc: dts: t208x: Disable 10G on MAC1 and MAC2
Sean Christopherson (1):
KVM: x86: Fail emulation during EMULTYPE_SKIP on any exception
Thomas Gleixner (1):
alarmtimer: Prevent starvation by small intervals and SIG_IGN
Vladimir Oltean (1):
Revert "net/sched: taprio: make qdisc_leaf() see the per-netdev-queue pfifo child qdiscs"
Zheng Wang (1):
drm/i915/gvt: fix double free bug in split_2MB_gtt_entry