Linux 5.4.228
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.228 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/x86/kernel/cpu/mtrr/mtrr.c | 2 - arch/x86/kernel/smpboot.c | 1 block/partition-generic.c | 7 +++ drivers/net/can/usb/mcba_usb.c | 10 +++-- drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c | 3 + drivers/pinctrl/mediatek/mtk-eint.c | 9 +++- include/linux/can/platform/sja1000.h | 2 - include/linux/hugetlb.h | 6 +-- mm/gup.c | 13 ++++++ mm/hugetlb.c | 30 +++++++-------- net/core/filter.c | 2 + sound/soc/soc-ops.c | 9 ++++ 13 files changed, 65 insertions(+), 31 deletions(-)
Baolin Wang (1):
mm/hugetlb: fix races when looking up a CONT-PTE/PMD size hugetlb page
Charles Keepax (1):
ASoC: ops: Correct bounds check for second channel on SX controls
Greg Kroah-Hartman (1):
Linux 5.4.228
Heiko Schocher (1):
can: sja1000: fix size of OCR_MODE_MASK define
Jialiang Wang (1):
nfp: fix use-after-free in area_cache_get()
Lorenzo Colitti (1):
net: bpf: Allow TC programs to call BPF_FUNC_skb_change_head
Mark Brown (1):
ASoC: ops: Check bounds for second channel in snd_soc_put_volsw_sx()
Ming Lei (1):
block: unhash blkdev part inode when the part is deleted
Paul E. McKenney (1):
x86/smpboot: Move rcu_cpu_starting() earlier
Ricardo Ribalda (1):
pinctrl: meditatek: Startup with the IRQs disabled
Yasushi SHOJI (1):
can: mcba_usb: Fix termination command argument
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 227 +SUBLEVEL = 228 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/x86/kernel/cpu/mtrr/mtrr.c +0 -2
@@ -794,8 +794,6 @@ void mtrr_ap_init(void)if (!use_intel () || mtrr_aps_delayed_init)return ; -rcu_cpu_starting (smp_processor_id ()); -/* * Ideally we should hold mtrr_mutex here to avoid mtrr entries * changed, but this routine will be called in cpu boot time,
arch/x86/kernel/smpboot.c +1 -0
@@ -224,6 +224,7 @@ static void notrace start_secondary(void *unused)#endif load_current_idt ();cpu_init (); +rcu_cpu_starting (raw_smp_processor_id ()); x86_cpuinit.early_percpu_clock_init ();preempt_disable ();smp_callin ();
block/partition-generic.c +7 -0
@@ -272,6 +272,7 @@ void delete_partition(struct gendisk *disk, int partno)struct disk_part_tbl *ptbl =rcu_dereference_protected (disk->part_tbl,1 );struct hd_struct *part; +struct block_device *bdev;if (partno >= ptbl->len)return ;
@@ -292,6 +293,12 @@ void delete_partition(struct gendisk *disk, int partno)* "in-use" until we really free the gendisk. */ blk_invalidate_devt (part_devt (part)); + + bdev =bdget (part_devt (part)); +if (bdev) { +remove_inode_hash (bdev->bd_inode); +bdput (bdev); + }hd_struct_kill (part); }
drivers/net/can/usb/mcba_usb.c +7 -3
@@ -47,6 +47,10 @@#define MCBA_VER_REQ_USB 1#define MCBA_VER_REQ_CAN 2 +/* Drive the CAN_RES signal LOW "0" to activate R24 and R25 */ +#define MCBA_VER_TERMINATION_ON 0 +#define MCBA_VER_TERMINATION_OFF 1 +#define MCBA_SIDL_EXID_MASK 0x8#define MCBA_DLC_MASK 0xf#define MCBA_DLC_RTR_MASK 0x40
@@ -469,7 +473,7 @@ static void mcba_usb_process_ka_usb(struct mcba_priv *priv, priv->usb_ka_first_pass = false; } -if (msg->termination_state) +if (msg->termination_state ==MCBA_VER_TERMINATION_ON ) priv->can.termination =MCBA_TERMINATION_ENABLED ;else priv->can.termination =MCBA_TERMINATION_DISABLED ;
@@ -789,9 +793,9 @@ static int mcba_set_termination(struct net_device *netdev, u16 term) };if (term ==MCBA_TERMINATION_ENABLED ) - usb_msg.termination =1 ; + usb_msg.termination =MCBA_VER_TERMINATION_ON ;else - usb_msg.termination =0 ; + usb_msg.termination =MCBA_VER_TERMINATION_OFF ;mcba_usb_xmit_cmd (priv, (struct mcba_usb_msg *)&usb_msg);
drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c +2 -1
@@ -874,7 +874,6 @@ area_cache_get(struct nfp_cpp *cpp, u32 id, }/* Adjust the start address to be cache size aligned */ - cache->id = id; cache->addr = addr & ~(u64)(cache->size -1 );/* Re-init to the new ID and address */
@@ -894,6 +893,8 @@ area_cache_get(struct nfp_cpp *cpp, u32 id,return NULL ; } + cache->id = id; + exit:/* Adjust offset */ *offset = addr - cache->addr;
drivers/pinctrl/mediatek/mtk-eint.c +6 -3
@@ -277,12 +277,15 @@ static struct irq_chip mtk_eint_irq_chip = {static unsigned int mtk_eint_hw_init (struct mtk_eint *eint) { -void __iomem *reg = eint->base + eint->regs->dom_en; +void __iomem *dom_en = eint->base + eint->regs->dom_en; +void __iomem *mask_set = eint->base + eint->regs->mask_set;unsigned int i;for (i =0 ; i < eint->hw->ap_num; i +=32 ) { -writel (0xffffffff , reg); - reg +=4 ; +writel (0xffffffff , dom_en); +writel (0xffffffff , mask_set); + dom_en +=4 ; + mask_set +=4 ; }return 0 ;
include/linux/can/platform/sja1000.h +1 -1
@@ -14,7 +14,7 @@#define OCR_MODE_TEST 0x01#define OCR_MODE_NORMAL 0x02#define OCR_MODE_CLOCK 0x03 -#define OCR_MODE_MASK 0x07 +#define OCR_MODE_MASK 0x03#define OCR_TX0_INVERT 0x04#define OCR_TX0_PULLDOWN 0x08#define OCR_TX0_PULLUP 0x10
include/linux/hugetlb.h +3 -3
@@ -127,8 +127,8 @@ struct page *follow_huge_addr(struct mm_struct *mm, unsigned long address,struct page *follow_huge_pd (struct vm_area_struct *vma,unsigned long address,hugepd_t hpd,int flags,int pdshift); -struct page *follow_huge_pmd (struct mm_struct *mm,unsigned long address, -pmd_t *pmd,int flags); +struct page *follow_huge_pmd_pte (struct vm_area_struct *vma,unsigned long address, +int flags);struct page *follow_huge_pud (struct mm_struct *mm,unsigned long address,pud_t *pud,int flags); struct page *follow_huge_pgd(struct mm_struct *mm, unsigned long address,
@@ -175,7 +175,7 @@ static inline void hugetlb_show_meminfo(void) { }#define follow_huge_pd (vma, addr, hpd, flags, pdshift) NULL -#define follow_huge_pmd (mm, addr, pmd, flags) NULL +#define follow_huge_pmd_pte (vma, addr, flags) NULL#define follow_huge_pud (mm, addr, pud, flags) NULL#define follow_huge_pgd (mm, addr, pgd, flags) NULL#define prepare_hugepage_range (file, addr, len) (-EINVAL)
mm/gup.c +12 -1
@@ -188,6 +188,17 @@ static struct page *follow_page_pte(struct vm_area_struct *vma,spinlock_t *ptl;pte_t *ptep, pte; +/* +* Considering PTE level hugetlb, like continuous-PTE hugetlb on +* ARM64 architecture. +*/ +if (is_vm_hugetlb_page (vma)) { + page =follow_huge_pmd_pte (vma, address, flags); +if (page) +return page; +return no_page_table (vma, flags); + } + retry:if (unlikely (pmd_bad (*pmd)))return no_page_table (vma, flags);
@@ -333,7 +344,7 @@ static struct page *follow_pmd_mask(struct vm_area_struct *vma,if (pmd_none (pmdval))return no_page_table (vma, flags);if (pmd_huge (pmdval) && vma->vm_flags &VM_HUGETLB ) { - page =follow_huge_pmd (mm, address, pmd, flags); + page =follow_huge_pmd_pte (vma, address, flags);if (page)return page;return no_page_table (vma, flags);
mm/hugetlb.c +15 -15
@@ -5157,30 +5157,30 @@ follow_huge_pd(struct vm_area_struct *vma, }struct page *__weak -follow_huge_pmd (struct mm_struct *mm,unsigned long address, -pmd_t *pmd,int flags) +follow_huge_pmd_pte (struct vm_area_struct *vma,unsigned long address,int flags) { +struct hstate *h =hstate_vma (vma); +struct mm_struct *mm = vma->vm_mm;struct page *page =NULL ;spinlock_t *ptl; -pte_t pte; +pte_t *ptep, pte; + retry: - ptl =pmd_lockptr (mm, pmd); -spin_lock (ptl); -/* -* make sure that the address range covered by this pmd is not -* unmapped from other threads. -*/ -if (!pmd_huge (*pmd)) - goto out; - pte =huge_ptep_get ((pte_t *)pmd); + ptep =huge_pte_offset (mm, address,huge_page_size (h)); +if (!ptep) +return NULL ; + + ptl =huge_pte_lock (h, mm, ptep); + pte =huge_ptep_get (ptep);if (pte_present (pte)) { - page =pmd_page (*pmd) + ((address & ~PMD_MASK ) >>PAGE_SHIFT ); + page =pte_page (pte) + + ((address & ~huge_page_mask (h)) >>PAGE_SHIFT );if (flags &FOLL_GET )get_page (page); }else {if (is_hugetlb_entry_migration (pte)) {spin_unlock (ptl); -__migration_entry_wait (mm, (pte_t *)pmd, ptl); +__migration_entry_wait (mm, ptep, ptl); goto retry; }/*
@@ -5188,7 +5188,7 @@ follow_huge_pmd(struct mm_struct *mm, unsigned long address,* follow_page_mask(). */ } -out: +spin_unlock (ptl);return page; }
net/core/filter.c +2 -0
@@ -6196,6 +6196,8 @@ tc_cls_act_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)return &bpf_skb_adjust_room_proto;case BPF_FUNC_skb_change_tail:return &bpf_skb_change_tail_proto; +case BPF_FUNC_skb_change_head: +return &bpf_skb_change_head_proto;case BPF_FUNC_skb_get_tunnel_key:return &bpf_skb_get_tunnel_key_proto;case BPF_FUNC_skb_set_tunnel_key:
sound/soc/soc-ops.c +8 -1
@@ -458,8 +458,15 @@ int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol,return err;if (snd_soc_volsw_is_stereo (mc)) { + val2 = ucontrol->value.integer.value[1 ]; + +if (mc->platform_max && val2 > mc->platform_max) +return -EINVAL ; +if (val2 > max) +return -EINVAL ; + val_mask = mask << rshift; - val2 = (ucontrol->value.integer.value[1 ] + min) & mask; + val2 = (val2 + min) & mask; val2 = val2 << rshift; err = snd_soc_component_update_bits(component, reg2, val_mask,