4.14.84-stable review
Subsystems (5)
Greg Kroah-Hartman
maintainerPATCH 1/62 cifs: dont dereference smb_file_target before null check
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 8c6c9bed8773375b1d54ccca2911ec892c59db5d ]
There is a null check on dst_file->private data which suggests it can be potentially null. However, before this check, pointer smb_file_target is derived from dst_file->private and dereferenced in the call to tlink_tcon, hence there is a potential null pointer deference.
Fix this by assigning smb_file_target and target_tcon after the null pointer sanity checks.
Detected by CoverityScan, CID#1475302 ("Dereference before null check")
--- fs/cifs/cifsfs.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
fs/cifs/cifsfs.c +5 -2
@@ -933,8 +933,8 @@ static int cifs_clone_file_range(struct file *src_file, loff_t off,struct inode *src_inode =file_inode (src_file);struct inode *target_inode =file_inode (dst_file);struct cifsFileInfo *smb_file_src = src_file->private_data; -struct cifsFileInfo *smb_file_target = dst_file->private_data; -struct cifs_tcon *target_tcon =tlink_tcon (smb_file_target->tlink); +struct cifsFileInfo *smb_file_target; +struct cifs_tcon *target_tcon;unsigned int xid;int rc;
@@ -948,6 +948,9 @@ static int cifs_clone_file_range(struct file *src_file, loff_t off, goto out; } + smb_file_target = dst_file->private_data; + target_tcon =tlink_tcon (smb_file_target->tlink); +/* * Note: cifs case is easier than btrfs since server responsible for * checks for proper open modes and file type and if it wants
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 2/62 cifs: fix return value for cifs_listxattr
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 0c5d6cb6643f48ad3775322f3ebab6c7eb67484e ]
If the application buffer was too small to fit all the names we would still count the number of bytes and return this for listxattr. This would then trigger a BUG in usercopy.c
Fix the computation of the size so that we return -ERANGE correctly when the buffer is too small.
This fixes the kernel BUG for xfstest generic/377
--- fs/cifs/smb2ops.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
fs/cifs/smb2ops.c +6 -5
@@ -441,6 +441,7 @@ move_smb2_ea_to_cifs(char *dst, size_t dst_size,int rc =0 ;unsigned int ea_name_len = ea_name ?strlen (ea_name) :0 ;char *name, *value; +size_t buf_size = dst_size;size_t name_len, value_len, user_name_len;while (src_size >0 ) {
@@ -476,9 +477,10 @@ move_smb2_ea_to_cifs(char *dst, size_t dst_size,/* 'user.' plus a terminating null */ user_name_len =5 +1 + name_len; - rc += user_name_len; - -if (dst_size >= user_name_len) { +if (buf_size ==0 ) { +/* skip copy - calc size only */ + rc += user_name_len; + }else if (dst_size >= user_name_len) { dst_size -= user_name_len;memcpy (dst,"user." ,5 ); dst +=5 ;
@@ -486,8 +488,7 @@ move_smb2_ea_to_cifs(char *dst, size_t dst_size, dst += name_len; *dst =0 ; ++dst; - }else if (dst_size ==0 ) { -/* skip copy - calc size only */ + rc += user_name_len; }else {/* stop before overrun buffer */ rc = -ERANGE ;
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 3/62 arm64: kprobe: make page to RO mode when allocate it
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 966866892cf89d606544bca22d584ba2ef9ec208 ]
Commit 1404d6f13e47 ("arm64: dump: Add checking for writable and exectuable pages") has successfully identified code that leaves a page with W+X permissions.
[ 3.245140] arm64/mm: Found insecure W+X mapping at address (____ptrval____)/0xffff000000d90000 [ 3.245771] WARNING: CPU: 0 PID: 1 at ../arch/arm64/mm/dump.c:232 note_page+0x410/0x420 [ 3.246141] Modules linked in: [ 3.246653] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.19.0-rc5-next-20180928-00001-ge70ae259b853-dirty #62 [ 3.247008] Hardware name: linux,dummy-virt (DT) [ 3.247347] pstate: 80000005 (Nzcv daif -PAN -UAO) [ 3.247623] pc : note_page+0x410/0x420 [ 3.247898] lr : note_page+0x410/0x420 [ 3.248071] sp : ffff00000804bcd0 [ 3.248254] x29: ffff00000804bcd0 x28: ffff000009274000 [ 3.248578] x27: ffff00000921a000 x26: ffff80007dfff000 [ 3.248845] x25: ffff0000093f5000 x24: ffff000009526f6a [ 3.249109] x23: 0000000000000004 x22: ffff000000d91000 [ 3.249396] x21: ffff000000d90000 x20: 0000000000000000 [ 3.249661] x19: ffff00000804bde8 x18: 0000000000000400 [ 3.249924] x17: 0000000000000000 x16: 0000000000000000 [ 3.250271] x15: ffffffffffffffff x14: 295f5f5f5f6c6176 [ 3.250594] x13: 7274705f5f5f5f28 x12: 2073736572646461 [ 3.250941] x11: 20746120676e6970 x10: 70616d20582b5720 [ 3.251252] x9 : 6572756365736e69 x8 : 3039643030303030 [ 3.251519] x7 : 306666666678302f x6 : ffff0000095467b2 [ 3.251802] x5 : 0000000000000000 x4 : 0000000000000000 [ 3.252060] x3 : 0000000000000000 x2 : ffffffffffffffff [ 3.252323] x1 : 4d151327adc50b00 x0 : 0000000000000000 [ 3.252664] Call trace: [ 3.252953] note_page+0x410/0x420 [ 3.253186] walk_pgd+0x12c/0x238 [ 3.253417] ptdump_check_wx+0x68/0xf8 [ 3.253637] mark_rodata_ro+0x68/0x98 [ 3.253847] kernel_init+0x38/0x160 [ 3.254103] ret_from_fork+0x10/0x18
kprobes allocates a writable executable page with module_alloc() in order to store executable code.
Reworked to that when allocate a page it sets mode RO. Inspired by commit 63fef14fc98a ("kprobes/x86: Make insn buffer always ROX and use text_poke()").
--- arch/arm64/kernel/probes/kprobes.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-)
arch/arm64/kernel/probes/kprobes.c +20 -7
@@ -23,7 +23,9 @@#include <linux/slab.h> #include <linux/stop_machine.h> #include <linux/sched/debug.h> +#include <linux/set_memory.h> #include <linux/stringify.h> +#include <linux/vmalloc.h> #include <asm/traps.h> #include <asm/ptrace.h> #include <asm/cacheflush.h>
@@ -42,10 +44,21 @@ DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk);static void __kprobes post_kprobe_handler (struct kprobe_ctlblk *,struct pt_regs *); +static int __kprobes patch_text (kprobe_opcode_t *addr,u32 opcode) +{ +void *addrs[1 ]; +u32 insns[1 ]; + + addrs[0 ] = addr; + insns[0 ] = opcode; + +return aarch64_insn_patch_text (addrs, insns,1 ); +} +static void __kprobes arch_prepare_ss_slot (struct kprobe *p) {/* prepare insn slot */ - p->ainsn.api.insn[0 ] =cpu_to_le32 (p->opcode); +patch_text (p->ainsn.api.insn, p->opcode); flush_icache_range((uintptr_t) (p->ainsn.api.insn), (uintptr_t) (p->ainsn.api.insn) +
@@ -118,15 +131,15 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p)return 0 ; } -static int __kprobes patch_text (kprobe_opcode_t *addr,u32 opcode) +void *alloc_insn_page (void ) { -void *addrs[1 ]; -u32 insns[1 ]; +void *page; - addrs[0 ] = (void *)addr; - insns[0 ] = (u32 )opcode; + page =vmalloc_exec (PAGE_SIZE ); +if (page) +set_memory_ro ((unsigned long )page,1 ); -return aarch64_insn_patch_text (addrs, insns,1 ); +return page; }/* arm kprobe: install breakpoint in text */
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 4/62 nvme-pci: fix conflicting p2p resource adds
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 9fe5c59ff6a1e5e26a39b75489a1420e7eaaf0b1 ]
The nvme pci driver had been adding its CMB resource to the P2P DMA subsystem everytime on on a controller reset. This results in the following warning:
------------[ cut here ]------------
nvme 0000:00:03.0: Conflicting mapping in same section
WARNING: CPU: 7 PID: 81 at kernel/memremap.c:155 devm_memremap_pages+0xa6/0x380
...
Call Trace:
pci_p2pdma_add_resource+0x153/0x370
nvme_reset_work+0x28c/0x17b1 [nvme]
? add_timer+0x107/0x1e0
? dequeue_entity+0x81/0x660
? dequeue_entity+0x3b0/0x660
? pick_next_task_fair+0xaf/0x610
? __switch_to+0xbc/0x410
process_one_work+0x1cf/0x350
worker_thread+0x215/0x3d0
? process_one_work+0x350/0x350
kthread+0x107/0x120
? kthread_park+0x80/0x80
ret_from_fork+0x1f/0x30
---[ end trace f7ea76ac6ee72727 ]---
nvme nvme0: failed to register the CMBThis patch fixes this by registering the CMB with P2P only once.
--- drivers/nvme/host/pci.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/nvme/host/pci.c +4 -1
@@ -1546,6 +1546,9 @@ static void __iomem *nvme_map_cmb(structvoid __iomem *cmb;int bar; +if (dev->cmb_size) +return NULL ; + dev->cmbsz =readl (dev->bar +NVME_REG_CMBSZ );if (!(NVME_CMB_SZ (dev->cmbsz)))return NULL ;
@@ -2032,7 +2035,6 @@ static void nvme_pci_disable(struct nvme {struct pci_dev *pdev =to_pci_dev (dev->dev); -nvme_release_cmb (dev);pci_free_irq_vectors (pdev);if (pci_is_enabled (pdev)) {
@@ -2432,6 +2434,7 @@ static void nvme_remove(struct pci_dev *nvme_stop_ctrl (&dev->ctrl);nvme_remove_namespaces (&dev->ctrl);nvme_dev_disable (dev, true); +nvme_release_cmb (dev);nvme_free_host_mem (dev);nvme_dev_remove_admin (dev);nvme_free_queues (dev,0 );
Greg Kroah-Hartman
maintainerPATCH 5/62 ixgbe: fix MAC anti-spoofing filter after VFLR
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 6702185c1ffec3421181b5e24491e3fac920cb61 ]
This change resolves a driver bug where the driver is logging a message that says "Spoofed packets detected". This can occur on the PF (host) when a VF has VLAN+MACVLAN enabled and is re-started with a different MAC address.
MAC and VLAN anti-spoofing filters are to be enabled together.
--- drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c +3 -1
@@ -760,8 +760,10 @@ static inline void ixgbe_vf_reset_event(struct ixgbe_adapter *adapter, u32 vf)ixgbe_set_vmvir (adapter, vfinfo->pf_vlan, adapter->default_up, vf); -if (vfinfo->spoofchk_enabled) +if (vfinfo->spoofchk_enabled) { hw->mac.ops.set_vlan_anti_spoofing (hw, true, vf); + hw->mac.ops.set_mac_anti_spoofing (hw, true, vf); + } }/* reset multicast table array for vf */
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 6/62 reiserfs: propagate errors from fill_with_dentries() properly
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit b10298d56c9623f9b173f19959732d3184b35f4f ]
fill_with_dentries() failed to propagate errors up to reiserfs_for_each_xattr() properly. Plumb them through.
Note that reiserfs_for_each_xattr() is only used by reiserfs_delete_xattrs() and reiserfs_chown_xattrs(). The result of reiserfs_delete_xattrs() is discarded anyway, the only difference there is whether a warning is printed to dmesg. The result of reiserfs_chown_xattrs() does matter because it can block chowning of the file to which the xattrs belong; but either way, the resulting state can have misaligned ownership, so my patch doesn't improve things greatly.
Credit for making me look at this code goes to Al Viro, who pointed out that the ->actor calling convention is suboptimal and should be changed.
--- fs/reiserfs/xattr.c | 7 +++++++ 1 file changed, 7 insertions(+)
fs/reiserfs/xattr.c +7 -0
@@ -185,6 +185,7 @@ struct reiserfs_dentry_buf {struct dir_context ctx;struct dentry *xadir;int count; +int err;struct dentry *dentries[8 ]; };
@@ -207,6 +208,7 @@ fill_with_dentries(struct dir_context *ctx, const char *name, int namelen, dentry =lookup_one_len (name, dbuf->xadir, namelen);if (IS_ERR (dentry)) { + dbuf->err =PTR_ERR (dentry);return PTR_ERR (dentry); }else if (d_really_is_negative (dentry)) {/* A directory entry exists, but no file? */
@@ -215,6 +217,7 @@ fill_with_dentries(struct dir_context *ctx, const char *name, int namelen,"not found for file %pd.\n" , dentry, dbuf->xadir);dput (dentry); + dbuf->err = -EIO ;return -EIO ; }
@@ -262,6 +265,10 @@ static int reiserfs_for_each_xattr(struct inode *inode, err =reiserfs_readdir_inode (d_inode (dir), &buf.ctx);if (err)break ; +if (buf.err) { + err = buf.err; +break ; + }if (!buf.count)break ;for (i =0 ; !err && i < buf.count && buf.dentries[i]; i++) {
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 7/62 hfs: prevent btree data loss on root split
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit d057c036672f33d43a5f7344acbb08cf3a8a0c09 ]
This bug is triggered whenever hfs_brec_update_parent() needs to split the root node. The height of the btree is not increased, which leaves the new node orphaned and its records lost. It is not possible for this to happen on a valid hfs filesystem because the index nodes have fixed length keys.
For reasons I ignore, the hfs module does have support for a number of hfsplus features. A corrupt btree header may report variable length keys and trigger this bug, so it's better to fix it.
--- fs/hfs/brec.c | 4 ++++ 1 file changed, 4 insertions(+)
fs/hfs/brec.c +4 -0
@@ -425,6 +425,10 @@ skip:if (new_node) {__be32 cnid; +if (!new_node->parent) { +hfs_btree_inc_height (tree); + new_node->parent = tree->root; + } fd->bnode =hfs_bnode_find (tree, new_node->parent);/* create index key and entry */ hfs_bnode_read_key (new_node, fd->search_key,14 );
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 8/62 hfsplus: prevent btree data loss on root split
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 0a3021d4f5295aa073c7bf5c5e4de60a2e292578 ]
Creating, renaming or deleting a file may cause catalog corruption and data loss. This bug is randomly triggered by xfstests generic/027, but here is a faster reproducer:
truncate -s 50M fs.iso
mkfs.hfsplus fs.iso
mount fs.iso /mnt
i=100
while [ $i -le 150 ]; do
touch /mnt/$i &>/dev/null
((++i))
done
i=100
while [ $i -le 150 ]; do
mv /mnt/$i /mnt/$(perl -e "print $i x82") &>/dev/null
((++i))
done
umount /mnt
fsck.hfsplus -n fs.isoThe bug is triggered whenever hfs_brec_update_parent() needs to split the root node. The height of the btree is not increased, which leaves the new node orphaned and its records lost.
--- fs/hfsplus/brec.c | 4 ++++ 1 file changed, 4 insertions(+)
fs/hfsplus/brec.c +4 -0
@@ -428,6 +428,10 @@ skip:if (new_node) {__be32 cnid; +if (!new_node->parent) { +hfs_btree_inc_height (tree); + new_node->parent = tree->root; + } fd->bnode =hfs_bnode_find (tree, new_node->parent);/* create index key and entry */ hfs_bnode_read_key (new_node, fd->search_key,14 );
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 9/62 um: Give start_idle_thread() a return code
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 7ff1e34bbdc15acab823b1ee4240e94623d50ee8 ]
Fixes:arch/um/os-Linux/skas/process.c:613:1: warning: control reaches end of non-void function [-Wreturn-type]
longjmp() never returns but gcc still warns that the end of the function can be reached.
Add a return code and debug aid to detect this impossible case.
--- arch/um/os-Linux/skas/process.c | 5 +++++ 1 file changed, 5 insertions(+)
arch/um/os-Linux/skas/process.c +5 -0
@@ -610,6 +610,11 @@ int start_idle_thread(void *stack, jmp_buf *switch_buf)fatal_sigsegv (); }longjmp (*switch_buf,1 ); + +/* unreachable */ +printk (UM_KERN_ERR "impossible long jump!" ); +fatal_sigsegv (); +return 0 ; }void initial_thread_cb_skas (void (*proc)(void *),void *arg)
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 10/62 drm/edid: Add 6 bpc quirk for BOE panel.
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 922dceff8dc1fb4dafc9af78139ba65671408103 ]
BOE panel (ID: 0x0771) that reports "DFP 1.x compliant TMDS". But it's 6bpc panel only instead of 8 bpc.
Add panel ID to edid quirk list and set 6 bpc as default to work around this issue.
--- drivers/gpu/drm/drm_edid.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/gpu/drm/drm_edid.c +3 -0
@@ -120,6 +120,9 @@ static const struct edid_quirk {/* SDC panel of Lenovo B50-80 reports 8 bpc, but is a 6 bpc panel */ { "SDC", 0x3652, EDID_QUIRK_FORCE_6BPC }, +/* BOE model 0x0771 reports 8 bpc, but is a 6 bpc panel */ + { "BOE", 0x0771, EDID_QUIRK_FORCE_6BPC }, +/* Belinea 10 15 55 */ { "MAX", 1516, EDID_QUIRK_PREFER_LARGE_60 }, { "MAX", 0x77e, EDID_QUIRK_PREFER_LARGE_60 },
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 11/62 platform/x86: intel_telemetry: report debugfs failure
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 8d98b1ef368feeb7720b8b9b6f3bd93f2ad892bc ]
On some Goldmont based systems such as ASRock J3455M the BIOS may not enable the IPC1 device that provides access to the PMC and PUNIT. In such scenarios, the IOSS and PSS resources from the platform device can not be obtained and result in a invalid telemetry_plt_config which is an internal data structure that holds platform config and is maintained by the telemetry platform driver.
This is also applicable to the platforms where the BIOS supports IPC1 device under debug configurations but IPC1 is disabled by user or the policy.
This change allows user to know the reason for not seeing entries under /sys/kernel/debug/telemetry/* when there is no apparent failure at boot.
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=198779
--- drivers/platform/x86/intel_telemetry_debugfs.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
drivers/platform/x86/intel_telemetry_debugfs.c +6 -2
@@ -968,12 +968,16 @@ static int __init telemetry_debugfs_init(void) debugfs_conf = (struct telemetry_debugfs_conf *)id->driver_data; err =telemetry_pltconfig_valid (); -if (err <0 ) +if (err <0 ) { +pr_info ("Invalid pltconfig, ensure IPC1 device is enabled in BIOS\n" );return -ENODEV ; + } err =telemetry_debugfs_check_evts (); -if (err <0 ) +if (err <0 ) { +pr_info ("telemetry_debugfs_check_evts failed\n" );return -EINVAL ; + }register_pm_notifier (&pm_notifier);
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 12/62 clk: fixed-rate: fix of_node_get-put imbalance
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 52091c256bdcad0d01e2852a63f19cd2cce6af96 ]
When the fixed rate clock is created by devicetree, of_clk_add_provider is called. Add a call to of_clk_del_provider in the remove function to balance it out.
--- drivers/clk/clk-fixed-rate.c | 1 + 1 file changed, 1 insertion(+)
drivers/clk/clk-fixed-rate.c +1 -0
@@ -200,6 +200,7 @@ static int of_fixed_clk_remove(struct platform_device *pdev) {struct clk *clk =platform_get_drvdata (pdev); +of_clk_del_provider (pdev->dev.of_node);clk_unregister_fixed_rate (clk);return 0 ;
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 13/62 perf symbols: Set PLT entry/header sizes properly on Sparc
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit d6afa561e1471ccfdaf7191230c0c59a37e45a5b ]
Using the sh_entsize for both values isn't correct. It happens to be correct on x86...
For both 32-bit and 64-bit sparc, there are four PLT entries in the PLT section.
--- tools/perf/util/symbol-elf.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
tools/perf/util/symbol-elf.c +11 -1
@@ -338,7 +338,17 @@ int dso__synthesize_plt_symbols(struct dso *dso, struct symsrc *ss, struct map * plt_entry_size =16 ;break ; -default :/* FIXME: s390/alpha/mips/parisc/poperpc/sh/sparc/xtensa need to be checked */ +case EM_SPARC : + plt_header_size =48 ; + plt_entry_size =12 ; +break ; + +case EM_SPARCV9 : + plt_header_size =128 ; + plt_entry_size =32 ; +break ; + +default :/* FIXME: s390/alpha/mips/parisc/poperpc/sh/xtensa need to be checked */ plt_header_size = shdr_plt.sh_entsize; plt_entry_size = shdr_plt.sh_entsize;break ;
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 14/62 fs/exofs: fix potential memory leak in mount option parsing
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 515f1867addaba49c1c6ac73abfaffbc192c1db4 ]
There are some cases can cause memory leak when parsing option 'osdname'.
--- fs/exofs/super.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
fs/exofs/super.c +4 -1
@@ -100,6 +100,7 @@ static int parse_options(char *options, struct exofs_mountopt *opts) token =match_token (p, tokens, args);switch (token) {case Opt_name: +kfree (opts->dev_name); opts->dev_name =match_strdup (&args[0 ]);if (unlikely (!opts->dev_name)) {EXOFS_ERR ("Error allocating dev_name" );
@@ -863,8 +864,10 @@ static struct dentry *exofs_mount(struct file_system_type *type,int ret; ret =parse_options (data, &opts); -if (ret) +if (ret) { +kfree (opts.dev_name);return ERR_PTR (ret); + }if (!opts.dev_name) opts.dev_name = dev_name;
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 15/62 clk: samsung: exynos5420: Enable PERIS clocks for suspend
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit b33228029d842269e17bba591609e83ed422005d ]
Ensure that clocks for core SoC modules (including TZPC0..9 modules) are enabled for suspend/resume cycle. This fixes suspend/resume support on Exynos5422-based Odroid XU3/XU4 boards.
--- drivers/clk/samsung/clk-exynos5420.c | 1 + 1 file changed, 1 insertion(+)
drivers/clk/samsung/clk-exynos5420.c +1 -0
@@ -280,6 +280,7 @@ static const struct samsung_clk_reg_dump exynos5420_set_clksrc[] = { { .offset = GATE_BUS_TOP, .value = 0xffffffff, }, { .offset = GATE_BUS_DISP1, .value = 0xffffffff, }, { .offset = GATE_IP_PERIC, .value = 0xffffffff, }, + { .offset = GATE_IP_PERIS, .value = 0xffffffff, }, }; static int exynos5420_clk_suspend(void)
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 16/62 apparmor: Fix uninitialized value in aa_split_fqname
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 250f2da49cb8e582215a65c03f50e8ddf5cd119c ]
Syzkaller reported a OOB-read with the stacktrace below. This occurs inside __aa_lookupn_ns as n is not initialized. n is obtained from aa_splitn_fqname. In cases where name is invalid, aa_splitn_fqname returns without initializing ns_name and ns_len.
Fix this by always initializing ns_name and ns_len.
__dump_stack lib/dump_stack.c:77 [inline] dump_stack+0x1c4/0x2b4 lib/dump_stack.c:113 print_address_description.cold.8+0x9/0x1ff mm/kasan/report.c:256 kasan_report_error mm/kasan/report.c:354 [inline] kasan_report.cold.9+0x242/0x309 mm/kasan/report.c:412 __asan_report_load1_noabort+0x14/0x20 mm/kasan/report.c:430 memcmp+0xe3/0x160 lib/string.c:861 strnstr+0x4b/0x70 lib/string.c:934 __aa_lookupn_ns+0xc1/0x570 security/apparmor/policy_ns.c:209 aa_lookupn_ns+0x88/0x1e0 security/apparmor/policy_ns.c:240 aa_fqlookupn_profile+0x1b9/0x1010 security/apparmor/policy.c:468 fqlookupn_profile+0x80/0xc0 security/apparmor/label.c:1844 aa_label_strn_parse+0xa3a/0x1230 security/apparmor/label.c:1908 aa_label_parse+0x42/0x50 security/apparmor/label.c:1943 aa_change_profile+0x513/0x3510 security/apparmor/domain.c:1362 apparmor_setprocattr+0xaa4/0x1150 security/apparmor/lsm.c:658 security_setprocattr+0x66/0xc0 security/security.c:1298 proc_pid_attr_write+0x301/0x540 fs/proc/base.c:2555 __vfs_write+0x119/0x9f0 fs/read_write.c:485 vfs_write+0x1fc/0x560 fs/read_write.c:549 ksys_write+0x101/0x260 fs/read_write.c:598 __do_sys_write fs/read_write.c:610 [inline] __se_sys_write fs/read_write.c:607 [inline] __x64_sys_write+0x73/0xb0 fs/read_write.c:607 do_syscall_64+0x1b9/0x820 arch/x86/entry/common.c:290 entry_SYSCALL_64_after_hwframe+0x49/0xbe
--- security/apparmor/lib.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
security/apparmor/lib.c +4 -2
@@ -90,10 +90,12 @@ const char *aa_splitn_fqname(const char *fqname, size_t n, const char **ns_name,const char *end = fqname + n;const char *name =skipn_spaces (fqname, n); -if (!name) -return NULL ; *ns_name =NULL ; *ns_len =0 ; + +if (!name) +return NULL ; +if (name[0 ] ==':' ) {char *split =strnchr (&name[1 ], end - &name[1 ],':' ); *ns_name =skipn_spaces (&name[1 ], end - &name[1 ]);
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 17/62 x86/earlyprintk: Add a force option for pciserial device
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit d2266bbfa9e3e32e3b642965088ca461bd24a94f ]
The "pciserial" earlyprintk variant helps much on many modern x86 platforms, but unfortunately there are still some platforms with PCI UART devices which have the wrong PCI class code. In that case, the current class code check does not allow for them to be used for logging.
Add a sub-option "force" which overrides the class code check and thus the use of such device can be enforced.
[ bp: massage formulations. ]
--- .../admin-guide/kernel-parameters.txt | 6 +++- arch/x86/kernel/early_printk.c | 29 ++++++++++++------- 2 files changed, 24 insertions(+), 11 deletions(-)
Documentation/admin-guide/kernel-parameters.txt +5 -1
@@ -1011,7 +1011,7 @@ earlyprintk=serial[,0x...[,baudrate]] earlyprintk=ttySn[,baudrate] earlyprintk=dbgp[debugController#] - earlyprintk=pciserial,bus:device.function[,baudrate] + earlyprintk=pciserial[,force],bus:device.function[,baudrate] earlyprintk=xdbc[xhciController#] earlyprintk is useful when the kernel crashes before
@@ -1043,6 +1043,10 @@ The sclp output can only be used on s390. + The optional "force" to "pciserial" enables use of a + PCI device even when its classcode is not of the + UART class. + edac_report= [HW,EDAC] Control how to report EDAC event Format: {"on" | "off" | "force"} on: enable EDAC to report H/W event. May be overridden
arch/x86/kernel/early_printk.c +19 -10
@@ -213,8 +213,9 @@ static unsigned int mem32_serial_in(unsigned long addr, int offset)* early_pci_serial_init() * * This function is invoked when the early_printk param starts with "pciserial" -* The rest of the param should be ",B:D.F,baud" where B, D & F describe the -* location of a PCI device that must be a UART device. +* The rest of the param should be "[force],B:D.F,baud", where B, D & F describe +* the location of a PCI device that must be a UART device. "force" is optional +* and overrides the use of an UART device with a wrong PCI class code. */ static __init void early_pci_serial_init (char *s) {
@@ -224,17 +225,23 @@ static __init void early_pci_serial_init(char *s)u32 classcode, bar0;u16 cmdreg;char *e; +int force =0 ; - -/* -* First, part the param to get the BDF values -*/ if (*s ==',' ) ++s;if (*s ==0 )return ; +/* Force the use of an UART device with wrong class code */ +if (!strncmp (s,"force," ,6 )) { + force =1 ; + s +=6 ; + } + +/* +* Part the param to get the BDF values +*/ bus = (u8 )simple_strtoul (s, &e,16 ); s = e;if (*s !=':' )
@@ -253,7 +260,7 @@ static __init void early_pci_serial_init(char *s) s++;/* -* Second, find the device from the BDF +* Find the device from the BDF */ cmdreg =read_pci_config (bus, slot, func,PCI_COMMAND ); classcode =read_pci_config (bus, slot, func,PCI_CLASS_REVISION );
@@ -264,8 +271,10 @@ static __init void early_pci_serial_init(char *s)*/ if (((classcode >>16 !=PCI_CLASS_COMMUNICATION_MODEM ) && (classcode >>16 !=PCI_CLASS_COMMUNICATION_SERIAL )) || - (((classcode >>8 ) &0xff ) !=0x02 ))/* 16550 I/F at BAR0 */ -return ; + (((classcode >>8 ) &0xff ) !=0x02 ))/* 16550 I/F at BAR0 */ { +if (!force) +return ; + }/* * Determine if it is IO or memory mapped
@@ -289,7 +298,7 @@ static __init void early_pci_serial_init(char *s) }/* -* Lastly, initialize the hardware +* Initialize the hardware */ if (*s) {if (strcmp (s,"nocfg" ) ==0 )
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 18/62 platform/x86: acerhdf: Add BIOS entry for Gateway LT31 v1.3307
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 684238d79ad85c5e19a71bb5818e77e329912fbc ]
To fix:
acerhdf: unknown (unsupported) BIOS version Gateway /LT31 /v1.3307 , please report, aborting!
As can be seen in the context, the BIOS registers haven't changed in the previous versions, so the assumption is they won't have changed in this last update for this somewhat older platform either.
--- drivers/platform/x86/acerhdf.c | 1 + 1 file changed, 1 insertion(+)
drivers/platform/x86/acerhdf.c +1 -0
@@ -233,6 +233,7 @@ static const struct bios_settings bios_tbl[] = { {"Gateway", "LT31", "v1.3201", 0x55, 0x58, {0x9e, 0x00}, 0}, {"Gateway", "LT31", "v1.3302", 0x55, 0x58, {0x9e, 0x00}, 0}, {"Gateway", "LT31", "v1.3303t", 0x55, 0x58, {0x9e, 0x00}, 0}, + {"Gateway", "LT31", "v1.3307", 0x55, 0x58, {0x9e, 0x00}, 0},/* Packard Bell */ {"Packard Bell", "DOA150", "v0.3104", 0x55, 0x58, {0x21, 0x00}, 0}, {"Packard Bell", "DOA150", "v0.3105", 0x55, 0x58, {0x20, 0x00}, 0},
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 19/62 arm64: percpu: Initialize ret in the default case
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit b5bb425871186303e6936fa2581521bdd1964a58 ]
Clang warns that if the default case is taken, ret will be uninitialized.
./arch/arm64/include/asm/percpu.h:196:2: warning: variable 'ret' is used uninitialized whenever switch default is taken [-Wsometimes-uninitialized]
default:
^~~~~~~
./arch/arm64/include/asm/percpu.h:200:9: note: uninitialized use occurs
here
return ret;
^~~
./arch/arm64/include/asm/percpu.h:157:19: note: initialize the variable
'ret' to silence this warning
unsigned long ret, loop;
^
= 0This warning appears several times while building the erofs filesystem. While it's not strictly wrong, the BUILD_BUG will prevent this from becoming a true problem. Initialize ret to 0 in the default case right before the BUILD_BUG to silence all of these warnings.
--- arch/arm64/include/asm/percpu.h | 3 +++ 1 file changed, 3 insertions(+)
arch/arm64/include/asm/percpu.h +3 -0
@@ -93,6 +93,7 @@ static inline unsigned long __percpu_##op(void *ptr, \ : [val] "Ir" (val)); \break ; \default : \ + ret =0 ; \BUILD_BUG (); \ } \ \
@@ -122,6 +123,7 @@ static inline unsigned long __percpu_read(void *ptr, int size) ret =READ_ONCE (*(u64 *)ptr);break ;default : + ret =0 ;BUILD_BUG (); }
@@ -191,6 +193,7 @@ static inline unsigned long __percpu_xchg(void *ptr, unsigned long val, : [val] "r" (val));break ;default : + ret =0 ;BUILD_BUG (); }
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 20/62 s390/vdso: add missing FORCE to build targets
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit b44b136a3773d8a9c7853f8df716bd1483613cbb ]
According to Documentation/kbuild/makefiles.txt all build targets using if_changed should use FORCE as well. Add missing FORCE to make sure vdso targets are rebuild properly when not just immediate prerequisites have changed but also when build command differs.
--- arch/s390/kernel/vdso32/Makefile | 6 +++--- arch/s390/kernel/vdso64/Makefile | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-)
arch/s390/kernel/vdso32/Makefile +3 -3
@@ -33,7 +33,7 @@ UBSAN_SANITIZE := n $(obj)/vdso32_wrapper.o : $(obj)/vdso32.so # link rule for the .so file, .lds has to be first -$(obj)/vdso32.so.dbg: $(src)/vdso32.lds $(obj-vdso32) +$(obj)/vdso32.so.dbg: $(src)/vdso32.lds $(obj-vdso32) FORCE $(call if_changed,vdso32ld) # strip rule for the .so file
@@ -42,12 +42,12 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE $(call if_changed,objcopy) # assembly rules for the .S files -$(obj-vdso32): %.o: %.S +$(obj-vdso32): %.o: %.S FORCE $(call if_changed_dep,vdso32as) # actual build commands quiet_cmd_vdso32ld = VDSO32L $@ - cmd_vdso32ld = $(CC) $(c_flags) -Wl,-T $^ -o $@ + cmd_vdso32ld = $(CC) $(c_flags) -Wl,-T $(filter %.lds %.o,$^) -o $@ quiet_cmd_vdso32as = VDSO32A $@ cmd_vdso32as = $(CC) $(a_flags) -c -o $@ $<
arch/s390/kernel/vdso64/Makefile +3 -3
@@ -33,7 +33,7 @@ UBSAN_SANITIZE := n $(obj)/vdso64_wrapper.o : $(obj)/vdso64.so # link rule for the .so file, .lds has to be first -$(obj)/vdso64.so.dbg: $(src)/vdso64.lds $(obj-vdso64) +$(obj)/vdso64.so.dbg: $(src)/vdso64.lds $(obj-vdso64) FORCE $(call if_changed,vdso64ld) # strip rule for the .so file
@@ -42,12 +42,12 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE $(call if_changed,objcopy) # assembly rules for the .S files -$(obj-vdso64): %.o: %.S +$(obj-vdso64): %.o: %.S FORCE $(call if_changed_dep,vdso64as) # actual build commands quiet_cmd_vdso64ld = VDSO64L $@ - cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $^ -o $@ + cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $(filter %.lds %.o,$^) -o $@ quiet_cmd_vdso64as = VDSO64A $@ cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $<
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 21/62 netfilter: ipset: list:set: Decrease refcount synchronously on deletion and replace
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 439cd39ea136d2c026805264d58a91f36b6b64ca ]
Commit 45040978c899 ("netfilter: ipset: Fix set:list type crash when flush/dump set in parallel") postponed decreasing set reference counters to the RCU callback.
An 'ipset del' command can terminate before the RCU grace period is elapsed, and if sets are listed before then, the reference counter shown in userspace will be wrong:
# ipset create h hash:ip; ipset create l list:set; ipset add l # ipset del l h; ipset list h Name: h Type: hash:ip Revision: 4 Header: family inet hashsize 1024 maxelem 65536 Size in memory: 88 References: 1 Number of entries: 0 Members: # sleep 1; ipset list h Name: h Type: hash:ip Revision: 4 Header: family inet hashsize 1024 maxelem 65536 Size in memory: 88 References: 0 Number of entries: 0 Members:
Fix this by making the reference count update synchronous again.
As a result, when sets are listed, ip_set_name_byindex() might now fetch a set whose reference count is already zero. Instead of relying on the reference count to protect against concurrent set renaming, grab ip_set_ref_lock as reader and copy the name, while holding the same lock in ip_set_rename() as writer instead.
--- include/linux/netfilter/ipset/ip_set.h | 2 +- net/netfilter/ipset/ip_set_core.c | 23 +++++++++++------------ net/netfilter/ipset/ip_set_list_set.c | 17 +++++++++++------ 3 files changed, 23 insertions(+), 19 deletions(-)
include/linux/netfilter/ipset/ip_set.h +1 -1
@@ -312,7 +312,7 @@ enum {extern ip_set_id_t ip_set_get_byname (struct net *net,const char *name,struct ip_set **set);extern void ip_set_put_byindex (struct net *net,ip_set_id_t index); -extern const char *ip_set_name_byindex (struct net *net,ip_set_id_t index); +extern void ip_set_name_byindex (struct net *net,ip_set_id_t index,char *name);extern ip_set_id_t ip_set_nfnl_get_byindex (struct net *net,ip_set_id_t index);extern void ip_set_nfnl_put (struct net *net,ip_set_id_t index);
net/netfilter/ipset/ip_set_core.c +11 -12
@@ -668,21 +668,20 @@ ip_set_put_byindex(struct net *net, ip_set_id_t index)EXPORT_SYMBOL_GPL (ip_set_put_byindex);/* Get the name of a set behind a set index. -* We assume the set is referenced, so it does exist and -* can't be destroyed. The set cannot be renamed due to -* the referencing either. -* +* Set itself is protected by RCU, but its name isn't: to protect against +* renaming, grab ip_set_ref_lock as reader (see ip_set_rename()) and copy the +* name. */ -const char * -ip_set_name_byindex (struct net *net,ip_set_id_t index) +void +ip_set_name_byindex (struct net *net,ip_set_id_t index,char *name) { -const struct ip_set *set =ip_set_rcu_get (net, index); +struct ip_set *set =ip_set_rcu_get (net, index);BUG_ON (!set); -BUG_ON (set->ref ==0 ); -/* Referenced, so it's safe */ -return set->name; +read_lock_bh (&ip_set_ref_lock); +strncpy (name, set->name,IPSET_MAXNAMELEN ); +read_unlock_bh (&ip_set_ref_lock); }EXPORT_SYMBOL_GPL (ip_set_name_byindex);
@@ -1128,7 +1127,7 @@ static int ip_set_rename(struct net *net, struct sock *ctnl,if (!set)return -ENOENT ; -read_lock_bh (&ip_set_ref_lock); +write_lock_bh (&ip_set_ref_lock);if (set->ref !=0 ) { ret = -IPSET_ERR_REFERENCED ; goto out;
@@ -1145,7 +1144,7 @@ static int ip_set_rename(struct net *net, struct sock *ctnl,strncpy (set->name, name2,IPSET_MAXNAMELEN ); out: -read_unlock_bh (&ip_set_ref_lock); +write_unlock_bh (&ip_set_ref_lock);return ret; }
net/netfilter/ipset/ip_set_list_set.c +11 -6
@@ -156,9 +156,7 @@ __list_set_del_rcu(struct rcu_head * rcu) { struct set_elem *e = container_of(rcu, struct set_elem, rcu);struct ip_set *set = e->set; -struct list_set *map = set->data; -ip_set_put_byindex (map->net, e->id);ip_set_ext_destroy (set, e);kfree (e); }
@@ -166,15 +164,21 @@ __list_set_del_rcu(struct rcu_head * rcu)static inline void list_set_del (struct ip_set *set,struct set_elem *e) { +struct list_set *map = set->data; + set->elements--;list_del_rcu (&e->list); +ip_set_put_byindex (map->net, e->id);call_rcu (&e->rcu, __list_set_del_rcu); }static inline void -list_set_replace (struct set_elem *e,struct set_elem *old) +list_set_replace (struct ip_set *set,struct set_elem *e,struct set_elem *old) { +struct list_set *map = set->data; +list_replace_rcu (&old->list, &e->list); +ip_set_put_byindex (map->net, old->id);call_rcu (&old->rcu, __list_set_del_rcu); }
@@ -306,7 +310,7 @@ list_set_uadd(struct ip_set *set, void *value, const struct ip_set_ext *ext,INIT_LIST_HEAD (&e->list);list_set_init_extensions (set, ext, e);if (n) -list_set_replace (e, n); +list_set_replace (set, e, n);else if (next)list_add_tail_rcu (&e->list, &next->list);else if (prev)
@@ -497,6 +501,7 @@ list_set_list(const struct ip_set *set,const struct list_set *map = set->data;struct nlattr *atd, *nested;u32 i =0 , first = cb->args[IPSET_CB_ARG0 ]; +char name[IPSET_MAXNAMELEN ];struct set_elem *e;int ret =0 ;
@@ -515,8 +520,8 @@ list_set_list(const struct ip_set *set, nested =ipset_nest_start (skb,IPSET_ATTR_DATA );if (!nested) goto nla_put_failure; -if (nla_put_string (skb,IPSET_ATTR_NAME , -ip_set_name_byindex (map->net, e->id))) +ip_set_name_byindex (map->net, e->id, name); +if (nla_put_string (skb,IPSET_ATTR_NAME , name)) goto nla_put_failure;if (ip_set_put_extensions (skb, set, e, true)) goto nla_put_failure;
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 22/62 netfilter: ipset: actually allow allowable CIDR 0 in hash:net,port,net
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 886503f34d63e681662057448819edb5b1057a97 ]
Allow /0 as advertised for hash:net,port,net sets.
For "hash:net,port,net", ipset(8) says that "either subnet is permitted to be a /0 should you wish to match port between all destinations."
Make that statement true.
Before:
# ipset create cidrzero hash:net,port,net
# ipset add cidrzero 0.0.0.0/0,12345,0.0.0.0/0
ipset v6.34: The value of the CIDR parameter of the IP address is invalid # ipset create cidrzero6 hash:net,port,net family inet6
# ipset add cidrzero6 ::/0,12345,::/0
ipset v6.34: The value of the CIDR parameter of the IP address is invalidAfter:
# ipset create cidrzero hash:net,port,net
# ipset add cidrzero 0.0.0.0/0,12345,0.0.0.0/0
# ipset test cidrzero 192.168.205.129,12345,172.16.205.129
192.168.205.129,tcp:12345,172.16.205.129 is in set cidrzero. # ipset create cidrzero6 hash:net,port,net family inet6
# ipset add cidrzero6 ::/0,12345,::/0
# ipset test cidrzero6 fe80::1,12345,ff00::1
fe80::1,tcp:12345,ff00::1 is in set cidrzero6.See also:
https://bugzilla.kernel.org/show_bug.cgi?id=200897
https://github.com/ewestbrook/linux/commit/df7ff6efb0934ab6acc11f003ff1a7580d6c1d9c
--- net/netfilter/ipset/ip_set_hash_netportnet.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
net/netfilter/ipset/ip_set_hash_netportnet.c +4 -4
@@ -213,13 +213,13 @@ hash_netportnet4_uadt(struct ip_set *set, struct nlattr *tb[],if (tb[IPSET_ATTR_CIDR ]) { e.cidr[0 ] =nla_get_u8 (tb[IPSET_ATTR_CIDR ]); -if (!e.cidr[0 ] || e.cidr[0 ] >HOST_MASK ) +if (e.cidr[0 ] >HOST_MASK )return -IPSET_ERR_INVALID_CIDR ; }if (tb[IPSET_ATTR_CIDR2 ]) { e.cidr[1 ] =nla_get_u8 (tb[IPSET_ATTR_CIDR2 ]); -if (!e.cidr[1 ] || e.cidr[1 ] >HOST_MASK ) +if (e.cidr[1 ] >HOST_MASK )return -IPSET_ERR_INVALID_CIDR ; }
@@ -492,13 +492,13 @@ hash_netportnet6_uadt(struct ip_set *set, struct nlattr *tb[],if (tb[IPSET_ATTR_CIDR ]) { e.cidr[0 ] =nla_get_u8 (tb[IPSET_ATTR_CIDR ]); -if (!e.cidr[0 ] || e.cidr[0 ] >HOST_MASK ) +if (e.cidr[0 ] >HOST_MASK )return -IPSET_ERR_INVALID_CIDR ; }if (tb[IPSET_ATTR_CIDR2 ]) { e.cidr[1 ] =nla_get_u8 (tb[IPSET_ATTR_CIDR2 ]); -if (!e.cidr[1 ] || e.cidr[1 ] >HOST_MASK ) +if (e.cidr[1 ] >HOST_MASK )return -IPSET_ERR_INVALID_CIDR ; }
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 23/62 s390/mm: Fix ERROR: "__node_distance" undefined!
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit a541f0ebcc08ed8bc0cc492eec9a86cb280a9f24 ]
Fixes:
ERROR: "__node_distance" [drivers/nvme/host/nvme-core.ko] undefined! make[1]: *** [scripts/Makefile.modpost:92: __modpost] Error 1
make: *** [Makefile:1275: modules] Error 2
+ exit 1
--- arch/s390/numa/numa.c | 1 + 1 file changed, 1 insertion(+)
arch/s390/numa/numa.c +1 -0
@@ -54,6 +54,7 @@ int __node_distance(int a, int b) {return mode->distance ? mode->distance (a, b) :0 ; } +EXPORT_SYMBOL (__node_distance);int numa_debug_enabled;
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 24/62 netfilter: ipset: Correct rcu_dereference() call in ip_set_put_comment()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 17b8b74c0f8dbf9b9e3301f9ca5b65dd1c079951 ]
The function is called when rcu_read_lock() is held and not when rcu_read_lock_bh() is held.
--- include/linux/netfilter/ipset/ip_set_comment.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
include/linux/netfilter/ipset/ip_set_comment.h +2 -2
@@ -43,11 +43,11 @@ ip_set_init_comment(struct ip_set *set, struct ip_set_comment *comment,rcu_assign_pointer (comment->c, c); } -/* Used only when dumping a set, protected by rcu_read_lock_bh() */ +/* Used only when dumping a set, protected by rcu_read_lock() */ static inline int ip_set_put_comment (struct sk_buff *skb,const struct ip_set_comment *comment) { -struct ip_set_comment_rcu *c =rcu_dereference_bh (comment->c); +struct ip_set_comment_rcu *c =rcu_dereference (comment->c);if (!c)return 0 ;
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 25/62 netfilter: xt_IDLETIMER: add sysfs filename checking routine
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 54451f60c8fa061af9051a53be9786393947367c ]
When IDLETIMER rule is added, sysfs file is created under /sys/class/xt_idletimer/timers/
But some label name shouldn't be used.
".", "..", "power", "uevent", "subsystem", etc... So that sysfs filename checking routine is needed.
test commands:
%iptables -I INPUT -j IDLETIMER --timeout 1 --label "power"
splat looks like:
[95765.423132] sysfs: cannot create duplicate filename '/devices/virtual/xt_idletimer/timers/power' [95765.433418] CPU: 0 PID: 8446 Comm: iptables Not tainted 4.19.0-rc6+ #20 [95765.449755] Call Trace: [95765.449755] dump_stack+0xc9/0x16b [95765.449755] ? show_regs_print_info+0x5/0x5 [95765.449755] sysfs_warn_dup+0x74/0x90 [95765.449755] sysfs_add_file_mode_ns+0x352/0x500 [95765.449755] sysfs_create_file_ns+0x179/0x270 [95765.449755] ? sysfs_add_file_mode_ns+0x500/0x500 [95765.449755] ? idletimer_tg_checkentry+0x3e5/0xb1b [xt_IDLETIMER] [95765.449755] ? rcu_read_lock_sched_held+0x114/0x130 [95765.449755] ? __kmalloc_track_caller+0x211/0x2b0 [95765.449755] ? memcpy+0x34/0x50 [95765.449755] idletimer_tg_checkentry+0x4e2/0xb1b [xt_IDLETIMER]
[ ... ]
--- net/netfilter/xt_IDLETIMER.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
net/netfilter/xt_IDLETIMER.c +20 -0
@@ -116,6 +116,22 @@ static void idletimer_tg_expired(unsigned long data)schedule_work (&timer->work); } +static int idletimer_check_sysfs_name (const char *name,unsigned int size) +{ +int ret; + + ret =xt_check_proc_name (name, size); +if (ret <0 ) +return ret; + +if (!strcmp (name,"power" ) || + !strcmp (name,"subsystem" ) || + !strcmp (name,"uevent" )) +return -EINVAL ; + +return 0 ; +} +static int idletimer_tg_create (struct idletimer_tg_info *info) {int ret;
@@ -126,6 +142,10 @@ static int idletimer_tg_create(struct idletimer_tg_info *info) goto out; } + ret =idletimer_check_sysfs_name (info->label,sizeof (info->label)); +if (ret <0 ) + goto out_free_timer; +sysfs_attr_init (&info->timer->attr.attr); info->timer->attr.attr.name =kstrdup (info->label,GFP_KERNEL );if (!info->timer->attr.attr.name) {
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 26/62 s390/qeth: fix HiperSockets sniffer
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit bd74a7f9cc033cf4d405788f80292268987dc0c5 ]
Sniffing mode for L3 HiperSockets requires that no IP addresses are registered with the HW. The preferred way to achieve this is for userspace to delete all the IPs on the interface. But qeth is expected to also tolerate a configuration where that is not the case, by skipping the IP registration when in sniffer mode.
Since commit 5f78e29ceebf ("qeth: optimize IP handling in rx_mode callback") reworked the IP registration logic in the L3 subdriver, this no longer works. When the qeth device is set online, qeth_l3_recover_ip() now unconditionally registers all unicast addresses from our internal IP table.
While we could fix this particular problem by skipping qeth_l3_recover_ip() on a sniffer device, the more future-proof change is to skip the IP address registration at the lowest level. This way we
a) catch any future code path that attempts to register an IP address without considering the sniffer scenario, and
b) continue to build up our internal IP table, so that if sniffer mode is switched off later we can operate just like normal.
--- drivers/s390/net/qeth_l3_main.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
drivers/s390/net/qeth_l3_main.c +5 -3
@@ -358,9 +358,6 @@ static void qeth_l3_clear_ip_htable(struct qeth_card *card, int recover)QETH_CARD_TEXT (card,4 ,"clearip" ); -if (recover && card->options.sniffer) -return ; -spin_lock_bh (&card->ip_lock);hash_for_each_safe (card->ip_htable, i, tmp, addr, hnode) {
@@ -818,6 +815,8 @@ static int qeth_l3_register_addr_entry(struct qeth_card *card,int rc =0 ;int cnt =3 ; +if (card->options.sniffer) +return 0 ;if (addr->proto ==QETH_PROT_IPV4 ) {QETH_CARD_TEXT (card,2 ,"setaddr4" );
@@ -853,6 +852,9 @@ static int qeth_l3_deregister_addr_entry(struct qeth_card *card, {int rc =0 ; +if (card->options.sniffer) +return 0 ; +if (addr->proto ==QETH_PROT_IPV4 ) {QETH_CARD_TEXT (card,2 ,"deladdr4" );QETH_CARD_HEX (card,3 , &addr->u.a4.addr,sizeof (int ));
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 27/62 hwmon: (ibmpowernv) Remove bogus __init annotations
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit e3e61f01d755188cb6c2dcf5a244b9c0937c258e ]
If gcc decides not to inline make_sensor_label():
WARNING: vmlinux.o(.text+0x4df549c): Section mismatch in reference from the function .create_device_attrs() to the function .init.text:.make_sensor_label() The function .create_device_attrs() references
the function __init .make_sensor_label().
This is often because .create_device_attrs lacks a __init
annotation or the annotation of .make_sensor_label is wrong.
As .probe() can be called after freeing of __init memory, all __init annotiations in the driver are bogus, and should be removed.
--- drivers/hwmon/ibmpowernv.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
drivers/hwmon/ibmpowernv.c +3 -4
@@ -126,7 +126,7 @@ static ssize_t show_label(struct device *dev, struct device_attribute *devattr,return sprintf (buf,"%s\n" , sdata->label); } -static int __init get_logical_cpu (int hwcpu) +static int get_logical_cpu (int hwcpu) {int cpu;
@@ -137,9 +137,8 @@ static int __init get_logical_cpu(int hwcpu)return -ENOENT ; } -static void __init make_sensor_label (struct device_node *np, -struct sensor_data *sdata, -const char *label) +static void make_sensor_label (struct device_node *np, +struct sensor_data *sdata,const char *label) {u32 id;size_t n;
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 28/62 Revert "drm/exynos/decon5433: implement frame counter"
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 6ca469e22a30992b4478d2ab88737c70667c1e00 ]
This reverts commit 0586feba322e1de05075700eb4b835c8b683e62b
This patch makes it to need get_vblank_counter callback in crtc to get frame counter from decon driver.
However, drm_dev->max_vblank_count is a member unique to vendor's DRM driver but in case of ARM DRM, some CRTC devices don't provide the frame counter value. As a result, this patch made extension and clone mode not working.
Instead of this patch, we may need separated max_vblank_count which belongs to each CRTC device, or need to implement frame counter emulation for them who don't support HW frame counter.
--- drivers/gpu/drm/exynos/exynos5433_drm_decon.c | 9 --------- drivers/gpu/drm/exynos/exynos_drm_crtc.c | 11 ----------- drivers/gpu/drm/exynos/exynos_drm_drv.h | 1 - 3 files changed, 21 deletions(-)
drivers/gpu/drm/exynos/exynos5433_drm_decon.c +0 -9
@@ -160,13 +160,6 @@ static u32 decon_get_frame_count(struct decon_context *ctx, bool end)return frm; } -static u32 decon_get_vblank_counter (struct exynos_drm_crtc *crtc) -{ -struct decon_context *ctx = crtc->ctx; - -return decon_get_frame_count (ctx, false); -} -static void decon_setup_trigger (struct decon_context *ctx) {if (!ctx->crtc->i80_mode && !(ctx->out_type &I80_HW_TRG ))
@@ -532,7 +525,6 @@ static const struct exynos_drm_crtc_ops decon_crtc_ops = { .disable = decon_disable, .enable_vblank = decon_enable_vblank, .disable_vblank = decon_disable_vblank, - .get_vblank_counter = decon_get_vblank_counter, .atomic_begin = decon_atomic_begin, .update_plane = decon_update_plane, .disable_plane = decon_disable_plane,
@@ -550,7 +542,6 @@ static int decon_bind(struct device *dev, struct device *master, void *data)int ret; ctx->drm_dev = drm_dev; - drm_dev->max_vblank_count =0xffffffff ;for (win = ctx->first_win; win <WINDOWS_NR ; win++) {int tmp = (win == ctx->first_win) ?0 : win;
drivers/gpu/drm/exynos/exynos_drm_crtc.c +0 -11
@@ -147,16 +147,6 @@ static void exynos_drm_crtc_disable_vblank(struct drm_crtc *crtc) exynos_crtc->ops->disable_vblank (exynos_crtc); } -static u32 exynos_drm_crtc_get_vblank_counter (struct drm_crtc *crtc) -{ -struct exynos_drm_crtc *exynos_crtc =to_exynos_crtc (crtc); - -if (exynos_crtc->ops->get_vblank_counter) -return exynos_crtc->ops->get_vblank_counter (exynos_crtc); - -return 0 ; -} -static const struct drm_crtc_funcs exynos_crtc_funcs = { .set_config = drm_atomic_helper_set_config, .page_flip = drm_atomic_helper_page_flip,
@@ -166,7 +156,6 @@ static const struct drm_crtc_funcs exynos_crtc_funcs = { .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state, .enable_vblank = exynos_drm_crtc_enable_vblank, .disable_vblank = exynos_drm_crtc_disable_vblank, - .get_vblank_counter = exynos_drm_crtc_get_vblank_counter, }; struct exynos_drm_crtc *exynos_drm_crtc_create(struct drm_device *drm_dev,
drivers/gpu/drm/exynos/exynos_drm_drv.h +0 -1
@@ -133,7 +133,6 @@ struct exynos_drm_crtc_ops {void (*disable)(struct exynos_drm_crtc *crtc);int (*enable_vblank)(struct exynos_drm_crtc *crtc);void (*disable_vblank)(struct exynos_drm_crtc *crtc); -u32 (*get_vblank_counter)(struct exynos_drm_crtc *crtc);enum drm_mode_status (*mode_valid)(struct exynos_drm_crtc *crtc,const struct drm_display_mode *mode); int (*atomic_check)(struct exynos_drm_crtc *crtc,
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 29/62 clk: fixed-factor: fix of_node_get-put imbalance
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit f98e8a572bddbf27032114127d2fcc78fa5e6a9d ]
When the fixed factor clock is created by devicetree, of_clk_add_provider is called. Add a call to of_clk_del_provider in the remove function to balance it out.
--- drivers/clk/clk-fixed-factor.c | 1 + 1 file changed, 1 insertion(+)
drivers/clk/clk-fixed-factor.c +1 -0
@@ -210,6 +210,7 @@ static int of_fixed_factor_clk_remove(struct platform_device *pdev) {struct clk *clk =platform_get_drvdata (pdev); +of_clk_del_provider (pdev->dev.of_node);clk_unregister_fixed_factor (clk);return 0 ;
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 30/62 lib/raid6: Fix arm64 test build
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 313a06e636808387822af24c507cba92703568b1 ]
The lib/raid6/test fails to build the neon objects on arm64 because the correct machine type is 'aarch64'.
Once this is correctly enabled, the neon recovery objects need to be added to the build.
--- lib/raid6/test/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
lib/raid6/test/Makefile +2 -2
@@ -27,7 +27,7 @@ ifeq ($(ARCH),arm) CFLAGS += -I../../../arch/arm/include -mfpu=neon HAS_NEON = yes endif -ifeq ($(ARCH),arm64) +ifeq ($(ARCH),aarch64) CFLAGS += -I../../../arch/arm64/include HAS_NEON = yes endif
@@ -41,7 +41,7 @@ ifeq ($(IS_X86),yes) gcc -c -x assembler - >&/dev/null && \ rm ./-.o && echo -DCONFIG_AS_AVX512=1) else ifeq ($(HAS_NEON),yes) - OBJS += neon.o neon1.o neon2.o neon4.o neon8.o + OBJS += neon.o neon1.o neon2.o neon4.o neon8.o recov_neon.o recov_neon_inner.o CFLAGS += -DCONFIG_KERNEL_MODE_NEON=1 else HAS_ALTIVEC := $(shell printf '\#include <altivec.h>\nvector int a;\n' |\
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 31/62 s390/perf: Change CPUM_CF return code in event init function
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 0bb2ae1b26e1fb7543ec7474cdd374ac4b88c4da ]
The function perf_init_event() creates a new event and assignes it to a PMU. This a done in a loop over all existing PMUs. For each listed PMU the event init function is called and if this function does return any other error than -ENOENT, the loop is terminated the creation of the event fails.
If the event is invalid, return -ENOENT to try other PMUs.
--- arch/s390/kernel/perf_cpum_cf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/s390/kernel/perf_cpum_cf.c +1 -1
@@ -376,7 +376,7 @@ static int __hw_perf_event_init(struct perf_event *event)return -ENOENT ;if (ev >PERF_CPUM_CF_MAX_CTR ) -return -EINVAL ; +return -ENOENT ;/* Obtain the counter set to which the specified counter belongs */ set =get_counter_set (ev);
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 32/62 i2c: omap: Enable for ARCH_K3
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 5b277402deac0691226a947df71c581686bd4020 ]
Allow I2C_OMAP to be built for K3 platforms.
--- drivers/i2c/busses/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/i2c/busses/Kconfig +1 -1
@@ -759,7 +759,7 @@ config I2C_OCORES config I2C_OMAP tristate "OMAP I2C adapter" - depends on ARCH_OMAP + depends on ARCH_OMAP || ARCH_K3 default y if MACH_OMAP_H3 || MACH_OMAP_OSK help If you say yes to this option, support will be included for the
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 33/62 sched/core: Take the hotplug lock in sched_init_smp()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 40fa3780bac2b654edf23f6b13f4e2dd550aea10 ]
When running on linux-next (8c60c36d0b8c ("Add linux-next specific files for 20181019")) + CONFIG_PROVE_LOCKING=y on a big.LITTLE system (e.g. Juno or HiKey960), we get the following report:
[ 0.748225] Call trace: [ 0.750685] lockdep_assert_cpus_held+0x30/0x40 [ 0.755236] static_key_enable_cpuslocked+0x20/0xc8 [ 0.760137] build_sched_domains+0x1034/0x1108 [ 0.764601] sched_init_domains+0x68/0x90 [ 0.768628] sched_init_smp+0x30/0x80 [ 0.772309] kernel_init_freeable+0x278/0x51c [ 0.776685] kernel_init+0x10/0x108 [ 0.780190] ret_from_fork+0x10/0x18
The static_key in question is 'sched_asym_cpucapacity' introduced by commit:
df054e8445a4 ("sched/topology: Add static_key for asymmetric CPU capacity optimizations")
In this particular case, we enable it because smp_prepare_cpus() will end up fetching the capacity-dmips-mhz entry from the devicetree, so we already have some asymmetry detected when entering sched_init_smp().
This didn't get detected in tip/sched/core because we were missing:
commit cb538267ea1e ("jump_label/lockdep: Assert we hold the hotplug lock for _cpuslocked() operations")
Calls to build_sched_domains() post sched_init_smp() will hold the hotplug lock, it just so happens that this very first call is a special case. As stated by a comment in sched_init_smp(), "There's no userspace yet to cause hotplug operations" so this is a harmless warning.
However, to both respect the semantics of underlying callees and make lockdep happy, take the hotplug lock in sched_init_smp(). This also satisfies the comment atop sched_init_domains() that says "Callers must hold the hotplug lock".
--- kernel/sched/core.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
kernel/sched/core.c +4 -1
@@ -5733,14 +5733,17 @@ void __init sched_init_smp(void)/* * There's no userspace yet to cause hotplug operations; hence all the * CPU masks are stable and all blatant races in the below code cannot -* happen. +* happen. The hotplug lock is nevertheless taken to satisfy lockdep, +* but there won't be any contention on it. */ +cpus_read_lock ();mutex_lock (&sched_domains_mutex);sched_init_domains (cpu_active_mask);cpumask_andnot (non_isolated_cpus, cpu_possible_mask, cpu_isolated_map);if (cpumask_empty (non_isolated_cpus))cpumask_set_cpu (smp_processor_id (), non_isolated_cpus);mutex_unlock (&sched_domains_mutex); +cpus_read_unlock ();/* Move init over to a non-isolated CPU */ if (set_cpus_allowed_ptr (current, non_isolated_cpus) <0 )
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 34/62 perf tools: Fix undefined symbol scnprintf in libperf-jvmti.so
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 6ac2226229d931153331a93d90655a3de05b9290 ]
Currently jvmti agent can not be used because function scnprintf is not present in the agent libperf-jvmti.so. As a result the JVM when using such agent to record JITed code profiling information will fail on looking up scnprintf:
java: symbol lookup error: lib/libperf-jvmti.so: undefined symbol: scnprintf
This commit fixes that by reverting to the use of snprintf, that can be looked up, instead of scnprintf, adding a proper check for the returned value in order to print a better error message when the jitdump file pathname is too long. Checking the returned value also helps to comply with some recent gcc versions, like gcc8, which will fail due to truncated writing checks related to the -Werror=format-truncation= flag.
LPU-Reference: [email protected]
--- tools/perf/jvmti/jvmti_agent.c | 49 ++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 11 deletions(-)
tools/perf/jvmti/jvmti_agent.c +38 -11
@@ -125,7 +125,7 @@ perf_get_timestamp(void) }static int -debug_cache_init (void ) +create_jit_cache_dir (void ) {char str[32 ];char *base, *p;
@@ -144,8 +144,13 @@ debug_cache_init(void)strftime (str,sizeof (str),JIT_LANG "-jit-%Y%m%d" , &tm); -snprintf (jit_path,PATH_MAX -1 ,"%s/.debug/" , base); - + ret =snprintf (jit_path,PATH_MAX ,"%s/.debug/" , base); +if (ret >=PATH_MAX ) { +warnx ("jvmti: cannot generate jit cache dir because %s/.debug/" +" is too long, please check the cwd, JITDUMPDIR, and" +" HOME variables" , base); +return -1 ; + } ret =mkdir (jit_path,0755 );if (ret ==-1 ) {if (errno !=EEXIST ) {
@@ -154,20 +159,32 @@ debug_cache_init(void) } } -snprintf (jit_path,PATH_MAX -1 ,"%s/.debug/jit" , base); + ret =snprintf (jit_path,PATH_MAX ,"%s/.debug/jit" , base); +if (ret >=PATH_MAX ) { +warnx ("jvmti: cannot generate jit cache dir because" +" %s/.debug/jit is too long, please check the cwd," +" JITDUMPDIR, and HOME variables" , base); +return -1 ; + } ret =mkdir (jit_path,0755 );if (ret ==-1 ) {if (errno !=EEXIST ) { -warn ("cannot create jit cache dir %s" , jit_path); +warn ("jvmti: cannot create jit cache dir %s" , jit_path);return -1 ; } } -snprintf (jit_path,PATH_MAX -1 ,"%s/.debug/jit/%s.XXXXXXXX" , base, str); - + ret =snprintf (jit_path,PATH_MAX ,"%s/.debug/jit/%s.XXXXXXXX" , base, str); +if (ret >=PATH_MAX ) { +warnx ("jvmti: cannot generate jit cache dir because" +" %s/.debug/jit/%s.XXXXXXXX is too long, please check" +" the cwd, JITDUMPDIR, and HOME variables" , + base, str); +return -1 ; + } p =mkdtemp (jit_path);if (p != jit_path) { -warn ("cannot create jit cache dir %s" , jit_path); +warn ("jvmti: cannot create jit cache dir %s" , jit_path);return -1 ; }
@@ -228,7 +245,7 @@ void *jvmti_open(void) {char dump_path[PATH_MAX ];struct jitheader header; -int fd; +int fd, ret;FILE *fp;init_arch_timestamp ();
@@ -245,12 +262,22 @@ void *jvmti_open(void)memset (&header,0 ,sizeof (header)); -debug_cache_init (); +/* +* jitdump file dir +*/ +if (create_jit_cache_dir () <0 ) +return NULL ;/* * jitdump file name */ -scnprintf (dump_path,PATH_MAX ,"%s/jit-%i.dump" , jit_path,getpid ()); + ret =snprintf (dump_path,PATH_MAX ,"%s/jit-%i.dump" , jit_path,getpid ()); +if (ret >=PATH_MAX ) { +warnx ("jvmti: cannot generate jitdump file full path because" +" %s/jit-%i.dump is too long, please check the cwd," +" JITDUMPDIR, and HOME variables" , jit_path,getpid ()); +return NULL ; + } fd =open (dump_path,O_CREAT |O_TRUNC |O_RDWR ,0666 );if (fd ==-1 )
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 35/62 i40e: restore NETIF_F_GSO_IPXIP[46] to netdev features
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit ba766b8b99c30ad3c55ed8cf224d1185ecff1476 ]
Since commit bacd75cfac8a ("i40e/i40evf: Add capability exchange for outer checksum", 2017-04-06) the i40e driver has not reported support for IP-in-IP offloads. This likely occurred due to a bad rebase, as the commit extracts hw_enc_features into its own variable. As part of this change, it dropped the NETIF_F_FSO_IPXIP flags from the netdev->hw_enc_features. This was unfortunately not caught during code review.
Fix this by adding back the missing feature flags.
For reference, NETIF_F_GSO_IPXIP4 was added in commit 7e13318daa4a ("net: define gso types for IPx over IPv4 and IPv6", 2016-05-20), replacing NETIF_F_GSO_IPIP and NETIF_F_GSO_SIT.
NETIF_F_GSO_IPXIP6 was added in commit bf2d1df39502 ("intel: Add support for IPv6 IP-in-IP offload", 2016-05-20).
--- drivers/net/ethernet/intel/i40e/i40e_main.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/ethernet/intel/i40e/i40e_main.c +2 -0
@@ -9688,6 +9688,8 @@ static int i40e_config_netdev(struct i40e_vsi *vsi)NETIF_F_GSO_GRE |NETIF_F_GSO_GRE_CSUM |NETIF_F_GSO_PARTIAL | +NETIF_F_GSO_IPXIP4 | +NETIF_F_GSO_IPXIP6 |NETIF_F_GSO_UDP_TUNNEL |NETIF_F_GSO_UDP_TUNNEL_CSUM | NETIF_F_SCTP_CRC |
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 36/62 qed: Fix memory/entry leak in qed_init_sp_request()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 39477551df940ddb1339203817de04f5caaacf7a ]
Free the allocated SPQ entry or return the acquired SPQ entry to the free list in error flows.
--- .../net/ethernet/qlogic/qed/qed_sp_commands.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)
drivers/net/ethernet/qlogic/qed/qed_sp_commands.c +14 -2
@@ -80,7 +80,7 @@ int qed_sp_init_request(struct qed_hwfn *p_hwfn,case QED_SPQ_MODE_BLOCK :if (!p_data->p_comp_data) -return -EINVAL ; + goto err; p_ent->comp_cb.cookie = p_data->p_comp_data->cookie;break ;
@@ -95,7 +95,7 @@ int qed_sp_init_request(struct qed_hwfn *p_hwfn,default :DP_NOTICE (p_hwfn,"Unknown SPQE completion mode %d\n" , p_ent->comp_mode); -return -EINVAL ; + goto err; } DP_VERBOSE(p_hwfn, QED_MSG_SPQ,
@@ -109,6 +109,18 @@ int qed_sp_init_request(struct qed_hwfn *p_hwfn,memset (&p_ent->ramrod,0 ,sizeof (p_ent->ramrod));return 0 ; + +err: +/* qed_spq_get_entry() can either get an entry from the free_pool, +* or, if no entries are left, allocate a new entry and add it to +* the unlimited_pending list. +*/ +if (p_ent->queue == &p_hwfn->p_spq->unlimited_pending) +kfree (p_ent); +else +qed_spq_return_entry (p_hwfn, p_ent); + +return -EINVAL ; }static enum tunnel_clss qed_tunn_clss_to_fw_clss (u8 type)
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 37/62 qed: Fix blocking/unlimited SPQ entries leak
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 2632f22ebd08da249c2017962a199a0cfb2324bf ]
When there are no SPQ entries left in the free_pool, new entries are allocated and are added to the unlimited list. When an entry in the pool is available, the content is copied from the original entry, and the new entry is sent to the device. qed_spq_post() is not aware of that, so the additional entry is stored in the original entry as p_post_ent, which can later be returned to the pool.
--- drivers/net/ethernet/qlogic/qed/qed_sp.h | 3 ++ drivers/net/ethernet/qlogic/qed/qed_spq.c | 57 ++++++++++++----------- 2 files changed, 33 insertions(+), 27 deletions(-)
drivers/net/ethernet/qlogic/qed/qed_sp.h +3 -0
@@ -167,6 +167,9 @@ struct qed_spq_entry {enum spq_mode comp_mode;struct qed_spq_comp_cb comp_cb;struct qed_spq_comp_done comp_done;/* SPQ_MODE_EBLOCK */ + +/* Posted entry for unlimited list entry in EBLOCK mode */ +struct qed_spq_entry *post_ent; };struct qed_eq {
drivers/net/ethernet/qlogic/qed/qed_spq.c +30 -27
96 lines not on this page · raw message
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 38/62 qed: Fix potential memory corruption
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit fa5c448d98f0df660bfcad3dd5facc027ef84cd3 ]
A stuck ramrod should be deleted from the completion_pending list, otherwise it will be added again in the future and corrupt the list.
Return error value to inform that ramrod is stuck and should be deleted.
--- drivers/net/ethernet/qlogic/qed/qed_spq.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-)
drivers/net/ethernet/qlogic/qed/qed_spq.c +5 -7
@@ -144,6 +144,7 @@ static int qed_spq_block(struct qed_hwfn *p_hwfn,DP_INFO (p_hwfn,"Ramrod is stuck, requesting MCP drain\n" ); rc =qed_mcp_drain (p_hwfn, p_ptt); +qed_ptt_release (p_hwfn, p_ptt);if (rc) {DP_NOTICE (p_hwfn,"MCP drain failed\n" ); goto err;
@@ -152,18 +153,15 @@ static int qed_spq_block(struct qed_hwfn *p_hwfn,/* Retry after drain */ rc =__qed_spq_block (p_hwfn, p_ent, p_fw_ret, true);if (!rc) - goto out; +return 0 ; comp_done = (struct qed_spq_comp_done *)p_ent->comp_cb.cookie; -if (comp_done->done ==1 ) +if (comp_done->done ==1 ) {if (p_fw_ret) *p_fw_ret = comp_done->fw_return_code; -out: -qed_ptt_release (p_hwfn, p_ptt); -return 0 ; - +return 0 ; + } err: -qed_ptt_release (p_hwfn, p_ptt); DP_NOTICE(p_hwfn, "Ramrod is stuck [CID %08x cmd %02x protocol %02x echo %04x]\n", le32_to_cpu(p_ent->elem.hdr.cid),
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 39/62 net: stmmac: Fix RX packet size > 8191
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 8137b6ef0ce469154e5cf19f8e7fe04d9a72ac5e ]
Ping problems with packets > 8191 as shown:
PING 192.168.1.99 (192.168.1.99) 8150(8178) bytes of data. 8158 bytes from 192.168.1.99: icmp_seq=1 ttl=64 time=0.669 ms wrong data byte 8144 should be 0xd0 but was 0x0
16 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
%< ---------------snip-------------------------------------- 8112 b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf
c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf
8144 0 0 0 0 d0 d1
^^^^^^^
Notice the 4 bytes of 0 before the expected byte of d0.
Databook notes that the RX buffer must be a multiple of 4/8/16 bytes [1].
Update the DMA Buffer size define to 8188 instead of 8192. Remove the -1 from the RX buffer size allocations and use the new DMA Buffer size directly.
[1] Synopsys DesignWare Cores Ethernet MAC Universal v3.70a
[section 8.4.2 - Table 8-24]
Tested on SoCFPGA Stratix10 with ping sweep from 100 to 8300 byte packets.
--- drivers/net/ethernet/stmicro/stmmac/common.h | 3 ++- drivers/net/ethernet/stmicro/stmmac/descs_com.h | 2 +- drivers/net/ethernet/stmicro/stmmac/enh_desc.c | 2 +- drivers/net/ethernet/stmicro/stmmac/ring_mode.c | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-)
drivers/net/ethernet/stmicro/stmmac/common.h +2 -1
@@ -340,7 +340,8 @@ struct dma_features {/* GMAC TX FIFO is 8K, Rx FIFO is 16K */ #define BUF_SIZE_16KiB 16384 -#define BUF_SIZE_8KiB 8192 +/* RX Buffer size must be < 8191 and multiple of 4/8/16 bytes */ +#define BUF_SIZE_8KiB 8188#define BUF_SIZE_4KiB 4096#define BUF_SIZE_2KiB 2048
drivers/net/ethernet/stmicro/stmmac/descs_com.h +1 -1
@@ -31,7 +31,7 @@/* Enhanced descriptors */ static inline void ehn_desc_rx_set_on_ring (struct dma_desc *p,int end) { - p->des1 |=cpu_to_le32 (((BUF_SIZE_8KiB -1 ) + p->des1 |=cpu_to_le32 ((BUF_SIZE_8KiB <<ERDES1_BUFFER2_SIZE_SHIFT ) &ERDES1_BUFFER2_SIZE_MASK );
drivers/net/ethernet/stmicro/stmmac/enh_desc.c +1 -1
@@ -262,7 +262,7 @@ static void enh_desc_init_rx_desc(struct dma_desc *p, int disable_rx_ic, int mode, int end) { p->des0 |=cpu_to_le32 (RDES0_OWN ); - p->des1 |=cpu_to_le32 ((BUF_SIZE_8KiB -1 ) &ERDES1_BUFFER1_SIZE_MASK ); + p->des1 |=cpu_to_le32 (BUF_SIZE_8KiB &ERDES1_BUFFER1_SIZE_MASK );if (mode ==STMMAC_CHAIN_MODE )ehn_desc_rx_set_on_chain (p);
drivers/net/ethernet/stmicro/stmmac/ring_mode.c +1 -1
@@ -143,7 +143,7 @@ static void stmmac_clean_desc3(void *priv_ptr, struct dma_desc *p)static int stmmac_set_16kib_bfsize (int mtu) {int ret =0 ; -if (unlikely (mtu >= BUF_SIZE_8KiB)) +if (unlikely (mtu > BUF_SIZE_8KiB)) ret = BUF_SIZE_16KiB;return ret; }
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 40/62 zram: close udev startup race condition as default groups
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
commit fef912bf860e upstream.
commit 98af4d4df889 upstream.
I got a report from Howard Chen that he saw zram and sysfs race(ie, zram block device file is created but sysfs for it isn't yet) when he tried to create new zram devices via hotadd knob.
v4.20 kernel fixes it by [1, 2] but it's too large size to merge into -stable so this patch fixes the problem by registering defualt group by Greg KH's approach[3].
This patch should be applied to every stable tree [3.16+] currently existing from kernel.org because the problem was introduced at 2.6.37 by [4].
[1] fef912bf860e, block: genhd: add 'groups' argument to device_add_disk
[2] 98af4d4df889, zram: register default groups with device_add_disk()
[3] http://kroah.com/log/blog/2013/06/26/how-to-create-a-sysfs-file-correctly/
[4] 33863c21e69e9, Staging: zram: Replace ioctls with sysfs interface
--- drivers/block/zram/zram_drv.c | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-)
drivers/block/zram/zram_drv.c +6 -20
@@ -1491,6 +1491,11 @@ static const struct attribute_group zram_disk_attr_group = { .attrs = zram_disk_attrs, }; +static const struct attribute_group *zram_disk_attr_groups[] = { + &zram_disk_attr_group, +NULL , +}; +/* * Allocate and initialize new zram device. the function returns * '>= 0' device_id upon success, and negative value otherwise.
@@ -1568,23 +1573,14 @@ static int zram_add(void)if (ZRAM_LOGICAL_BLOCK_SIZE ==PAGE_SIZE )blk_queue_max_write_zeroes_sectors (zram->disk->queue,UINT_MAX ); +disk_to_dev (zram->disk)->groups = zram_disk_attr_groups;add_disk (zram->disk); - ret =sysfs_create_group (&disk_to_dev (zram->disk)->kobj, - &zram_disk_attr_group); -if (ret <0 ) { -pr_err ("Error creating sysfs group for device %d\n" , - device_id); - goto out_free_disk; - }strlcpy (zram->compressor, default_compressor,sizeof (zram->compressor));pr_info ("Added device: %s\n" , zram->disk->disk_name);return device_id; -out_free_disk: -del_gendisk (zram->disk); -put_disk (zram->disk); out_free_queue:blk_cleanup_queue (queue); out_free_idr:
@@ -1612,16 +1608,6 @@ static int zram_remove(struct zram *zram) zram->claim = true;mutex_unlock (&bdev->bd_mutex); -/* -* Remove sysfs first, so no one will perform a disksize -* store while we destroy the devices. This also helps during -* hot_remove -- zram_reset_device() is the last holder of -* ->init_lock, no later/concurrent disksize_store() or any -* other sysfs handlers are possible. -*/ -sysfs_remove_group (&disk_to_dev (zram->disk)->kobj, - &zram_disk_attr_group); -/* Make sure all the pending I/O are finished */ fsync_bdev (bdev);zram_reset_device (zram);
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 41/62 SUNRPC: drop pointless static qualifier in xdr_get_next_encode_buffer()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 025911a5f4e36955498ed50806ad1b02f0f76288 ]
There is no need to have the '__be32 *p' variable static since new value always be assigned before use it.
--- net/sunrpc/xdr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/sunrpc/xdr.c +1 -1
@@ -512,7 +512,7 @@ EXPORT_SYMBOL_GPL(xdr_commit_encode);static __be32 *xdr_get_next_encode_buffer (struct xdr_stream *xdr,size_t nbytes) { -static __be32 *p; +__be32 *p;int space_left;int frag1bytes, frag2bytes;
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 42/62 ACPI / watchdog: Prefer iTCO_wdt always when WDAT table uses RTC SRAM
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 5a802a7a285c8877ca872e44eeb0f06afcb5212f ]
After we added quirk for Lenovo Z50-70 it turns out there are at least two more systems where WDAT table includes instructions accessing RTC SRAM. Instead of quirking each system separately, look for such instructions in the table and automatically prefer iTCO_wdt if found.
--- drivers/acpi/acpi_watchdog.c | 72 ++++++++++++++++++++++-------------- 1 file changed, 45 insertions(+), 27 deletions(-)
drivers/acpi/acpi_watchdog.c +45 -27
@@ -12,35 +12,51 @@#define pr_fmt (fmt) "ACPI: watchdog: " fmt#include <linux/acpi.h> -#include <linux/dmi.h> #include <linux/ioport.h> #include <linux/platform_device.h> #include "internal.h" -static const struct dmi_system_id acpi_watchdog_skip[] = { - { -/* -* On Lenovo Z50-70 there are two issues with the WDAT -* table. First some of the instructions use RTC SRAM -* to store persistent information. This does not work well -* with Linux RTC driver. Second, more important thing is -* that the instructions do not actually reset the system. -* -* On this particular system iTCO_wdt seems to work just -* fine so we prefer that over WDAT for now. -* -* See also https://bugzilla.kernel.org/show_bug.cgi?id=199033. -*/ - .ident ="Lenovo Z50-70" , - .matches = { -DMI_MATCH (DMI_SYS_VENDOR ,"LENOVO" ), -DMI_MATCH (DMI_PRODUCT_NAME ,"20354" ), -DMI_MATCH (DMI_PRODUCT_VERSION ,"Lenovo Z50-70" ), - }, - }, - {} -}; +#ifdef CONFIG_RTC_MC146818_LIB +#include <linux/mc146818rtc.h> + +/* +* There are several systems where the WDAT table is accessing RTC SRAM to +* store persistent information. This does not work well with the Linux RTC +* driver so on those systems we skip WDAT driver and prefer iTCO_wdt +* instead. +* +* See also https://bugzilla.kernel.org/show_bug.cgi?id=199033. +*/ +static bool acpi_watchdog_uses_rtc (const struct acpi_table_wdat *wdat) +{ +const struct acpi_wdat_entry *entries; +int i; + + entries = (struct acpi_wdat_entry *)(wdat +1 ); +for (i =0 ; i < wdat->entries; i++) { +const struct acpi_generic_address *gas; + + gas = &entries[i].register_region; +if (gas->space_id ==ACPI_ADR_SPACE_SYSTEM_IO ) { +switch (gas->address) { +case RTC_PORT (0 ): +case RTC_PORT (1 ): +case RTC_PORT (2 ): +case RTC_PORT (3 ): +return true; + } + } + } + +return false; +} +#else +static bool acpi_watchdog_uses_rtc (const struct acpi_table_wdat *wdat) +{ +return false; +} +#endif static const struct acpi_table_wdat *acpi_watchdog_get_wdat (void ) {
@@ -50,9 +66,6 @@ static const struct acpi_table_wdat *acpi_watchdog_get_wdat(void)if (acpi_disabled)return NULL ; -if (dmi_check_system (acpi_watchdog_skip)) -return NULL ; - status =acpi_get_table (ACPI_SIG_WDAT ,0 , (struct acpi_table_header **)&wdat);if (ACPI_FAILURE (status)) {
@@ -60,6 +73,11 @@ static const struct acpi_table_wdat *acpi_watchdog_get_wdat(void)return NULL ; } +if (acpi_watchdog_uses_rtc (wdat)) { +pr_info ("Skipping WDAT on this system because it uses RTC SRAM\n" ); +return NULL ; + } +return wdat; }
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 43/62 perf machine: Add machine__is() to identify machine arch
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
commit dbbd34a666ee117d0e39e71a47f38f02c4a5c698 upstream.
Add a function to identify the machine architecture.
--- tools/perf/util/env.c | 19 +++++++++++++++++++ tools/perf/util/env.h | 3 +++ tools/perf/util/machine.c | 9 +++++++++ tools/perf/util/machine.h | 2 ++ 4 files changed, 33 insertions(+)
tools/perf/util/env.c +19 -0
@@ -3,6 +3,7 @@#include "env.h" #include "util.h" #include <errno.h> +#include <sys/utsname.h> struct perf_env perf_env;
@@ -87,6 +88,24 @@ int perf_env__read_cpu_topology_map(struct perf_env *env)return 0 ; } +static int perf_env__read_arch (struct perf_env *env) +{ +struct utsname uts; + +if (env->arch) +return 0 ; + +if (!uname (&uts)) + env->arch =strdup (uts.machine); + +return env->arch ?0 : -ENOMEM ; +} + +const char *perf_env__raw_arch (struct perf_env *env) +{ +return env && !perf_env__read_arch (env) ? env->arch :"unknown" ; +} +void cpu_cache_level__free (struct cpu_cache_level *cache) {free (cache->type);
tools/perf/util/env.h +3 -0
@@ -65,4 +65,7 @@ int perf_env__set_cmdline(struct perf_env *env, int argc, const char *argv[]);int perf_env__read_cpu_topology_map (struct perf_env *env);void cpu_cache_level__free (struct cpu_cache_level *cache); + +const char *perf_env__raw_arch (struct perf_env *env); +#endif /* __PERF_ENV_H */
tools/perf/util/machine.c +9 -0
@@ -2238,6 +2238,15 @@ int machine__set_current_tid(struct machine *machine, int cpu, pid_t pid,return 0 ; } +/* +* Compares the raw arch string. N.B. see instead perf_env__arch() if a +* normalized arch is needed. +*/ +bool machine__is (struct machine *machine,const char *arch) +{ +return machine && !strcmp (perf_env__raw_arch (machine->env), arch); +} +int machine__get_kernel_start (struct machine *machine) {struct map *map =machine__kernel_map (machine);
tools/perf/util/machine.h +2 -0
@@ -169,6 +169,8 @@ static inline bool machine__is_host(struct machine *machine)return machine ? machine->pid ==HOST_KERNEL_ID : false; } +bool machine__is (struct machine *machine,const char *arch); +struct thread *__machine__findnew_thread (struct machine *machine,pid_t pid,pid_t tid);struct thread *machine__findnew_thread (struct machine *machine,pid_t pid,pid_t tid);
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 44/62 perf tools: Fix kernel_start for PTI on x86
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
commit 19422a9f2a3be7f3a046285ffae4cbb571aa853a upstream.
On x86_64, PTI entry trampolines are less than the start of kernel text, but still above 2^63. So leave kernel_start = 1ULL << 63 for x86_64.
--- tools/perf/util/machine.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
tools/perf/util/machine.c +6 -1
@@ -2263,7 +2263,12 @@ int machine__get_kernel_start(struct machine *machine) machine->kernel_start =1ULL <<63 ;if (map) { err =map__load (map); -if (!err) +/* +* On x86_64, PTI entry trampolines are less than the +* start of kernel text, but still above 2^63. So leave +* kernel_start = 1ULL << 63 for x86_64. +*/ +if (!err && !machine__is (machine,"x86_64" )) machine->kernel_start = map->start; }return err;
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 45/62 perf machine: Add nr_cpus_avail()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
commit 9cecca325ea879c84fcd31a5e609a514c1a1dbd1 upstream.
Add a function to return the number of the machine's available CPUs.
--- tools/perf/util/env.c | 13 +++++++++++++ tools/perf/util/env.h | 1 + tools/perf/util/machine.c | 5 +++++ tools/perf/util/machine.h | 1 + 4 files changed, 20 insertions(+)
tools/perf/util/env.c +13 -0
@@ -101,11 +101,24 @@ static int perf_env__read_arch(struct perf_env *env)return env->arch ?0 : -ENOMEM ; } +static int perf_env__read_nr_cpus_avail (struct perf_env *env) +{ +if (env->nr_cpus_avail ==0 ) + env->nr_cpus_avail =cpu__max_present_cpu (); + +return env->nr_cpus_avail ?0 : -ENOENT ; +} +const char *perf_env__raw_arch (struct perf_env *env) {return env && !perf_env__read_arch (env) ? env->arch :"unknown" ; } +int perf_env__nr_cpus_avail (struct perf_env *env) +{ +return env && !perf_env__read_nr_cpus_avail (env) ? env->nr_cpus_avail :0 ; +} +void cpu_cache_level__free (struct cpu_cache_level *cache) {free (cache->type);
tools/perf/util/env.h +1 -0
@@ -67,5 +67,6 @@ int perf_env__read_cpu_topology_map(struct perf_env *env);void cpu_cache_level__free (struct cpu_cache_level *cache);const char *perf_env__raw_arch (struct perf_env *env); +int perf_env__nr_cpus_avail (struct perf_env *env);#endif /* __PERF_ENV_H */
tools/perf/util/machine.c +5 -0
@@ -2247,6 +2247,11 @@ bool machine__is(struct machine *machine, const char *arch)return machine && !strcmp (perf_env__raw_arch (machine->env), arch); } +int machine__nr_cpus_avail (struct machine *machine) +{ +return machine ?perf_env__nr_cpus_avail (machine->env) :0 ; +} +int machine__get_kernel_start (struct machine *machine) {struct map *map =machine__kernel_map (machine);
tools/perf/util/machine.h +1 -0
@@ -170,6 +170,7 @@ static inline bool machine__is_host(struct machine *machine) }bool machine__is (struct machine *machine,const char *arch); +int machine__nr_cpus_avail (struct machine *machine);struct thread *__machine__findnew_thread (struct machine *machine,pid_t pid,pid_t tid);struct thread *machine__findnew_thread (struct machine *machine,pid_t pid,pid_t tid);
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 46/62 perf machine: Workaround missing maps for x86 PTI entry trampolines
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
commit 4d99e4136580d178e3523281a820be17bf814bf8 upstream.
On x86_64 the PTI entry trampolines are not in the kernel map created by perf tools. That results in the addresses having no symbols and prevents annotation. It also causes Intel PT to have decoding errors at the trampoline addresses.
Workaround that by creating maps for the trampolines.
At present the kernel does not export information revealing where the trampolines are. Until that happens, the addresses are hardcoded.
--- tools/perf/util/machine.c | 96 +++++++++++++++++++++++++++++++++++++++ tools/perf/util/machine.h | 3 ++ tools/perf/util/symbol.c | 12 +++-- 3 files changed, 106 insertions(+), 5 deletions(-)
tools/perf/util/machine.c +96 -0
@@ -818,6 +818,102 @@ static int machine__get_running_kernel_start(struct machine *machine,return 0 ; } +/* Kernel-space maps for symbols that are outside the main kernel map and module maps */ +struct extra_kernel_map { +u64 start; +u64 end; +u64 pgoff; +}; + +static int machine__create_extra_kernel_map (struct machine *machine, +struct dso *kernel, +struct extra_kernel_map *xm) +{ +struct kmap *kmap; +struct map *map; + + map =map__new2 (xm->start, kernel,MAP__FUNCTION ); +if (!map) +return -1 ; + + map->end = xm->end; + map->pgoff = xm->pgoff; + + kmap =map__kmap (map); + + kmap->kmaps = &machine->kmaps; + +map_groups__insert (&machine->kmaps, map); + +pr_debug2 ("Added extra kernel map %" PRIx64"-%" PRIx64"\n" , + map->start, map->end); + +map__put (map); + +return 0 ; +} + +static u64 find_entry_trampoline (struct dso *dso) +{ +/* Duplicates are removed so lookup all aliases */ +const char *syms[] = { +"_entry_trampoline" , +"__entry_trampoline_start" , +"entry_SYSCALL_64_trampoline" , + }; +struct symbol *sym =dso__first_symbol (dso,MAP__FUNCTION ); +unsigned int i; + +for (; sym; sym =dso__next_symbol (sym)) { +if (sym->binding !=STB_GLOBAL ) +continue ; +for (i =0 ; i <ARRAY_SIZE (syms); i++) { +if (!strcmp (sym->name, syms[i])) +return sym->start; + } + } + +return 0 ; +} + +/* +* These values can be used for kernels that do not have symbols for the entry +* trampolines in kallsyms. +*/ +#define X86_64_CPU_ENTRY_AREA_PER_CPU 0xfffffe0000000000ULL +#define X86_64_CPU_ENTRY_AREA_SIZE 0x2c000 +#define X86_64_ENTRY_TRAMPOLINE 0x6000 + +/* Map x86_64 PTI entry trampolines */ +int machine__map_x86_64_entry_trampolines (struct machine *machine, +struct dso *kernel) +{ +u64 pgoff =find_entry_trampoline (kernel); +int nr_cpus_avail, cpu; + +if (!pgoff) +return 0 ; + + nr_cpus_avail =machine__nr_cpus_avail (machine); + +/* Add a 1 page map for each CPU's entry trampoline */ +for (cpu =0 ; cpu < nr_cpus_avail; cpu++) { +u64 va =X86_64_CPU_ENTRY_AREA_PER_CPU + + cpu *X86_64_CPU_ENTRY_AREA_SIZE + +X86_64_ENTRY_TRAMPOLINE ; +struct extra_kernel_map xm = { + .start = va, + .end = va + page_size, + .pgoff = pgoff, + }; + +if (machine__create_extra_kernel_map (machine, kernel, &xm) <0 ) +return -1 ; + } + +return 0 ; +} +int __machine__create_kernel_maps (struct machine *machine,struct dso *kernel) {int type;
tools/perf/util/machine.h +3 -0
@@ -266,4 +266,7 @@ int machine__set_current_tid(struct machine *machine, int cpu, pid_t pid,*/ char *machine__resolve_kernel_addr (void *vmachine,unsigned long long *addrp,char **modp); +int machine__map_x86_64_entry_trampolines (struct machine *machine, +struct dso *kernel); +#endif /* __PERF_MACHINE_H */
tools/perf/util/symbol.c +7 -5
@@ -1513,20 +1513,22 @@ int dso__load(struct dso *dso, struct map *map) goto out; } +if (map->groups && map->groups->machine) + machine = map->groups->machine; +else + machine =NULL ; +if (dso->kernel) {if (dso->kernel ==DSO_TYPE_KERNEL ) ret =dso__load_kernel_sym (dso, map);else if (dso->kernel ==DSO_TYPE_GUEST_KERNEL ) ret =dso__load_guest_kernel_sym (dso, map); +if (machine__is (machine,"x86_64" )) +machine__map_x86_64_entry_trampolines (machine, dso); goto out; } -if (map->groups && map->groups->machine) - machine = map->groups->machine; -else - machine =NULL ; - dso->adjust_symbols =0 ;if (perfmap) {
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 47/62 perf test code-reading: Fix perf_env setup for PTI entry trampolines
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
commit f6c66d73bb8192d357bb5fb8cd5826920f811d8c upstream.
The "Object code reading" test will not create maps for the PTI entry trampolines unless the machine environment exists to show that the arch is x86_64.
--- tools/perf/tests/code-reading.c | 1 + 1 file changed, 1 insertion(+)
tools/perf/tests/code-reading.c +1 -0
@@ -527,6 +527,7 @@ static int do_test_code_reading(bool try_kcore) pid =getpid (); machine =machine__new_host (); + machine->env = &perf_env; ret =machine__create_kernel_maps (machine);if (ret <0 ) {
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 48/62 x86/mm: Move LDT remap out of KASLR region on 5-level paging
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
commit d52888aa2753e3063a9d3a0c9f72f94aa9809c15 upstream
On 5-level paging the LDT remap area is placed in the middle of the KASLR randomization region and it can overlap with the direct mapping, the vmalloc or the vmap area.
The LDT mapping is per mm, so it cannot be moved into the P4D page table next to the CPU_ENTRY_AREA without complicating PGD table allocation for 5-level paging.
The 4 PGD slot gap just before the direct mapping is reserved for hypervisors, so it cannot be used.
Move the direct mapping one slot deeper and use the resulting gap for the LDT remap area. The resulting layout is the same for 4 and 5 level paging.
[ tglx: Massaged changelog ]
--- Documentation/x86/x86_64/mm.txt | 10 ++++++---- arch/x86/include/asm/page_64_types.h | 12 +++++++----- arch/x86/include/asm/pgtable_64_types.h | 7 +++---- arch/x86/xen/mmu_pv.c | 6 +++--- 4 files changed, 19 insertions(+), 16 deletions(-)
Documentation/x86/x86_64/mm.txt +6 -4
@@ -4,8 +4,9 @@ Virtual memory map with 4 level page tables: 0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm hole caused by [47:63] sign extension ffff800000000000 - ffff87ffffffffff (=43 bits) guard hole, reserved for hypervisor -ffff880000000000 - ffffc7ffffffffff (=64 TB) direct mapping of all phys. memory -ffffc80000000000 - ffffc8ffffffffff (=40 bits) hole +ffff880000000000 - ffff887fffffffff (=39 bits) LDT remap for PTI +ffff888000000000 - ffffc87fffffffff (=64 TB) direct mapping of all phys. memory +ffffc88000000000 - ffffc8ffffffffff (=39 bits) hole ffffc90000000000 - ffffe8ffffffffff (=45 bits) vmalloc/ioremap space ffffe90000000000 - ffffe9ffffffffff (=40 bits) hole ffffea0000000000 - ffffeaffffffffff (=40 bits) virtual memory map (1TB)
@@ -30,8 +31,9 @@ Virtual memory map with 5 level page tables: 0000000000000000 - 00ffffffffffffff (=56 bits) user space, different per mm hole caused by [56:63] sign extension ff00000000000000 - ff0fffffffffffff (=52 bits) guard hole, reserved for hypervisor -ff10000000000000 - ff8fffffffffffff (=55 bits) direct mapping of all phys. memory -ff90000000000000 - ff9fffffffffffff (=52 bits) LDT remap for PTI +ff10000000000000 - ff10ffffffffffff (=48 bits) LDT remap for PTI +ff11000000000000 - ff90ffffffffffff (=55 bits) direct mapping of all phys. memory +ff91000000000000 - ff9fffffffffffff (=3840 TB) hole ffa0000000000000 - ffd1ffffffffffff (=54 bits) vmalloc/ioremap space (12800 TB) ffd2000000000000 - ffd3ffffffffffff (=49 bits) hole ffd4000000000000 - ffd5ffffffffffff (=49 bits) virtual memory map (512TB)
arch/x86/include/asm/page_64_types.h +7 -5
@@ -33,14 +33,16 @@/* * Set __PAGE_OFFSET to the most negative possible address + -* PGDIR_SIZE*16 (pgd slot 272). The gap is to allow a space for a -* hypervisor to fit. Choosing 16 slots here is arbitrary, but it's -* what Xen requires. +* PGDIR_SIZE*17 (pgd slot 273). +* +* The gap is to allow a space for LDT remap for PTI (1 pgd slot) and space for +* a hypervisor (16 slots). Choosing 16 slots for a hypervisor is arbitrary, +* but it's what Xen requires. */ #ifdef CONFIG_X86_5LEVEL -#define __PAGE_OFFSET_BASE _AC(0xff10000000000000, UL) +#define __PAGE_OFFSET_BASE _AC(0xff11000000000000, UL)#else -#define __PAGE_OFFSET_BASE _AC(0xffff880000000000, UL) +#define __PAGE_OFFSET_BASE _AC(0xffff888000000000, UL)#endif #ifdef CONFIG_RANDOMIZE_MEMORY
arch/x86/include/asm/pgtable_64_types.h +3 -4
@@ -88,16 +88,15 @@ typedef struct { pteval_t pte; } pte_t;# define VMALLOC_SIZE_TB _AC(12800, UL)# define __VMALLOC_BASE _AC(0xffa0000000000000, UL)# define __VMEMMAP_BASE _AC(0xffd4000000000000, UL) -# define LDT_PGD_ENTRY _AC(-112, UL) -# define LDT_BASE_ADDR (LDT_PGD_ENTRY << PGDIR_SHIFT)#else # define VMALLOC_SIZE_TB _AC(32, UL)# define __VMALLOC_BASE _AC(0xffffc90000000000, UL)# define __VMEMMAP_BASE _AC(0xffffea0000000000, UL) -# define LDT_PGD_ENTRY _AC(-3, UL) -# define LDT_BASE_ADDR (LDT_PGD_ENTRY << PGDIR_SHIFT)#endif +#define LDT_PGD_ENTRY -240UL +#define LDT_BASE_ADDR (LDT_PGD_ENTRY << PGDIR_SHIFT) +#ifdef CONFIG_RANDOMIZE_MEMORY # define VMALLOC_START vmalloc_base# define VMEMMAP_START vmemmap_base
arch/x86/xen/mmu_pv.c +3 -3
@@ -1869,7 +1869,7 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn) init_top_pgt[0 ] =__pgd (0 );/* Pre-constructed entries are in pfn, so convert to mfn */ -/* L4[272] -> level3_ident_pgt */ +/* L4[273] -> level3_ident_pgt */ /* L4[511] -> level3_kernel_pgt */ convert_pfn_mfn (init_top_pgt);
@@ -1889,8 +1889,8 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn) addr[0 ] = (unsigned long )pgd; addr[1 ] = (unsigned long )l3; addr[2 ] = (unsigned long )l2; -/* Graft it onto L4[272][0]. Note that we creating an aliasing problem: -* Both L4[272][0] and L4[511][510] have entries that point to the same +/* Graft it onto L4[273][0]. Note that we creating an aliasing problem: +* Both L4[273][0] and L4[511][510] have entries that point to the same * L2 (PMD) tables. Meaning that if you modify it in __va space * it will be also modified in the __ka space! (But if you just * modify the PMD table to point to other PTE's or none, then you
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 49/62 x86/ldt: Unmap PTEs for the slot before freeing LDT pages
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
commit a0e6e0831c516860fc7f9be1db6c081fe902ebcf upstream
modify_ldt(2) leaves the old LDT mapped after switching over to the new one. The old LDT gets freed and the pages can be re-used.
Leaving the mapping in place can have security implications. The mapping is present in the userspace page tables and Meltdown-like attacks can read these freed and possibly reused pages.
It's relatively simple to fix: unmap the old LDT and flush TLB before freeing the old LDT memory.
This further allows to avoid flushing the TLB in map_ldt_struct() as the slot is unmapped and flushed by unmap_ldt_struct() or has never been mapped at all.
[ tglx: Massaged changelog and removed the needless line breaks ]
--- arch/x86/kernel/ldt.c | 49 +++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 13 deletions(-)
arch/x86/kernel/ldt.c +36 -13
@@ -103,14 +103,6 @@ static struct ldt_struct *alloc_ldt_struct(unsigned int num_entries)/* * If PTI is enabled, this maps the LDT into the kernelmode and * usermode tables for the given mm. -* -* There is no corresponding unmap function. Even if the LDT is freed, we -* leave the PTEs around until the slot is reused or the mm is destroyed. -* This is harmless: the LDT is always in ordinary memory, and no one will -* access the freed slot. -* -* If we wanted to unmap freed LDTs, we'd also need to do a flush to make -* it useful, and the flush would slow down modify_ldt(). */ static int map_ldt_struct (struct mm_struct *mm,struct ldt_struct *ldt,int slot)
@@ -119,8 +111,8 @@ map_ldt_struct(struct mm_struct *mm, struct ldt_struct *ldt, int slot)bool is_vmalloc, had_top_level_entry;unsigned long va;spinlock_t *ptl; +int i, nr_pages;pgd_t *pgd; -int i;if (!static_cpu_has (X86_FEATURE_PTI ))return 0 ;
@@ -141,7 +133,9 @@ map_ldt_struct(struct mm_struct *mm, struct ldt_struct *ldt, int slot) is_vmalloc =is_vmalloc_addr (ldt->entries); -for (i =0 ; i *PAGE_SIZE < ldt->nr_entries *LDT_ENTRY_SIZE ; i++) { + nr_pages =DIV_ROUND_UP (ldt->nr_entries *LDT_ENTRY_SIZE ,PAGE_SIZE ); + +for (i =0 ; i < nr_pages; i++) {unsigned long offset = i <<PAGE_SHIFT ;const void *src = (char *)ldt->entries + offset;unsigned long pfn;
@@ -189,14 +183,42 @@ map_ldt_struct(struct mm_struct *mm, struct ldt_struct *ldt, int slot) } } - va = (unsigned long )ldt_slot_va (slot); -flush_tlb_mm_range (mm, va, va +LDT_SLOT_STRIDE ,0 ); - ldt->slot = slot;#endif return 0 ; } +static void unmap_ldt_struct (struct mm_struct *mm,struct ldt_struct *ldt) +{ +#ifdef CONFIG_PAGE_TABLE_ISOLATION +unsigned long va; +int i, nr_pages; + +if (!ldt) +return ; + +/* LDT map/unmap is only required for PTI */ +if (!static_cpu_has (X86_FEATURE_PTI )) +return ; + + nr_pages =DIV_ROUND_UP (ldt->nr_entries *LDT_ENTRY_SIZE ,PAGE_SIZE ); + +for (i =0 ; i < nr_pages; i++) { +unsigned long offset = i <<PAGE_SHIFT ; +spinlock_t *ptl; +pte_t *ptep; + + va = (unsigned long )ldt_slot_va (ldt->slot) + offset; + ptep =get_locked_pte (mm, va, &ptl); +pte_clear (mm, va, ptep); +pte_unmap_unlock (ptep, ptl); + } + + va = (unsigned long )ldt_slot_va (ldt->slot); +flush_tlb_mm_range (mm, va, va + nr_pages *PAGE_SIZE ,0 ); +#endif /* CONFIG_PAGE_TABLE_ISOLATION */ +} +static void free_ldt_pgtables (struct mm_struct *mm) {#ifdef CONFIG_PAGE_TABLE_ISOLATION
@@ -433,6 +455,7 @@ static int write_ldt(void __user *ptr, unsigned long bytecount, int oldmode) }install_ldt (mm, new_ldt); +unmap_ldt_struct (mm, old_ldt);free_ldt_struct (old_ldt); error =0 ;
Signature · 1 line
2.17.1
Greg Kroah-Hartman
maintainerPATCH 55/62 usb: quirks: Add delay-init quirk for Corsair K70 LUX RGB
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Emmanuel Pescosta <[email protected]>
commit a77112577667cbda7c6292c52d909636aef31fd9 upstream.
Following on from this patch: https://lkml.org/lkml/2017/11/3/516,
Corsair K70 LUX RGB keyboards also require the DELAY_INIT quirk to start correctly at boot.
Dmesg output:
usb 1-6: string descriptor 0 read error: -110
usb 1-6: New USB device found, idVendor=1b1c, idProduct=1b33 usb 1-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 1-6: can't set config #1, error -110
--- drivers/usb/core/quirks.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/usb/core/quirks.c +3 -0
@@ -243,6 +243,9 @@ static const struct usb_device_id usb_qu { USB_DEVICE(0x1b1c, 0x1b20), .driver_info = USB_QUIRK_DELAY_INIT | USB_QUIRK_DELAY_CTRL_MSG }, + /* Corsair K70 LUX RGB */ + { USB_DEVICE(0x1b1c, 0x1b33), .driver_info = USB_QUIRK_DELAY_INIT }, + /* Corsair K70 LUX */ { USB_DEVICE(0x1b1c, 0x1b36), .driver_info = USB_QUIRK_DELAY_INIT },
Greg Kroah-Hartman
maintainerPATCH 58/62 mtd: rawnand: atmel: fix OF child-node lookup
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johan Hovold <[email protected]>
commit 5d1e9c2212ea6b4dd735e4fc3dd6279a365d5d10 upstream.
Use the new of_get_compatible_child() helper to lookup the nfc child node instead of using of_find_compatible_node(), which searches the entire tree from a given start node and thus can return an unrelated (i.e. non-child) node.
This also addresses a potential use-after-free (e.g. after probe deferral) as the tree-wide helper drops a reference to its first argument (i.e. the node of the device being probed).
While at it, also fix a related nfc-node reference leak.
--- drivers/mtd/nand/atmel/nand-controller.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
drivers/mtd/nand/atmel/nand-controller.c +7 -4
@@ -2077,8 +2077,7 @@ atmel_hsmc_nand_controller_legacy_init(sint ret; nand_np = dev->of_node; - nfc_np =of_find_compatible_node (dev->of_node,NULL , -"atmel,sama5d3-nfc" ); + nfc_np =of_get_compatible_child (dev->of_node,"atmel,sama5d3-nfc" );if (!nfc_np) {dev_err (dev,"Could not find device node for sama5d3-nfc\n" );return -ENODEV ;
@@ -2492,15 +2491,19 @@ static int atmel_nand_controller_probe(s }if (caps->legacy_of_bindings) { +struct device_node *nfc_node;u32 ale_offs =21 ;/* * If we are parsing legacy DT props and the DT contains a * valid NFC node, forward the request to the sama5 logic. */ -if (of_find_compatible_node (pdev->dev.of_node,NULL , -"atmel,sama5d3-nfc" )) + nfc_node =of_get_compatible_child (pdev->dev.of_node, +"atmel,sama5d3-nfc" ); +if (nfc_node) { caps = &atmel_sama5_nand_caps; +of_node_put (nfc_node); + }/* * Even if the compatible says we are dealing with an
Greg Kroah-Hartman
maintainercover 4.14.84-stable review
This is the start of the stable review cycle for the 4.14.84 release. There are 62 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Nov 28 10:50:20 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.14.84-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.14.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 4.14.84-rc1
Ilya Dryomov <[email protected]>
libceph: fall back to sendmsg for slab pages
Eric Biggers <[email protected]>
HID: uhid: forbid UHID_CREATE under KERNEL_DS or elevated privileges
Hans de Goede <[email protected]>
ACPI / platform: Add SMB0001 HID to forbidden_id_list
Gustavo A. R. Silva <[email protected]>
drivers/misc/sgi-gru: fix Spectre v1 vulnerability
Johan Hovold <[email protected]>
mtd: rawnand: atmel: fix OF child-node lookup
Mattias Jacobsson <[email protected]>
USB: misc: appledisplay: add 20" Apple Cinema Display
Nathan Chancellor <[email protected]>
misc: atmel-ssc: Fix section annotation on atmel_ssc_get_driver_data
Emmanuel Pescosta <[email protected]>
usb: quirks: Add delay-init quirk for Corsair K70 LUX RGB
Kai-Heng Feng <[email protected]>
USB: quirks: Add no-lpm quirk for Raydium touchscreens
Maarten Jacobs <[email protected]>
usb: cdc-acm: add entry for Hiro (Conexant) modem
Dan Carpenter <[email protected]>
uio: Fix an Oops on load
Aaro Koskinen <[email protected]>
MIPS: OCTEON: cavium_octeon_defconfig: re-enable OCTEON USB driver
Sakari Ailus <[email protected]>
media: v4l: event: Add subscription to list before calling "add" operation
Kirill A. Shutemov <[email protected]>
x86/ldt: Unmap PTEs for the slot before freeing LDT pages
Kirill A. Shutemov <[email protected]>
x86/mm: Move LDT remap out of KASLR region on 5-level paging
Adrian Hunter <[email protected]>
perf test code-reading: Fix perf_env setup for PTI entry trampolines
Adrian Hunter <[email protected]>
perf machine: Workaround missing maps for x86 PTI entry trampolines
Adrian Hunter <[email protected]>
perf machine: Add nr_cpus_avail()
Adrian Hunter <[email protected]>
perf tools: Fix kernel_start for PTI on x86
Adrian Hunter <[email protected]>
perf machine: Add machine__is() to identify machine arch
Mika Westerberg <[email protected]>
ACPI / watchdog: Prefer iTCO_wdt always when WDAT table uses RTC SRAM
YueHaibing <[email protected]>
SUNRPC: drop pointless static qualifier in xdr_get_next_encode_buffer()
Minchan Kim <[email protected]>
zram: close udev startup race condition as default groups
Thor Thayer <[email protected]>
net: stmmac: Fix RX packet size > 8191
Sagiv Ozeri <[email protected]>
qed: Fix potential memory corruption
Denis Bolotin <[email protected]>
qed: Fix blocking/unlimited SPQ entries leak
Denis Bolotin <[email protected]>
qed: Fix memory/entry leak in qed_init_sp_request()
Jacob Keller <[email protected]>
i40e: restore NETIF_F_GSO_IPXIP[46] to netdev features
Gustavo Romero <[email protected]>
perf tools: Fix undefined symbol scnprintf in libperf-jvmti.so
Valentin Schneider <[email protected]>
sched/core: Take the hotplug lock in sched_init_smp()
Vignesh R <[email protected]>
i2c: omap: Enable for ARCH_K3
Thomas Richter <[email protected]>
s390/perf: Change CPUM_CF return code in event init function
Jeremy Linton <[email protected]>
lib/raid6: Fix arm64 test build
Ricardo Ribalda Delgado <[email protected]>
clk: fixed-factor: fix of_node_get-put imbalance
Inki Dae <[email protected]>
Revert "drm/exynos/decon5433: implement frame counter"
Geert Uytterhoeven <[email protected]>
hwmon: (ibmpowernv) Remove bogus __init annotations
Julian Wiedmann <[email protected]>
s390/qeth: fix HiperSockets sniffer
Taehee Yoo <[email protected]>
netfilter: xt_IDLETIMER: add sysfs filename checking routine
Jozsef Kadlecsik <[email protected]>
netfilter: ipset: Correct rcu_dereference() call in ip_set_put_comment()
Justin M. Forbes <[email protected]>
s390/mm: Fix ERROR: "__node_distance" undefined!
Eric Westbrook <[email protected]>
netfilter: ipset: actually allow allowable CIDR 0 in hash:net,port,net
Stefano Brivio <[email protected]>
netfilter: ipset: list:set: Decrease refcount synchronously on deletion and replace
Vasily Gorbik <[email protected]>
s390/vdso: add missing FORCE to build targets
Nathan Chancellor <[email protected]>
arm64: percpu: Initialize ret in the default case
Paul Gortmaker <[email protected]>
platform/x86: acerhdf: Add BIOS entry for Gateway LT31 v1.3307
Feng Tang <[email protected]>
x86/earlyprintk: Add a force option for pciserial device
Zubin Mithra <[email protected]>
apparmor: Fix uninitialized value in aa_split_fqname
Marek Szyprowski <[email protected]>
clk: samsung: exynos5420: Enable PERIS clocks for suspend
Chengguang Xu <[email protected]>
fs/exofs: fix potential memory leak in mount option parsing
David Miller <[email protected]>
perf symbols: Set PLT entry/header sizes properly on Sparc
Alan Tull <[email protected]>
clk: fixed-rate: fix of_node_get-put imbalance
Rajneesh Bhardwaj <[email protected]>
platform/x86: intel_telemetry: report debugfs failure
Lee, Shawn C <[email protected]>
drm/edid: Add 6 bpc quirk for BOE panel.
Richard Weinberger <[email protected]>
um: Give start_idle_thread() a return code
Ernesto A. Fernández <[email protected]>
hfsplus: prevent btree data loss on root split
Ernesto A. Fernández <[email protected]>
hfs: prevent btree data loss on root split
Jann Horn <[email protected]>
reiserfs: propagate errors from fill_with_dentries() properly
Radoslaw Tyl <[email protected]>
ixgbe: fix MAC anti-spoofing filter after VFLR
Keith Busch <[email protected]>
nvme-pci: fix conflicting p2p resource adds
Anders Roxell <[email protected]>
arm64: kprobe: make page to RO mode when allocate it
Ronnie Sahlberg <[email protected]>
cifs: fix return value for cifs_listxattr
Colin Ian King <[email protected]>
cifs: don't dereference smb_file_target before null check
-------------
Diffstat:
Documentation/admin-guide/kernel-parameters.txt | 6 +- Documentation/x86/x86_64/mm.txt | 10 +- Makefile | 4 +- arch/arm64/include/asm/percpu.h | 3 + arch/arm64/kernel/probes/kprobes.c | 27 +++-- arch/mips/configs/cavium_octeon_defconfig | 1 + arch/s390/kernel/perf_cpum_cf.c | 2 +- arch/s390/kernel/vdso32/Makefile | 6 +- arch/s390/kernel/vdso64/Makefile | 6 +- arch/s390/numa/numa.c | 1 + arch/um/os-Linux/skas/process.c | 5 + arch/x86/include/asm/page_64_types.h | 12 ++- arch/x86/include/asm/pgtable_64_types.h | 7 +- arch/x86/kernel/early_printk.c | 29 ++++-- arch/x86/kernel/ldt.c | 49 ++++++--- arch/x86/xen/mmu_pv.c | 6 +- drivers/acpi/acpi_platform.c | 1 + drivers/acpi/acpi_watchdog.c | 72 ++++++++----- drivers/block/zram/zram_drv.c | 26 ++--- drivers/clk/clk-fixed-factor.c | 1 + drivers/clk/clk-fixed-rate.c | 1 + drivers/clk/samsung/clk-exynos5420.c | 1 + drivers/gpu/drm/drm_edid.c | 3 + drivers/gpu/drm/exynos/exynos5433_drm_decon.c | 9 -- drivers/gpu/drm/exynos/exynos_drm_crtc.c | 11 -- drivers/gpu/drm/exynos/exynos_drm_drv.h | 1 - drivers/hid/uhid.c | 12 +++ drivers/hwmon/ibmpowernv.c | 7 +- drivers/i2c/busses/Kconfig | 2 +- drivers/media/v4l2-core/v4l2-event.c | 43 ++++---- drivers/misc/atmel-ssc.c | 2 +- drivers/misc/sgi-gru/grukdump.c | 4 + drivers/mtd/nand/atmel/nand-controller.c | 11 +- drivers/net/ethernet/intel/i40e/i40e_main.c | 2 + drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 4 +- drivers/net/ethernet/qlogic/qed/qed_sp.h | 3 + drivers/net/ethernet/qlogic/qed/qed_sp_commands.c | 16 ++- drivers/net/ethernet/qlogic/qed/qed_spq.c | 69 ++++++------- drivers/net/ethernet/stmicro/stmmac/common.h | 3 +- drivers/net/ethernet/stmicro/stmmac/descs_com.h | 2 +- drivers/net/ethernet/stmicro/stmmac/enh_desc.c | 2 +- drivers/net/ethernet/stmicro/stmmac/ring_mode.c | 2 +- drivers/nvme/host/pci.c | 5 +- drivers/platform/x86/acerhdf.c | 1 + drivers/platform/x86/intel_telemetry_debugfs.c | 8 +- drivers/s390/net/qeth_l3_main.c | 8 +- drivers/uio/uio.c | 7 +- drivers/usb/class/cdc-acm.c | 3 + drivers/usb/core/quirks.c | 8 ++ drivers/usb/misc/appledisplay.c | 1 + fs/cifs/cifsfs.c | 7 +- fs/cifs/smb2ops.c | 11 +- fs/exofs/super.c | 5 +- fs/hfs/brec.c | 4 + fs/hfsplus/brec.c | 4 + fs/reiserfs/xattr.c | 7 ++ include/linux/netfilter/ipset/ip_set.h | 2 +- include/linux/netfilter/ipset/ip_set_comment.h | 4 +- kernel/sched/core.c | 5 +- lib/raid6/test/Makefile | 4 +- net/ceph/messenger.c | 12 ++- net/netfilter/ipset/ip_set_core.c | 23 ++--- net/netfilter/ipset/ip_set_hash_netportnet.c | 8 +- net/netfilter/ipset/ip_set_list_set.c | 17 ++-- net/netfilter/xt_IDLETIMER.c | 20 ++++ net/sunrpc/xdr.c | 2 +- security/apparmor/lib.c | 6 +- tools/perf/jvmti/jvmti_agent.c | 49 +++++++-- tools/perf/tests/code-reading.c | 1 + tools/perf/util/env.c | 32 ++++++ tools/perf/util/env.h | 4 + tools/perf/util/machine.c | 117 +++++++++++++++++++++- tools/perf/util/machine.h | 6 ++ tools/perf/util/symbol-elf.c | 12 ++- tools/perf/util/symbol.c | 12 ++- 75 files changed, 637 insertions(+), 262 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 50/62 media: v4l: event: Add subscription to list before calling "add" operation
4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sakari Ailus <[email protected]>
commit 92539d3eda2c090b382699bbb896d4b54e9bdece upstream.
Patch ad608fbcf166 changed how events were subscribed to address an issue elsewhere. As a side effect of that change, the "add" callback was called before the event subscription was added to the list of subscribed events, causing the first event queued by the add callback (and possibly other events arriving soon afterwards) to be lost.
Fix this by adding the subscription to the list before calling the "add" callback, and clean up afterwards if that fails.
--- drivers/media/v4l2-core/v4l2-event.c | 43 +++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 19 deletions(-)
drivers/media/v4l2-core/v4l2-event.c +24 -19
@@ -193,6 +193,22 @@ int v4l2_event_pending(struct v4l2_fh *f }EXPORT_SYMBOL_GPL (v4l2_event_pending); +static void __v4l2_event_unsubscribe (struct v4l2_subscribed_event *sev) +{ +struct v4l2_fh *fh = sev->fh; +unsigned int i; + +lockdep_assert_held (&fh->subscribe_lock); +assert_spin_locked (&fh->vdev->fh_lock); + +/* Remove any pending events for this subscription */ +for (i =0 ; i < sev->in_use; i++) { +list_del (&sev->events[sev_pos (sev, i)].list); + fh->navailable--; + } +list_del (&sev->list); +} +int v4l2_event_subscribe (struct v4l2_fh *fh,const struct v4l2_event_subscription *sub,unsigned elems,const struct v4l2_subscribed_event_ops *ops)
@@ -225,27 +241,23 @@ int v4l2_event_subscribe(struct v4l2_fhspin_lock_irqsave (&fh->vdev->fh_lock, flags); found_ev =v4l2_event_subscribed (fh, sub->type, sub->id); +if (!found_ev) +list_add (&sev->list, &fh->subscribed);spin_unlock_irqrestore (&fh->vdev->fh_lock, flags);if (found_ev) {/* Already listening */ kvfree (sev); - goto out_unlock; - } - -if (sev->ops && sev->ops->add) { + }else if (sev->ops && sev->ops->add) { ret = sev->ops->add (sev, elems);if (ret) { +spin_lock_irqsave (&fh->vdev->fh_lock, flags); +__v4l2_event_unsubscribe (sev); +spin_unlock_irqrestore (&fh->vdev->fh_lock, flags);kvfree (sev); - goto out_unlock; } } -spin_lock_irqsave (&fh->vdev->fh_lock, flags); -list_add (&sev->list, &fh->subscribed); -spin_unlock_irqrestore (&fh->vdev->fh_lock, flags); - -out_unlock:mutex_unlock (&fh->subscribe_lock);return ret;
@@ -280,7 +292,6 @@ int v4l2_event_unsubscribe(struct v4l2_f {struct v4l2_subscribed_event *sev;unsigned long flags; -int i;if (sub->type ==V4L2_EVENT_ALL ) {v4l2_event_unsubscribe_all (fh);
@@ -292,14 +303,8 @@ int v4l2_event_unsubscribe(struct v4l2_fspin_lock_irqsave (&fh->vdev->fh_lock, flags); sev =v4l2_event_subscribed (fh, sub->type, sub->id); -if (sev !=NULL ) { -/* Remove any pending events for this subscription */ -for (i =0 ; i < sev->in_use; i++) { -list_del (&sev->events[sev_pos (sev, i)].list); - fh->navailable--; - } -list_del (&sev->list); - } +if (sev !=NULL ) +__v4l2_event_unsubscribe (sev);spin_unlock_irqrestore (&fh->vdev->fh_lock, flags);
Greg Kroah-Hartman
maintainerPATCH 51/62 MIPS: OCTEON: cavium_octeon_defconfig: re-enable OCTEON USB driver
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Aaro Koskinen <[email protected]>
commit 82fba2df7f7c019627f24c5036dc99f41731d770 upstream.
Re-enable OCTEON USB driver which is needed on older hardware (e.g. EdgeRouter Lite) for mass storage etc. This got accidentally deleted when config options were changed for OCTEON2/3 USB.
Patchwork: https://patchwork.linux-mips.org/patch/21077/
--- arch/mips/configs/cavium_octeon_defconfig | 1 + 1 file changed, 1 insertion(+)
arch/mips/configs/cavium_octeon_defconfig +1 -0
@@ -140,6 +140,7 @@ CONFIG_RTC_CLASS=y CONFIG_RTC_DRV_DS1307=y CONFIG_STAGING=y CONFIG_OCTEON_ETHERNET=y +CONFIG_OCTEON_USB=y # CONFIG_IOMMU_SUPPORT is not set CONFIG_RAS=y CONFIG_EXT4_FS=y
Greg Kroah-Hartman
maintainerPATCH 52/62 uio: Fix an Oops on load
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <[email protected]>
commit 432798195bbce1f8cd33d1c0284d0538835e25fb upstream.
I was trying to solve a double free but I introduced a more serious NULL dereference bug. The problem is that if there is an IRQ which triggers immediately, then we need "info->uio_dev" but it's not set yet.
This patch puts the original initialization back to how it was and just sets info->uio_dev to NULL on the error path so it should solve both the Oops and the double free.
--- drivers/uio/uio.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/uio/uio.c +5 -2
@@ -850,6 +850,8 @@ int __uio_register_device(struct moduleif (ret) goto err_uio_dev_add_attributes; + info->uio_dev = idev; +if (info->irq && (info->irq !=UIO_IRQ_CUSTOM )) {/* * Note that we deliberately don't use devm_request_irq
@@ -861,11 +863,12 @@ int __uio_register_device(struct module*/ ret =request_irq (info->irq, uio_interrupt, info->irq_flags, info->name, idev); -if (ret) +if (ret) { + info->uio_dev =NULL ; goto err_request_irq; + } } - info->uio_dev = idev;return 0 ; err_request_irq:
Greg Kroah-Hartman
maintainerPATCH 53/62 usb: cdc-acm: add entry for Hiro (Conexant) modem
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Maarten Jacobs <[email protected]>
commit 63529eaa6164ef7ab4b907b25ac3648177e5e78f upstream.
The cdc-acm kernel module currently does not support the Hiro (Conexant) H05228 USB modem. The patch below adds the device specific information:
idVendor 0x0572 idProduct 0x1349
--- drivers/usb/class/cdc-acm.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/usb/class/cdc-acm.c +3 -0
@@ -1724,6 +1724,9 @@ static const struct usb_device_id acm_id { USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */ .driver_info =NO_UNION_NORMAL ,/* has no union descriptor */ }, + { USB_DEVICE(0x0572, 0x1349), /* Hiro (Conexant) USB MODEM H50228 */ + .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ + }, { USB_DEVICE(0x20df, 0x0001), /* Simtec Electronics Entropy Key */ .driver_info = QUIRK_CONTROL_LINE_STATE, }, { USB_DEVICE(0x2184, 0x001c) }, /* GW Instek AFG-2225 */
Greg Kroah-Hartman
maintainerPATCH 54/62 USB: quirks: Add no-lpm quirk for Raydium touchscreens
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kai-Heng Feng <[email protected]>
commit deefd24228a172d1b27d4a9adbfd2cdacd60ae64 upstream.
Raydium USB touchscreen fails to set config if LPM is enabled:
[ 2.030658] usb 1-8: New USB device found, idVendor=2386, idProduct=3119 [ 2.030659] usb 1-8: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 2.030660] usb 1-8: Product: Raydium Touch System [ 2.030661] usb 1-8: Manufacturer: Raydium Corporation [ 7.132209] usb 1-8: can't set config #1, error -110
Same behavior can be observed on 2386:3114.
Raydium claims the touchscreen supports LPM under Windows, so I used Microsoft USB Test Tools (MUTT) [1] to check its LPM status. MUTT shows that the LPM doesn't work under Windows, either. So let's just disable LPM for Raydium touchscreens.
[1] https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/usb-test-tools
--- drivers/usb/core/quirks.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/usb/core/quirks.c +5 -0
@@ -263,6 +263,11 @@ static const struct usb_device_id usb_qu { USB_DEVICE(0x2040, 0x7200), .driver_info = USB_QUIRK_CONFIG_INTF_STRINGS }, + /* Raydium Touchscreen */ + { USB_DEVICE(0x2386, 0x3114), .driver_info = USB_QUIRK_NO_LPM }, + + { USB_DEVICE(0x2386, 0x3119), .driver_info = USB_QUIRK_NO_LPM }, + /* DJI CineSSD */ { USB_DEVICE(0x2ca3, 0x0031), .driver_info = USB_QUIRK_NO_LPM },
Greg Kroah-Hartman
maintainerPATCH 56/62 misc: atmel-ssc: Fix section annotation on atmel_ssc_get_driver_data
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nathan Chancellor <[email protected]>
commit 7c97301285b62a41d6bceded7d964085fc8cc50f upstream.
After building the kernel with Clang, the following section mismatch warning appears:
WARNING: vmlinux.o(.text+0x3bf19a6): Section mismatch in reference from the function ssc_probe() to the function .init.text:atmel_ssc_get_driver_data()
The function ssc_probe() references
the function __init atmel_ssc_get_driver_data().
This is often because ssc_probe lacks a __init
annotation or the annotation of atmel_ssc_get_driver_data is wrong.
Remove __init from atmel_ssc_get_driver_data to get rid of the mismatch.
--- drivers/misc/atmel-ssc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/misc/atmel-ssc.c +1 -1
@@ -132,7 +132,7 @@ static const struct of_device_id atmel_sMODULE_DEVICE_TABLE (of, atmel_ssc_dt_ids);#endif -static inline const struct atmel_ssc_platform_data *__init +static inline const struct atmel_ssc_platform_data *atmel_ssc_get_driver_data (struct platform_device *pdev) {if (pdev->dev.of_node) {
Greg Kroah-Hartman
maintainerPATCH 57/62 USB: misc: appledisplay: add 20" Apple Cinema Display
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mattias Jacobsson <[email protected]>
commit f6501f49199097b99e4e263644d88c90d1ec1060 upstream.
Add another Apple Cinema Display to the list of supported displays
--- drivers/usb/misc/appledisplay.c | 1 + 1 file changed, 1 insertion(+)
drivers/usb/misc/appledisplay.c +1 -0
@@ -63,6 +63,7 @@ static const struct usb_device_id appled { APPLEDISPLAY_DEVICE(0x9219) }, { APPLEDISPLAY_DEVICE(0x921c) }, { APPLEDISPLAY_DEVICE(0x921d) }, + { APPLEDISPLAY_DEVICE(0x9222) }, { APPLEDISPLAY_DEVICE(0x9236) },/* Terminating entry */
Greg Kroah-Hartman
maintainerPATCH 59/62 drivers/misc/sgi-gru: fix Spectre v1 vulnerability
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gustavo A. R. Silva <[email protected]>
commit fee05f455ceb5c670cbe48e2f9454ebc4a388554 upstream.
req.gid can be indirectly controlled by user-space, hence leading to a potential exploitation of the Spectre variant 1 vulnerability.
This issue was detected with the help of Smatch:
vers/misc/sgi-gru/grukdump.c:200 gru_dump_chiplet_request() warn:
potential spectre issue 'gru_base' [w]
Fix this by sanitizing req.gid before calling macro GID_TO_GRU, which uses it to index gru_base.
Notice that given that speculation windows are large, the policy is to kill the speculation on the first load and not worry if it can be completed with a dependent load/store [1].
[1] https://marc.info/?l=linux-kernel&m=152449131114778&w=2
--- drivers/misc/sgi-gru/grukdump.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/misc/sgi-gru/grukdump.c +4 -0
@@ -27,6 +27,9 @@#include <linux/delay.h> #include <linux/bitops.h> #include <asm/uv/uv_hub.h> + +#include <linux/nospec.h> +#include "gru.h" #include "grutables.h" #include "gruhandles.h"
@@ -196,6 +199,7 @@ int gru_dump_chiplet_request(unsigned lo/* Currently, only dump by gid is implemented */ if (req.gid >= gru_max_gids)return -EINVAL ; + req.gid =array_index_nospec (req.gid, gru_max_gids); gru =GID_TO_GRU (req.gid); ubuf = req.buf;
Greg Kroah-Hartman
maintainerPATCH 60/62 ACPI / platform: Add SMB0001 HID to forbidden_id_list
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
commit 2bbb5fa37475d7aa5fa62f34db1623f3da2dfdfa upstream.
Many HP AMD based laptops contain an SMB0001 device like this:
Device (SMBD)
{
Name (_HID, "SMB0001") // _HID: Hardware ID
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IO (Decode16,
0x0B20, // Range Minimum
0x0B20, // Range Maximum
0x20, // Alignment
0x20, // Length
)
IRQ (Level, ActiveLow, Shared, )
{7}
})
}The legacy style IRQ resource here causes acpi_dev_get_irqresource() to be called with legacy=true and this message to show in dmesg:
ACPI: IRQ 7 override to edge, high
This causes issues when later on the AMD0030 GPIO device gets enumerated:
Device (GPIO)
{
Name (_HID, "AMDI0030") // _HID: Hardware ID
Name (_CID, "AMDI0030") // _CID: Compatible ID
Name (_UID, Zero) // _UID: Unique ID
Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings
{
Name (RBUF, ResourceTemplate ()
{
Interrupt (ResourceConsumer, Level, ActiveLow, Shared, ,, )
{
0x00000007,
}
Memory32Fixed (ReadWrite,
0xFED81500, // Address Base
0x00000400, // Address Length
)
})
Return (RBUF) /* \_SB_.GPIO._CRS.RBUF */
}
}Now acpi_dev_get_irqresource() gets called with legacy=false, but because of the earlier override of the trigger-type acpi_register_gsi() returns -EBUSY (because we try to register the same interrupt with a different trigger-type) and we end up setting IORESOURCE_DISABLED in the flags.
The setting of IORESOURCE_DISABLED causes platform_get_irq() to call acpi_irq_get() which is not implemented on x86 and returns -EINVAL. resulting in the following in dmesg:
amd_gpio AMDI0030:00: Failed to get gpio IRQ: -22amd_gpio: probe of AMDI0030:00 failed with error -22
The SMB0001 is a "virtual" device in the sense that the only way the OS interacts with it is through calling a couple of methods to do SMBus transfers. As such it is weird that it has IO and IRQ resources at all, because the driver for it is not expected to ever access the hardware directly.
The Linux driver for the SMB0001 device directly binds to the acpi_device through the acpi_bus, so we do not need to instantiate a platform_device for this ACPI device. This commit adds the SMB0001 HID to the forbidden_id_list, avoiding the instantiating of a platform_device for it. Not instantiating a platform_device means we will no longer call acpi_dev_get_irqresource() for the legacy IRQ resource fixing the probe of the AMDI0030 device failing.
--- drivers/acpi/acpi_platform.c | 1 + 1 file changed, 1 insertion(+)
drivers/acpi/acpi_platform.c +1 -0
@@ -30,6 +30,7 @@ static const struct acpi_device_id forbi {"PNP0200", 0}, /* AT DMA Controller */ {"ACPI0009", 0}, /* IOxAPIC */ {"ACPI000A", 0}, /* IOAPIC */ + {"SMB0001", 0}, /* ACPI SMBUS virtual device */ {"", 0}, };
Greg Kroah-Hartman
maintainerPATCH 61/62 HID: uhid: forbid UHID_CREATE under KERNEL_DS or elevated privileges
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Biggers <[email protected]>
commit 8c01db7619f07c85c5cd81ec5eb83608b56c88f5 upstream.
When a UHID_CREATE command is written to the uhid char device, a copy_from_user() is done from a user pointer embedded in the command. When the address limit is KERNEL_DS, e.g. as is the case during sys_sendfile(), this can read from kernel memory. Alternatively, information can be leaked from a setuid binary that is tricked to write to the file descriptor. Therefore, forbid UHID_CREATE in these cases.
No other commands in uhid_char_write() are affected by this bug and UHID_CREATE is marked as "obsolete", so apply the restriction to UHID_CREATE only rather than to uhid_char_write() entirely.
Thanks to Dmitry Vyukov for adding uhid definitions to syzkaller and to Jann Horn for commit 9da3f2b740544 ("x86/fault: BUG() when uaccess helpers fault on kernel addresses"), allowing this bug to be found.
--- drivers/hid/uhid.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
drivers/hid/uhid.c +12 -0
@@ -12,6 +12,7 @@#include <linux/atomic.h> #include <linux/compat.h> +#include <linux/cred.h> #include <linux/device.h> #include <linux/fs.h> #include <linux/hid.h>
@@ -722,6 +723,17 @@ static ssize_t uhid_char_write(struct fiswitch (uhid->input_buf.type) {case UHID_CREATE : +/* +* 'struct uhid_create_req' contains a __user pointer which is +* copied from, so it's unsafe to allow this with elevated +* privileges (e.g. from a setuid binary) or via kernel_write(). +*/ +if (file->f_cred !=current_cred () ||uaccess_kernel ()) { +pr_err_once ("UHID_CREATE from different security context by process %d (%s), this is not allowed.\n" , +task_tgid_vnr (current), current->comm); + ret = -EACCES ; + goto unlock; + } ret =uhid_dev_create (uhid, &uhid->input_buf);break ;case UHID_CREATE2 :
Greg Kroah-Hartman
maintainerPATCH 62/62 libceph: fall back to sendmsg for slab pages
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ilya Dryomov <[email protected]>
commit 7e241f647dc7087a0401418a187f3f5b527cc690 upstream.
skb_can_coalesce() allows coalescing neighboring slab objects into a single frag:
return page == skb_frag_page(frag) &&
off == frag->page_offset + skb_frag_size(frag);ceph_tcp_sendpage() can be handed slab pages. One example of this is
XFS: it passes down sector sized slab objects for its metadata I/O. If the kernel client is co-located on the OSD node, the skb may go through loopback and pop on the receive side with the exact same set of frags. When tcp_recvmsg() attempts to copy out such a frag, hardened usercopy complains because the size exceeds the object's allocated size:
usercopy: kernel memory exposure attempt detected from ffff9ba917f20a00 (kmalloc-512) (1024 bytes)
Although skb_can_coalesce() could be taught to return false if the resulting frag would cross a slab object boundary, we already have a fallback for non-refcounted pages. Utilize it for slab pages too.
--- net/ceph/messenger.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)
net/ceph/messenger.c +9 -3
@@ -594,9 +594,15 @@ static int ceph_tcp_sendpage(struct sockstruct bio_vec bvec;int ret; -/* sendpage cannot properly handle pages with page_count == 0, -* we need to fallback to sendmsg if that's the case */ -if (page_count (page) >=1 ) +/* +* sendpage cannot properly handle pages with page_count == 0, +* we need to fall back to sendmsg if that's the case. +* +* Same goes for slab pages: skb_can_coalesce() allows +* coalescing neighboring slab objects into a single frag which +* triggers one of hardened usercopy checks. +*/ +if (page_count (page) >=1 && !PageSlab (page))return __ceph_tcp_sendpage (sock, page, offset, size, more); bvec.bv_page = page;
Re: [PATCH 4.14 32/62] i2c: omap: Enable for ARCH_K3
In reply to Greg Kroah-HartmanHi Greg,
Quoted 1 line · Greg Kroah-Hartman
4.14-stable review patch. If anyone has any objections, please let me know.
This patch depends on c77245722fb4 ("arm64: Add support for TI's K3 Multicore SoC architecture") which adds ARCH_K3 Kconfig symbol and merged to mainline in v4.19. Since I don't see c77245722fb4 in stable tree, could you please drop this patch from _all prior versions_ i.e 4.14, 4.9, 4.4 and 3.18. Thanks!
Quoted 29 lines
------------------
[ Upstream commit
5b277402deac0691226a947df71c581686bd4020]Allow
I2C_OMAPto be built for K3 platforms.Signed-off-by Vignesh R <[email protected]>Reviewed-by Grygorii Strashko <[email protected]>Signed-off-by Wolfram Sang <[email protected]>Signed-off-by Sasha Levin <[email protected]>--- drivers/i2c/busses/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/i2c/busses/Kconfig +1
-1@@ -759,7 +759,7 @@ config I2C_OCORES config I2C_OMAP tristate "OMAP I2C adapter" - depends on ARCH_OMAP + depends on ARCH_OMAP || ARCH_K3 default y if MACH_OMAP_H3 || MACH_OMAP_OSK help If you say yes to this option, support will be included for the
Signature · 2 lines
Regards Vignesh
Re: [PATCH 4.14 58/62] mtd: rawnand: atmel: fix OF child-node lookup
In reply to Greg Kroah-HartmanDo you see build failure arm x15 beagleboard on 4.14 due to this patch ?
Quoted 59 lines · Greg Kroah-Hartman
4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johan Hovold <[email protected]>
commit
5d1e9c2212ea6b4dd735e4fc3dd6279a365d5d10upstream.Use the new
of_get_compatible_child()helper to lookup the nfc child node instead of usingof_find_compatible_node(), which searches the entire tree from a given start node and thus can return an unrelated (i.e. non-child) node.This also addresses a potential use-after-free (e.g. after probe deferral) as the tree-wide helper drops a reference to its first argument (i.e. the node of the device being probed).
While at it, also fix a related nfc-node reference leak.
Fixes f88fc122cc34 ("mtd: nand: Cleanup/rework the atmel_nand driver")Cc stable <[email protected]> # 4.11Cc Nicolas Ferre <[email protected]>Cc Josh Wu <[email protected]>Cc Boris Brezillon <[email protected]>Signed-off-by Johan Hovold <[email protected]>Signed-off-by Boris Brezillon <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- drivers/mtd/nand/atmel/nand-controller.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)drivers/mtd/nand/atmel/nand-controller.c +2
-3@@ -2077,8 +2077,7 @@ atmel_hsmc_nand_controller_legacy_init(sint ret; nand_np = dev->of_node; - nfc_np =of_find_compatible_node (dev->of_node,NULL , -"atmel,sama5d3-nfc" ); + nfc_np =of_get_compatible_child (dev->of_node,"atmel,sama5d3-nfc" );if (!nfc_np) {dev_err (dev,"Could not find device node for sama5d3-nfc\n" );return -ENODEV ;@@ -2492,15 +2491,19 @@ static int atmel_nand_controller_probe(s }if (caps->legacy_of_bindings) { +struct device_node *nfc_node;u32 ale_offs =21 ;/* * If we are parsing legacy DT props and the DT contains a * valid NFC node, forward the request to the sama5 logic. */ - if (of_find_compatible_node(pdev->dev.of_node, NULL,
drivers/mtd/nand/atmel/nand-controller.c static int atmel_nand_controller_probe(s · line 2509
Quoted 10 lines
drivers/mtd/nand/atmel/nand-controller.c +5
-1- "atmel,sama5d3-nfc")) + nfc_node =of_get_compatible_child (pdev->dev.of_node, +"atmel,sama5d3-nfc" ); +if (nfc_node) { caps = &atmel_sama5_nand_caps; +of_node_put (nfc_node); + }/* * Even if the compatible says we are dealing with an
/drivers/mtd/nand/atmel/nand-controller.c: In function 'atmel_hsmc_nand_controller_legacy_init':
/drivers/mtd/nand/atmel/nand-controller.c:2080:11: error: implicit declaration of function 'of_get_compatible_child'; did you mean 'of_get_next_available_child'? [-Werror=implicit-function-declaration]
nfc_np = of_get_compatible_child(dev->of_node, "atmel,sama5d3-nfc");
^~~~~~~~~~~~~~~~~~~~~~~
of_get_next_available_child
/drivers/mtd/nand/atmel/nand-controller.c:2080:9: warning: assignment
makes pointer from integer without a cast [-Wint-conversion]
nfc_np = of_get_compatible_child(dev->of_node, "atmel,sama5d3-nfc");
^ /drivers/mtd/nand/atmel/nand-controller.c: In function
'atmel_nand_controller_probe':
/drivers/mtd/nand/atmel/nand-controller.c:2501:12: warning:
assignment makes pointer from integer without a cast [-Wint-conversion]
nfc_node = of_get_compatible_child(pdev->dev.of_node,
^Full build log link,
https://ci.linaro.org/job/openembedded-lkft-linux-stable-rc-4.14/DISTRO=rpb,MACHINE=am57xx-evm,label=docker-lkft/336/consoleFull
Best regards
Naresh Kamboju
Greg Kroah-Hartman
maintainerRe: [PATCH 4.14 58/62] mtd: rawnand: atmel: fix OF child-node lookup
Quoted 1 line · Naresh Kamboju
Do you see build failure arm x15 beagleboard on 4.14 due to this patch ?
I don't have such a device to test on, don't you? :)
Greg Kroah-Hartman
maintainerRe: [PATCH 4.14 32/62] i2c: omap: Enable for ARCH_K3
In reply to Vignesh RQuoted 11 lines · Vignesh R
Hi Greg,
Quoted 1 line · Greg Kroah-Hartman
4.14-stable review patch. If anyone has any objections, please let me know.
This patch depends on
c77245722fb4("arm64: Add support for TI's K3 Multicore SoC architecture") which addsARCH_K3Kconfigsymbol and merged to mainline in v4.19. Since I don't seec77245722fb4in stable tree, could you please drop this patch from_allpriorversions_i.e 4.14, 4.9, 4.4 and 3.18. Thanks!
Now dropped, thanks for letting us know.
greg k-h
Re: [PATCH 4.14 58/62] mtd: rawnand: atmel: fix OF child-node lookup
In reply to Naresh KambojuQuoted 69 lines · On Mon, 26 Nov 2018 19:46:15 +0530 Naresh Kamboju <[email protected]>…
Do you see build failure arm x15 beagleboard on 4.14 due to this patch ?
Quoted 65 lines · Greg Kroah-Hartman
4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johan Hovold <[email protected]>
commit
5d1e9c2212ea6b4dd735e4fc3dd6279a365d5d10upstream.Use the new
of_get_compatible_child()helper to lookup the nfc child node instead of usingof_find_compatible_node(), which searches the entire tree from a given start node and thus can return an unrelated (i.e. non-child) node.This also addresses a potential use-after-free (e.g. after probe deferral) as the tree-wide helper drops a reference to its first argument (i.e. the node of the device being probed).
While at it, also fix a related nfc-node reference leak.
Fixes f88fc122cc34 ("mtd: nand: Cleanup/rework the atmel_nand driver")Cc stable <[email protected]> # 4.11Cc Nicolas Ferre <[email protected]>Cc Josh Wu <[email protected]>Cc Boris Brezillon <[email protected]>Signed-off-by Johan Hovold <[email protected]>Signed-off-by Boris Brezillon <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- drivers/mtd/nand/atmel/nand-controller.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)drivers/mtd/nand/atmel/nand-controller.c +7
-4@@ -2077,8 +2077,7 @@ atmel_hsmc_nand_controller_legacy_init(sint ret; nand_np = dev->of_node; - nfc_np =of_find_compatible_node (dev->of_node,NULL , -"atmel,sama5d3-nfc" ); + nfc_np =of_get_compatible_child (dev->of_node,"atmel,sama5d3-nfc" );if (!nfc_np) {dev_err (dev,"Could not find device node for sama5d3-nfc\n" );return -ENODEV ;@@ -2492,15 +2491,19 @@ static int atmel_nand_controller_probe(s }if (caps->legacy_of_bindings) { +struct device_node *nfc_node;u32 ale_offs =21 ;/* * If we are parsing legacy DT props and the DT contains a * valid NFC node, forward the request to the sama5 logic. */ -if (of_find_compatible_node (pdev->dev.of_node,NULL , -"atmel,sama5d3-nfc" )) + nfc_node =of_get_compatible_child (pdev->dev.of_node, +"atmel,sama5d3-nfc" ); +if (nfc_node) { caps = &atmel_sama5_nand_caps; +of_node_put (nfc_node); + }
Quoted 11 lines
drivers/mtd/nand/atmel/nand-controller.c static int atmel_nand_controller_probe(s · line 2509
Quoted 4 lines
drivers/mtd/nand/atmel/nand-controller.c +0
-0/* * Even if the compatible says we are dealing with an /drivers/mtd/nand/atmel/nand-controller.c: In function '
atmel_hsmc_nand_controller_legacy_init':
/drivers/mtd/nand/atmel/nand-controller.c:2080:11: error: implicit declaration of function 'of_get_compatible_child'; did you mean 'of_get_next_available_child'? [-Werror=implicit-function-declaration]
nfc_np=of_get_compatible_child(dev->of_node, "atmel,sama5d3-nfc");
Looks like of_get_compatible_child() has been introduced in 4.18, hence this error.
Greg, can you drop this patch from 4.14.y?
Greg Kroah-Hartman
maintainerRe: [PATCH 4.14 58/62] mtd: rawnand: atmel: fix OF child-node lookup
Quoted 84 lines · Boris Brezillon
Quoted 69 lines · On Mon, 26 Nov 2018 19:46:15 +0530 Naresh Kamboju <[email protected]>…
Do you see build failure arm x15 beagleboard on 4.14 due to this patch ?
Quoted 65 lines · Greg Kroah-Hartman
4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johan Hovold <[email protected]>
commit
5d1e9c2212ea6b4dd735e4fc3dd6279a365d5d10upstream.Use the new
of_get_compatible_child()helper to lookup the nfc child node instead of usingof_find_compatible_node(), which searches the entire tree from a given start node and thus can return an unrelated (i.e. non-child) node.This also addresses a potential use-after-free (e.g. after probe deferral) as the tree-wide helper drops a reference to its first argument (i.e. the node of the device being probed).
While at it, also fix a related nfc-node reference leak.
Fixes f88fc122cc34 ("mtd: nand: Cleanup/rework the atmel_nand driver")Cc stable <[email protected]> # 4.11Cc Nicolas Ferre <[email protected]>Cc Josh Wu <[email protected]>Cc Boris Brezillon <[email protected]>Signed-off-by Johan Hovold <[email protected]>Signed-off-by Boris Brezillon <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- drivers/mtd/nand/atmel/nand-controller.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)drivers/mtd/nand/atmel/nand-controller.c +7
-4@@ -2077,8 +2077,7 @@ atmel_hsmc_nand_controller_legacy_init(sint ret; nand_np = dev->of_node; - nfc_np =of_find_compatible_node (dev->of_node,NULL , -"atmel,sama5d3-nfc" ); + nfc_np =of_get_compatible_child (dev->of_node,"atmel,sama5d3-nfc" );if (!nfc_np) {dev_err (dev,"Could not find device node for sama5d3-nfc\n" );return -ENODEV ;@@ -2492,15 +2491,19 @@ static int atmel_nand_controller_probe(s }if (caps->legacy_of_bindings) { +struct device_node *nfc_node;u32 ale_offs =21 ;/* * If we are parsing legacy DT props and the DT contains a * valid NFC node, forward the request to the sama5 logic. */ -if (of_find_compatible_node (pdev->dev.of_node,NULL , -"atmel,sama5d3-nfc" )) + nfc_node =of_get_compatible_child (pdev->dev.of_node, +"atmel,sama5d3-nfc" ); +if (nfc_node) { caps = &atmel_sama5_nand_caps; +of_node_put (nfc_node); + }Quoted 11 lines
drivers/mtd/nand/atmel/nand-controller.c static int atmel_nand_controller_probe(s · line 2509
Quoted 4 lines
drivers/mtd/nand/atmel/nand-controller.c +0
-0/* * Even if the compatible says we are dealing with an /drivers/mtd/nand/atmel/nand-controller.c: In function '
atmel_hsmc_nand_controller_legacy_init':
/drivers/mtd/nand/atmel/nand-controller.c:2080:11: error: implicit declaration of function 'of_get_compatible_child'; did you mean 'of_get_next_available_child'? [-Werror=implicit-function-declaration]
nfc_np=of_get_compatible_child(dev->of_node, "atmel,sama5d3-nfc");
Quoted 4 lines
Looks like
of_get_compatible_child()has been introduced in 4.18, hence this error.Greg, can you drop this patch from 4.14.y?
Yes, my fault, I fixed a number of these in the past, missed this one :(
Now dropped.
greg k-h
Sasha Levin
maintainerRe: [PATCH 4.14 58/62] mtd: rawnand: atmel: fix OF child-node lookup
In reply to Boris BrezillonQuoted 84 lines · Boris Brezillon
Quoted 69 lines · On Mon, 26 Nov 2018 19:46:15 +0530 Naresh Kamboju <[email protected]>…
Do you see build failure arm x15 beagleboard on 4.14 due to this patch ?
Quoted 65 lines · Greg Kroah-Hartman
4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johan Hovold <[email protected]>
commit
5d1e9c2212ea6b4dd735e4fc3dd6279a365d5d10upstream.Use the new
of_get_compatible_child()helper to lookup the nfc child node instead of usingof_find_compatible_node(), which searches the entire tree from a given start node and thus can return an unrelated (i.e. non-child) node.This also addresses a potential use-after-free (e.g. after probe deferral) as the tree-wide helper drops a reference to its first argument (i.e. the node of the device being probed).
While at it, also fix a related nfc-node reference leak.
Fixes f88fc122cc34 ("mtd: nand: Cleanup/rework the atmel_nand driver")Cc stable <[email protected]> # 4.11Cc Nicolas Ferre <[email protected]>Cc Josh Wu <[email protected]>Cc Boris Brezillon <[email protected]>Signed-off-by Johan Hovold <[email protected]>Signed-off-by Boris Brezillon <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- drivers/mtd/nand/atmel/nand-controller.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)drivers/mtd/nand/atmel/nand-controller.c +7
-4@@ -2077,8 +2077,7 @@ atmel_hsmc_nand_controller_legacy_init(sint ret; nand_np = dev->of_node; - nfc_np =of_find_compatible_node (dev->of_node,NULL , -"atmel,sama5d3-nfc" ); + nfc_np =of_get_compatible_child (dev->of_node,"atmel,sama5d3-nfc" );if (!nfc_np) {dev_err (dev,"Could not find device node for sama5d3-nfc\n" );return -ENODEV ;@@ -2492,15 +2491,19 @@ static int atmel_nand_controller_probe(s }if (caps->legacy_of_bindings) { +struct device_node *nfc_node;u32 ale_offs =21 ;/* * If we are parsing legacy DT props and the DT contains a * valid NFC node, forward the request to the sama5 logic. */ -if (of_find_compatible_node (pdev->dev.of_node,NULL , -"atmel,sama5d3-nfc" )) + nfc_node =of_get_compatible_child (pdev->dev.of_node, +"atmel,sama5d3-nfc" ); +if (nfc_node) { caps = &atmel_sama5_nand_caps; +of_node_put (nfc_node); + }Quoted 11 lines
drivers/mtd/nand/atmel/nand-controller.c static int atmel_nand_controller_probe(s · line 2509
Quoted 4 lines
drivers/mtd/nand/atmel/nand-controller.c +0
-0/* * Even if the compatible says we are dealing with an /drivers/mtd/nand/atmel/nand-controller.c: In function '
atmel_hsmc_nand_controller_legacy_init':
/drivers/mtd/nand/atmel/nand-controller.c:2080:11: error: implicit declaration of function 'of_get_compatible_child'; did you mean 'of_get_next_available_child'? [-Werror=implicit-function-declaration]
nfc_np=of_get_compatible_child(dev->of_node, "atmel,sama5d3-nfc");
Quoted 4 lines
Looks like
of_get_compatible_child()has been introduced in 4.18, hence this error.Greg, can you drop this patch from 4.14.y?
Interesting, none of the kernelci builds caught this? hmm
--
Thanks,
Sasha
Re: [PATCH 4.14 58/62] mtd: rawnand: atmel: fix OF child-node lookup
In reply to Greg Kroah-HartmanQuoted 85 lines · Greg Kroah-Hartman
Quoted 84 lines · Boris Brezillon
Quoted 80 lines · On Mon, 26 Nov 2018 19:46:15 +0530 Naresh Kamboju <[email protected]>…
Do you see build failure arm x15 beagleboard on 4.14 due to this patch ?
Quoted 59 lines · Greg Kroah-Hartman
4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johan Hovold <[email protected]>
commit
5d1e9c2212ea6b4dd735e4fc3dd6279a365d5d10upstream.Use the new
of_get_compatible_child()helper to lookup the nfc child node instead of usingof_find_compatible_node(), which searches the entire tree from a given start node and thus can return an unrelated (i.e. non-child) node.This also addresses a potential use-after-free (e.g. after probe deferral) as the tree-wide helper drops a reference to its first argument (i.e. the node of the device being probed).
While at it, also fix a related nfc-node reference leak.
Fixes f88fc122cc34 ("mtd: nand: Cleanup/rework the atmel_nand driver")Cc stable <[email protected]> # 4.11Cc Nicolas Ferre <[email protected]>Cc Josh Wu <[email protected]>Cc Boris Brezillon <[email protected]>Signed-off-by Johan Hovold <[email protected]>Signed-off-by Boris Brezillon <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- drivers/mtd/nand/atmel/nand-controller.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)drivers/mtd/nand/atmel/nand-controller.c +2
-3@@ -2077,8 +2077,7 @@ atmel_hsmc_nand_controller_legacy_init(sint ret; nand_np = dev->of_node; - nfc_np =of_find_compatible_node (dev->of_node,NULL , -"atmel,sama5d3-nfc" ); + nfc_np =of_get_compatible_child (dev->of_node,"atmel,sama5d3-nfc" );if (!nfc_np) {dev_err (dev,"Could not find device node for sama5d3-nfc\n" );return -ENODEV ;@@ -2492,15 +2491,19 @@ static int atmel_nand_controller_probe(s }if (caps->legacy_of_bindings) { +struct device_node *nfc_node;u32 ale_offs =21 ;/* * If we are parsing legacy DT props and the DT contains a * valid NFC node, forward the request to the sama5 logic. */ - if (of_find_compatible_node(pdev->dev.of_node, NULL,drivers/mtd/nand/atmel/nand-controller.c static int atmel_nand_controller_probe(s · line 2509
Quoted 10 lines
drivers/mtd/nand/atmel/nand-controller.c +5
-1- "atmel,sama5d3-nfc")) + nfc_node =of_get_compatible_child (pdev->dev.of_node, +"atmel,sama5d3-nfc" ); +if (nfc_node) { caps = &atmel_sama5_nand_caps; +of_node_put (nfc_node); + }/* * Even if the compatible says we are dealing with an /drivers/mtd/nand/atmel/nand-controller.c: In function '
atmel_hsmc_nand_controller_legacy_init':
/drivers/mtd/nand/atmel/nand-controller.c:2080:11: error: implicit declaration of function 'of_get_compatible_child'; did you mean 'of_get_next_available_child'? [-Werror=implicit-function-declaration]
nfc_np=of_get_compatible_child(dev->of_node, "atmel,sama5d3-nfc");
Quoted 8 lines
Quoted 4 lines
Looks like
of_get_compatible_child()has been introduced in 4.18, hence this error.Greg, can you drop this patch from 4.14.y?
Yes, my fault, I fixed a number of these in the past, missed this one :(
Now dropped.
The intention here was that the helper should be backported along with the fixes. I mentioned this in the cover letter to the series introducing the helper and the fixes. As they were submitted together I could not use the usual
Cc: stable <[email protected]> # 4.xx: 36156f9241cb
notation for this. I realise I should still have mentioned this in each individual commit messages as well, sorry about that.
The dependency for all of these fixes is:
36156f9241cb ("of: add helper to lookup compatible child node")
and the original thread can be found here:
https://lkml.kernel.org/r/[email protected]
Johan
Re: [PATCH 4.14 58/62] mtd: rawnand: atmel: fix OF child-node lookup
In reply to Sasha LevinQuoted 1 line · Sasha Levin
<snip>
Quoted 8 lines
Quoted 8 lines
Quoted 7 lines
/drivers/mtd/nand/atmel/nand-controller.c: In function '
atmel_hsmc_nand_controller_legacy_init':
/drivers/mtd/nand/atmel/nand-controller.c:2080:11: error: implicit declaration of function 'of_get_compatible_child'; did you mean 'of_get_next_available_child'? [-Werror=implicit-function-declaration]
nfc_np=of_get_compatible_child(dev->of_node, "atmel,sama5d3-nfc");
Quoted 6 lines
Quoted 4 lines
Looks like
of_get_compatible_child()has been introduced in 4.18, hence this error.Greg, can you drop this patch from 4.14.y?
Interesting, none of the kernelci builds caught this? hmm
They did, a few arm defconfigs failed to build because of this error.
https://kernelci.org/build/stable-rc/branch/linux-4.14.y/kernel/v4.14.83-64-gd81d0be7d560/
Quoted 4 lines
--
Thanks,
Sasha
stable-rc/linux-4.14.y boot: 60 boots: 0 failed, 57 passed with 2 offline, 1 untried/unknown (v4.14.83-63-g0ece78cdc128)
stable-rc/linux-4.14.y boot: 60 boots: 0 failed, 57 passed with 2 offline, 1 untried/unknown (v4.14.83-63-g0ece78cdc128)
Full Boot Summary: https://kernelci.org/boot/all/job/stable-rc/branch/linux-4.14.y/kernel/v4.14.83-63-g0ece78cdc128/
Full Build Summary: https://kernelci.org/build/stable-rc/branch/linux-4.14.y/kernel/v4.14.83-63-g0ece78cdc128/
Tree: stable-rc
Branch: linux-4.14.y
Git Describe: v4.14.83-63-g0ece78cdc128
Git Commit: 0ece78cdc1285e114e5cec4c7517c90121ee32f5
Git URL: http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Tested: 48 unique boards, 15 SoC families, 13 builds out of 197
Offline Platforms:
arm64:
defconfig:
meson-gxl-s905d-p230: 1 offline lab
meson-gxl-s905x-p212: 1 offline lab---
For more info write to <[email protected]>
Sasha Levin
maintainerRe: [PATCH 4.14 58/62] mtd: rawnand: atmel: fix OF child-node lookup
In reply to Matt HartQuoted 15 lines · Matt Hart
Quoted 1 line · Sasha Levin
<snip>
Quoted 11 lines
Quoted 11 lines
Quoted 7 lines
/drivers/mtd/nand/atmel/nand-controller.c: In function '
atmel_hsmc_nand_controller_legacy_init':
/drivers/mtd/nand/atmel/nand-controller.c:2080:11: error: implicit declaration of function 'of_get_compatible_child'; did you mean 'of_get_next_available_child'? [-Werror=implicit-function-declaration]
nfc_np=of_get_compatible_child(dev->of_node, "atmel,sama5d3-nfc");Looks like
of_get_compatible_child()has been introduced in 4.18, hence this error.
Quoted 6 lines
Quoted 3 lines
Quoted 1 line
Greg, can you drop this patch from 4.14.y?
Interesting, none of the kernelci builds caught this? hmm
They did, a few arm defconfigs failed to build because of this error.
https://kernelci.org/build/stable-rc/branch/linux-4.14.y/kernel/v4.14.83-64-gd81d0be7d560/
Indeed, and it was even removed from a few (but not all) of the branches it failed on. I retract my kernelci comments :)
--
Thanks,
Sasha
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.84 release. There are 62 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Nov 28 10:50:20 UTC 2018. Anything received after that time might be too late.
For v4.14.83-61-gc203efd3a8fd:
Build results:
total: 150 pass: 150 fail: 0 Qemu test results: total: 295 pass: 295 fail: 0
Details are available at https://kerneltests.org/builders/.
Guenter
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.84 release. There are 62 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Nov 28 10:50:20 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.14.84-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.14.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Jon Hunter
maintainerQuoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.84 release. There are 62 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Nov 28 10:50:20 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.14.84-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.14.y
and the diffstat can be found below.thanks,
greg k-h
All tests are passing for Tegra ...
Test results for stable-v4.14:
8 builds: 8 pass, 0 fail
16 boots: 16 pass, 0 fail
14 tests: 14 pass, 0 failLinux version: 4.14.84-rc1-gc203efd
Boards tested: tegra124-jetson-tk1, tegra20-ventana,
tegra210-p2371-2180, tegra30-cardhu-a04
Cheers
Jon
Signature · 1 line
nvpublic
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.84 release. There are 62 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Nov 28 10:50:20 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.14.84-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.14.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.
Summary
------------------------------------------------------------------------
kernel: 4.14.84-rc1
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-4.14.y
git commit: c203efd3a8fd7ddeec1ea4bb6f7c6e36c95dfd40
git describe: v4.14.83-61-gc203efd3a8fd
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-4.14-oe/build/v4.14.83-61-gc203efd3a8fd
No regressions (compared to build v4.14.83)
No fixes (compared to build v4.14.83)
Ran 21442 total tests in the following environments and test suites.
Environments
--------------
- dragonboard-410c - arm64
- hi6220-hikey - arm64
- i386
- juno-r2 - arm64
- qemu_arm
- qemu_arm64
- qemu_i386
- qemu_x86_64
- x15 - arm
- x86_64
Test Suites
-----------
* boot
* install-android-platform-tools-r2600
* kselftest
* libhugetlbfs
* ltp-cap_bounds-tests
* ltp-containers-tests
* ltp-cve-tests
* ltp-fcntl-locktests-tests
* ltp-filecaps-tests
* ltp-fs-tests
* ltp-fs_bind-tests
* ltp-fs_perms_simple-tests
* ltp-fsx-tests
* ltp-hugetlb-tests
* ltp-io-tests
* ltp-ipc-tests
* ltp-math-tests
* ltp-nptl-tests
* ltp-pty-tests
* ltp-sched-tests
* ltp-securebits-tests
* ltp-syscalls-tests
* ltp-timers-tests
* ltp-open-posix-tests
* kselftest-vsyscall-mode-native
* kselftest-vsyscall-mode-none
Signature · 2 lines
Linaro LKFT https://lkft.linaro.org
Greg Kroah-Hartman
maintainerQuoted 21 lines · Jon Hunter
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.84 release. There are 62 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Nov 28 10:50:20 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.14.84-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.14.y
and the diffstat can be found below.thanks,
greg k-h
All tests are passing for Tegra ...
Quoted 9 lines
Test results for stable-v4.14:
8 builds: 8 pass, 0 fail 16 boots: 16 pass, 0 fail 14 tests: 14 pass, 0 failLinux version: 4.14.84-rc1-gc203efd
Boards tested: tegra124-jetson-tk1, tegra20-ventana,tegra210-p2371-2180, tegra30-cardhu-a04
Thanks for testing these and letting me know.
greg k-h
Greg Kroah-Hartman
maintainerRe: [PATCH 4.14 58/62] mtd: rawnand: atmel: fix OF child-node lookup
In reply to Johan HovoldQuoted 105 lines · Johan Hovold
Quoted 85 lines · Greg Kroah-Hartman
Quoted 84 lines · Boris Brezillon
Quoted 80 lines · On Mon, 26 Nov 2018 19:46:15 +0530 Naresh Kamboju <[email protected]>…
Do you see build failure arm x15 beagleboard on 4.14 due to this patch ?
Quoted 59 lines · Greg Kroah-Hartman
4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johan Hovold <[email protected]>
commit
5d1e9c2212ea6b4dd735e4fc3dd6279a365d5d10upstream.Use the new
of_get_compatible_child()helper to lookup the nfc child node instead of usingof_find_compatible_node(), which searches the entire tree from a given start node and thus can return an unrelated (i.e. non-child) node.This also addresses a potential use-after-free (e.g. after probe deferral) as the tree-wide helper drops a reference to its first argument (i.e. the node of the device being probed).
While at it, also fix a related nfc-node reference leak.
Fixes f88fc122cc34 ("mtd: nand: Cleanup/rework the atmel_nand driver")Cc stable <[email protected]> # 4.11Cc Nicolas Ferre <[email protected]>Cc Josh Wu <[email protected]>Cc Boris Brezillon <[email protected]>Signed-off-by Johan Hovold <[email protected]>Signed-off-by Boris Brezillon <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- drivers/mtd/nand/atmel/nand-controller.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)drivers/mtd/nand/atmel/nand-controller.c +2
-3@@ -2077,8 +2077,7 @@ atmel_hsmc_nand_controller_legacy_init(sint ret; nand_np = dev->of_node; - nfc_np =of_find_compatible_node (dev->of_node,NULL , -"atmel,sama5d3-nfc" ); + nfc_np =of_get_compatible_child (dev->of_node,"atmel,sama5d3-nfc" );if (!nfc_np) {dev_err (dev,"Could not find device node for sama5d3-nfc\n" );return -ENODEV ;@@ -2492,15 +2491,19 @@ static int atmel_nand_controller_probe(s }if (caps->legacy_of_bindings) { +struct device_node *nfc_node;u32 ale_offs =21 ;/* * If we are parsing legacy DT props and the DT contains a * valid NFC node, forward the request to the sama5 logic. */ - if (of_find_compatible_node(pdev->dev.of_node, NULL,drivers/mtd/nand/atmel/nand-controller.c static int atmel_nand_controller_probe(s · line 2509
Quoted 10 lines
drivers/mtd/nand/atmel/nand-controller.c +5
-1- "atmel,sama5d3-nfc")) + nfc_node =of_get_compatible_child (pdev->dev.of_node, +"atmel,sama5d3-nfc" ); +if (nfc_node) { caps = &atmel_sama5_nand_caps; +of_node_put (nfc_node); + }/* * Even if the compatible says we are dealing with an /drivers/mtd/nand/atmel/nand-controller.c: In function '
atmel_hsmc_nand_controller_legacy_init':
/drivers/mtd/nand/atmel/nand-controller.c:2080:11: error: implicit declaration of function 'of_get_compatible_child'; did you mean 'of_get_next_available_child'? [-Werror=implicit-function-declaration]
nfc_np=of_get_compatible_child(dev->of_node, "atmel,sama5d3-nfc");Quoted 8 lines
Quoted 4 lines
Looks like
of_get_compatible_child()has been introduced in 4.18, hence this error.Greg, can you drop this patch from 4.14.y?
Yes, my fault, I fixed a number of these in the past, missed this one :(
Now dropped.
The intention here was that the helper should be backported along with the fixes. I mentioned this in the cover letter to the series introducing the helper and the fixes. As they were submitted together I could not use the usual
Cc: stable <[email protected]> # 4.xx: 36156f9241cbnotation for this. I realise I should still have mentioned this in each individual commit messages as well, sorry about that.
Quoted 7 lines
The dependency for all of these fixes is:
36156f9241cb("of: add helper to lookup compatible child node")and the original thread can be found here:
https://lkml.kernel.org/r/[email protected]
Now fixed up and applied, thanks.
greg k-h