diff options
author | Alice Ferrazzi <alicef@gentoo.org> | 2021-02-26 19:00:46 +0900 |
---|---|---|
committer | Alice Ferrazzi <alicef@gentoo.org> | 2021-02-26 19:01:00 +0900 |
commit | 2f51bc969051457c56542367d6f1d45ffec4daa0 (patch) | |
tree | 9332a1efce329e3bce332d84954a33b633a89a5e | |
parent | Remove shiftfs, broken patch, I will fix soon (diff) | |
download | linux-patches-2f51bc969051457c56542367d6f1d45ffec4daa0.tar.gz linux-patches-2f51bc969051457c56542367d6f1d45ffec4daa0.tar.bz2 linux-patches-2f51bc969051457c56542367d6f1d45ffec4daa0.zip |
Linux patch 5.4.1015.4-104
Signed-off-by: Alice Ferrazzi <alicef@gentoo.org>
-rw-r--r-- | 0000_README | 4 | ||||
-rw-r--r-- | 1100_linux-5.4.101.patch | 397 |
2 files changed, 401 insertions, 0 deletions
diff --git a/0000_README b/0000_README index 23e242b5..aab74c67 100644 --- a/0000_README +++ b/0000_README @@ -443,6 +443,10 @@ Patch: 1099_linux-5.4.100.patch From: http://www.kernel.org Desc: Linux 5.4.100 +Patch: 1100_linux-5.4.101.patch +From: http://www.kernel.org +Desc: Linux 5.4.101 + Patch: 1500_XATTR_USER_PREFIX.patch From: https://bugs.gentoo.org/show_bug.cgi?id=470644 Desc: Support for namespace user.pax.* on tmpfs. diff --git a/1100_linux-5.4.101.patch b/1100_linux-5.4.101.patch new file mode 100644 index 00000000..87f00746 --- /dev/null +++ b/1100_linux-5.4.101.patch @@ -0,0 +1,397 @@ +diff --git a/Makefile b/Makefile +index d0d4beb4f8373..f56442751d2c3 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,7 +1,7 @@ + # SPDX-License-Identifier: GPL-2.0 + VERSION = 5 + PATCHLEVEL = 4 +-SUBLEVEL = 100 ++SUBLEVEL = 101 + EXTRAVERSION = + NAME = Kleptomaniac Octopus + +diff --git a/arch/arm64/boot/dts/nvidia/tegra210.dtsi b/arch/arm64/boot/dts/nvidia/tegra210.dtsi +index 078d2506365c0..8a02b26d07cd4 100644 +--- a/arch/arm64/boot/dts/nvidia/tegra210.dtsi ++++ b/arch/arm64/boot/dts/nvidia/tegra210.dtsi +@@ -917,6 +917,7 @@ + <&tegra_car 128>, /* hda2hdmi */ + <&tegra_car 111>; /* hda2codec_2x */ + reset-names = "hda", "hda2hdmi", "hda2codec_2x"; ++ power-domains = <&pd_sor>; + status = "disabled"; + }; + +diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c +index d2ecc9c452554..263eca119ff0f 100644 +--- a/drivers/hid/hid-core.c ++++ b/drivers/hid/hid-core.c +@@ -90,7 +90,7 @@ EXPORT_SYMBOL_GPL(hid_register_report); + * Register a new field for this report. + */ + +-static struct hid_field *hid_register_field(struct hid_report *report, unsigned usages, unsigned values) ++static struct hid_field *hid_register_field(struct hid_report *report, unsigned usages) + { + struct hid_field *field; + +@@ -101,7 +101,7 @@ static struct hid_field *hid_register_field(struct hid_report *report, unsigned + + field = kzalloc((sizeof(struct hid_field) + + usages * sizeof(struct hid_usage) + +- values * sizeof(unsigned)), GFP_KERNEL); ++ usages * sizeof(unsigned)), GFP_KERNEL); + if (!field) + return NULL; + +@@ -300,7 +300,7 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign + usages = max_t(unsigned, parser->local.usage_index, + parser->global.report_count); + +- field = hid_register_field(report, usages, parser->global.report_count); ++ field = hid_register_field(report, usages); + if (!field) + return 0; + +diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_pci_id_tbl.h b/drivers/net/ethernet/chelsio/cxgb4/t4_pci_id_tbl.h +index 0c5373462cedb..0b1b5f9c67d47 100644 +--- a/drivers/net/ethernet/chelsio/cxgb4/t4_pci_id_tbl.h ++++ b/drivers/net/ethernet/chelsio/cxgb4/t4_pci_id_tbl.h +@@ -219,6 +219,7 @@ CH_PCI_DEVICE_ID_TABLE_DEFINE_BEGIN + CH_PCI_ID_TABLE_FENTRY(0x6089), /* Custom T62100-KR */ + CH_PCI_ID_TABLE_FENTRY(0x608a), /* Custom T62100-CR */ + CH_PCI_ID_TABLE_FENTRY(0x608b), /* Custom T6225-CR */ ++ CH_PCI_ID_TABLE_FENTRY(0x6092), /* Custom T62100-CR-LOM */ + CH_PCI_DEVICE_ID_TABLE_DEFINE_END; + + #endif /* __T4_PCI_ID_TBL_H__ */ +diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c +index 72a3a5dc51319..5a1d21aae2a9e 100644 +--- a/drivers/net/usb/qmi_wwan.c ++++ b/drivers/net/usb/qmi_wwan.c +@@ -1354,6 +1354,7 @@ static const struct usb_device_id products[] = { + {QMI_FIXED_INTF(0x1e2d, 0x0082, 5)}, /* Cinterion PHxx,PXxx (2 RmNet) */ + {QMI_FIXED_INTF(0x1e2d, 0x0083, 4)}, /* Cinterion PHxx,PXxx (1 RmNet + USB Audio)*/ + {QMI_QUIRK_SET_DTR(0x1e2d, 0x00b0, 4)}, /* Cinterion CLS8 */ ++ {QMI_FIXED_INTF(0x1e2d, 0x00b7, 0)}, /* Cinterion MV31 RmNet */ + {QMI_FIXED_INTF(0x413c, 0x81a2, 8)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */ + {QMI_FIXED_INTF(0x413c, 0x81a3, 8)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */ + {QMI_FIXED_INTF(0x413c, 0x81a4, 8)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */ +diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c +index c1592403222f5..239443ce52001 100644 +--- a/drivers/usb/core/quirks.c ++++ b/drivers/usb/core/quirks.c +@@ -391,6 +391,9 @@ static const struct usb_device_id usb_quirk_list[] = { + /* X-Rite/Gretag-Macbeth Eye-One Pro display colorimeter */ + { USB_DEVICE(0x0971, 0x2000), .driver_info = USB_QUIRK_NO_SET_INTF }, + ++ /* ELMO L-12F document camera */ ++ { USB_DEVICE(0x09a1, 0x0028), .driver_info = USB_QUIRK_DELAY_CTRL_MSG }, ++ + /* Broadcom BCM92035DGROM BT dongle */ + { USB_DEVICE(0x0a5c, 0x2021), .driver_info = USB_QUIRK_RESET_RESUME }, + +@@ -415,6 +418,9 @@ static const struct usb_device_id usb_quirk_list[] = { + { USB_DEVICE(0x10d6, 0x2200), .driver_info = + USB_QUIRK_STRING_FETCH_255 }, + ++ /* novation SoundControl XL */ ++ { USB_DEVICE(0x1235, 0x0061), .driver_info = USB_QUIRK_RESET_RESUME }, ++ + /* Huawei 4G LTE module */ + { USB_DEVICE(0x12d1, 0x15bb), .driver_info = + USB_QUIRK_DISCONNECT_SUSPEND }, +@@ -495,9 +501,6 @@ static const struct usb_device_id usb_quirk_list[] = { + /* INTEL VALUE SSD */ + { USB_DEVICE(0x8086, 0xf1a5), .driver_info = USB_QUIRK_RESET_RESUME }, + +- /* novation SoundControl XL */ +- { USB_DEVICE(0x1235, 0x0061), .driver_info = USB_QUIRK_RESET_RESUME }, +- + { } /* terminating entry must be last */ + }; + +diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c +index ab9eeb5ff8e57..67c2e6487479a 100644 +--- a/fs/cifs/connect.c ++++ b/fs/cifs/connect.c +@@ -4198,6 +4198,7 @@ int cifs_setup_cifs_sb(struct smb_vol *pvolume_info, + cifs_sb->prepath = kstrdup(pvolume_info->prepath, GFP_KERNEL); + if (cifs_sb->prepath == NULL) + return -ENOMEM; ++ cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_USE_PREFIX_PATH; + } + + return 0; +diff --git a/fs/dax.c b/fs/dax.c +index cc56313c6b3b9..3b0e5da96d541 100644 +--- a/fs/dax.c ++++ b/fs/dax.c +@@ -794,12 +794,12 @@ static void dax_entry_mkclean(struct address_space *mapping, pgoff_t index, + address = pgoff_address(index, vma); + + /* +- * Note because we provide range to follow_pte_pmd it will +- * call mmu_notifier_invalidate_range_start() on our behalf +- * before taking any lock. ++ * follow_invalidate_pte() will use the range to call ++ * mmu_notifier_invalidate_range_start() on our behalf before ++ * taking any lock. + */ +- if (follow_pte_pmd(vma->vm_mm, address, &range, +- &ptep, &pmdp, &ptl)) ++ if (follow_invalidate_pte(vma->vm_mm, address, &range, &ptep, ++ &pmdp, &ptl)) + continue; + + /* +diff --git a/fs/ntfs/inode.c b/fs/ntfs/inode.c +index 84933a0af49b6..672feb96e250e 100644 +--- a/fs/ntfs/inode.c ++++ b/fs/ntfs/inode.c +@@ -628,6 +628,12 @@ static int ntfs_read_locked_inode(struct inode *vi) + } + a = ctx->attr; + /* Get the standard information attribute value. */ ++ if ((u8 *)a + le16_to_cpu(a->data.resident.value_offset) ++ + le32_to_cpu(a->data.resident.value_length) > ++ (u8 *)ctx->mrec + vol->mft_record_size) { ++ ntfs_error(vi->i_sb, "Corrupt standard information attribute in inode."); ++ goto unm_err_out; ++ } + si = (STANDARD_INFORMATION*)((u8*)a + + le16_to_cpu(a->data.resident.value_offset)); + +diff --git a/include/linux/mm.h b/include/linux/mm.h +index 7249cf58f78d1..c63e4b38b7fe0 100644 +--- a/include/linux/mm.h ++++ b/include/linux/mm.h +@@ -1466,9 +1466,11 @@ void free_pgd_range(struct mmu_gather *tlb, unsigned long addr, + unsigned long end, unsigned long floor, unsigned long ceiling); + int copy_page_range(struct mm_struct *dst, struct mm_struct *src, + struct vm_area_struct *vma); +-int follow_pte_pmd(struct mm_struct *mm, unsigned long address, +- struct mmu_notifier_range *range, +- pte_t **ptepp, pmd_t **pmdpp, spinlock_t **ptlp); ++int follow_invalidate_pte(struct mm_struct *mm, unsigned long address, ++ struct mmu_notifier_range *range, pte_t **ptepp, ++ pmd_t **pmdpp, spinlock_t **ptlp); ++int follow_pte(struct mm_struct *mm, unsigned long address, ++ pte_t **ptepp, spinlock_t **ptlp); + int follow_pfn(struct vm_area_struct *vma, unsigned long address, + unsigned long *pfn); + int follow_phys(struct vm_area_struct *vma, unsigned long address, +diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c +index 2c248c4f6419c..e6a43c0fdee88 100644 +--- a/kernel/bpf/verifier.c ++++ b/kernel/bpf/verifier.c +@@ -9005,7 +9005,7 @@ static int fixup_bpf_calls(struct bpf_verifier_env *env) + bool isdiv = BPF_OP(insn->code) == BPF_DIV; + struct bpf_insn *patchlet; + struct bpf_insn chk_and_div[] = { +- /* Rx div 0 -> 0 */ ++ /* [R,W]x div 0 -> 0 */ + BPF_RAW_INSN((is64 ? BPF_JMP : BPF_JMP32) | + BPF_JNE | BPF_K, insn->src_reg, + 0, 2, 0), +@@ -9014,16 +9014,18 @@ static int fixup_bpf_calls(struct bpf_verifier_env *env) + *insn, + }; + struct bpf_insn chk_and_mod[] = { +- /* Rx mod 0 -> Rx */ ++ /* [R,W]x mod 0 -> [R,W]x */ + BPF_RAW_INSN((is64 ? BPF_JMP : BPF_JMP32) | + BPF_JEQ | BPF_K, insn->src_reg, +- 0, 1, 0), ++ 0, 1 + (is64 ? 0 : 1), 0), + *insn, ++ BPF_JMP_IMM(BPF_JA, 0, 0, 1), ++ BPF_MOV32_REG(insn->dst_reg, insn->dst_reg), + }; + + patchlet = isdiv ? chk_and_div : chk_and_mod; + cnt = isdiv ? ARRAY_SIZE(chk_and_div) : +- ARRAY_SIZE(chk_and_mod); ++ ARRAY_SIZE(chk_and_mod) - (is64 ? 2 : 0); + + new_prog = bpf_patch_insn_data(env, i + delta, patchlet, cnt); + if (!new_prog) +diff --git a/mm/memory.c b/mm/memory.c +index 2157bb28117ac..b23831132933a 100644 +--- a/mm/memory.c ++++ b/mm/memory.c +@@ -4222,9 +4222,9 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address) + } + #endif /* __PAGETABLE_PMD_FOLDED */ + +-static int __follow_pte_pmd(struct mm_struct *mm, unsigned long address, +- struct mmu_notifier_range *range, +- pte_t **ptepp, pmd_t **pmdpp, spinlock_t **ptlp) ++int follow_invalidate_pte(struct mm_struct *mm, unsigned long address, ++ struct mmu_notifier_range *range, pte_t **ptepp, ++ pmd_t **pmdpp, spinlock_t **ptlp) + { + pgd_t *pgd; + p4d_t *p4d; +@@ -4289,31 +4289,33 @@ out: + return -EINVAL; + } + +-static inline int follow_pte(struct mm_struct *mm, unsigned long address, +- pte_t **ptepp, spinlock_t **ptlp) +-{ +- int res; +- +- /* (void) is needed to make gcc happy */ +- (void) __cond_lock(*ptlp, +- !(res = __follow_pte_pmd(mm, address, NULL, +- ptepp, NULL, ptlp))); +- return res; +-} +- +-int follow_pte_pmd(struct mm_struct *mm, unsigned long address, +- struct mmu_notifier_range *range, +- pte_t **ptepp, pmd_t **pmdpp, spinlock_t **ptlp) ++/** ++ * follow_pte - look up PTE at a user virtual address ++ * @mm: the mm_struct of the target address space ++ * @address: user virtual address ++ * @ptepp: location to store found PTE ++ * @ptlp: location to store the lock for the PTE ++ * ++ * On a successful return, the pointer to the PTE is stored in @ptepp; ++ * the corresponding lock is taken and its location is stored in @ptlp. ++ * The contents of the PTE are only stable until @ptlp is released; ++ * any further use, if any, must be protected against invalidation ++ * with MMU notifiers. ++ * ++ * Only IO mappings and raw PFN mappings are allowed. The mmap semaphore ++ * should be taken for read. ++ * ++ * KVM uses this function. While it is arguably less bad than ``follow_pfn``, ++ * it is not a good general-purpose API. ++ * ++ * Return: zero on success, -ve otherwise. ++ */ ++int follow_pte(struct mm_struct *mm, unsigned long address, ++ pte_t **ptepp, spinlock_t **ptlp) + { +- int res; +- +- /* (void) is needed to make gcc happy */ +- (void) __cond_lock(*ptlp, +- !(res = __follow_pte_pmd(mm, address, range, +- ptepp, pmdpp, ptlp))); +- return res; ++ return follow_invalidate_pte(mm, address, NULL, ptepp, NULL, ptlp); + } +-EXPORT_SYMBOL(follow_pte_pmd); ++EXPORT_SYMBOL_GPL(follow_pte); + + /** + * follow_pfn - look up PFN at a user virtual address +@@ -4323,6 +4325,9 @@ EXPORT_SYMBOL(follow_pte_pmd); + * + * Only IO mappings and raw PFN mappings are allowed. + * ++ * This function does not allow the caller to read the permissions ++ * of the PTE. Do not use it. ++ * + * Return: zero and the pfn at @pfn on success, -ve otherwise. + */ + int follow_pfn(struct vm_area_struct *vma, unsigned long address, +diff --git a/scripts/Makefile b/scripts/Makefile +index 3e86b300f5a10..b4b7d8b58cd68 100644 +--- a/scripts/Makefile ++++ b/scripts/Makefile +@@ -10,6 +10,9 @@ + + HOST_EXTRACFLAGS += -I$(srctree)/tools/include + ++CRYPTO_LIBS = $(shell pkg-config --libs libcrypto 2> /dev/null || echo -lcrypto) ++CRYPTO_CFLAGS = $(shell pkg-config --cflags libcrypto 2> /dev/null) ++ + hostprogs-$(CONFIG_BUILD_BIN2C) += bin2c + hostprogs-$(CONFIG_KALLSYMS) += kallsyms + hostprogs-$(CONFIG_LOGO) += pnmtologo +@@ -23,8 +26,10 @@ hostprogs-$(CONFIG_SYSTEM_EXTRA_CERTIFICATE) += insert-sys-cert + + HOSTCFLAGS_sortextable.o = -I$(srctree)/tools/include + HOSTCFLAGS_asn1_compiler.o = -I$(srctree)/include +-HOSTLDLIBS_sign-file = -lcrypto +-HOSTLDLIBS_extract-cert = -lcrypto ++HOSTCFLAGS_sign-file.o = $(CRYPTO_CFLAGS) ++HOSTLDLIBS_sign-file = $(CRYPTO_LIBS) ++HOSTCFLAGS_extract-cert.o = $(CRYPTO_CFLAGS) ++HOSTLDLIBS_extract-cert = $(CRYPTO_LIBS) + + always := $(hostprogs-y) $(hostprogs-m) + +diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl +index 3f77a5d695c13..0bafed857e171 100755 +--- a/scripts/recordmcount.pl ++++ b/scripts/recordmcount.pl +@@ -268,7 +268,11 @@ if ($arch eq "x86_64") { + + # force flags for this arch + $ld .= " -m shlelf_linux"; +- $objcopy .= " -O elf32-sh-linux"; ++ if ($endian eq "big") { ++ $objcopy .= " -O elf32-shbig-linux"; ++ } else { ++ $objcopy .= " -O elf32-sh-linux"; ++ } + + } elsif ($arch eq "powerpc") { + my $ldemulation; +diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c +index f25b5043cbcae..048b555c5acc9 100644 +--- a/virt/kvm/kvm_main.c ++++ b/virt/kvm/kvm_main.c +@@ -1598,10 +1598,12 @@ static int hva_to_pfn_remapped(struct vm_area_struct *vma, + bool write_fault, bool *writable, + kvm_pfn_t *p_pfn) + { +- unsigned long pfn; ++ kvm_pfn_t pfn; ++ pte_t *ptep; ++ spinlock_t *ptl; + int r; + +- r = follow_pfn(vma, addr, &pfn); ++ r = follow_pte(vma->vm_mm, addr, &ptep, &ptl); + if (r) { + /* + * get_user_pages fails for VM_IO and VM_PFNMAP vmas and does +@@ -1616,14 +1618,19 @@ static int hva_to_pfn_remapped(struct vm_area_struct *vma, + if (r) + return r; + +- r = follow_pfn(vma, addr, &pfn); ++ r = follow_pte(vma->vm_mm, addr, &ptep, &ptl); + if (r) + return r; ++ } + ++ if (write_fault && !pte_write(*ptep)) { ++ pfn = KVM_PFN_ERR_RO_FAULT; ++ goto out; + } + + if (writable) +- *writable = true; ++ *writable = pte_write(*ptep); ++ pfn = pte_pfn(*ptep); + + /* + * Get a reference here because callers of *hva_to_pfn* and +@@ -1638,6 +1645,8 @@ static int hva_to_pfn_remapped(struct vm_area_struct *vma, + */ + kvm_get_pfn(pfn); + ++out: ++ pte_unmap_unlock(ptep, ptl); + *p_pfn = pfn; + return 0; + } |