linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ben Hutchings <ben@decadent.org.uk>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: akpm@linux-foundation.org, Denis Kirjanov <kda@linux-powerpc.org>,
	"Dominique Martinet" <dominique.martinet@cea.fr>,
	"Hou Tao" <houtao1@huawei.com>,
	"Xing Gaopeng" <xingaopeng@huawei.com>
Subject: [PATCH 3.16 094/129] 9p: use inode->i_lock to protect i_size_write() under 32-bit
Date: Sun, 07 Jul 2019 17:54:17 +0100	[thread overview]
Message-ID: <lsq.1562518457.384221353@decadent.org.uk> (raw)
In-Reply-To: <lsq.1562518456.876074874@decadent.org.uk>

3.16.70-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Hou Tao <houtao1@huawei.com>

commit 5e3cc1ee1405a7eb3487ed24f786dec01b4cbe1f upstream.

Use inode->i_lock to protect i_size_write(), else i_size_read() in
generic_fillattr() may loop infinitely in read_seqcount_begin() when
multiple processes invoke v9fs_vfs_getattr() or v9fs_vfs_getattr_dotl()
simultaneously under 32-bit SMP environment, and a soft lockup will be
triggered as show below:

  watchdog: BUG: soft lockup - CPU#5 stuck for 22s! [stat:2217]
  Modules linked in:
  CPU: 5 PID: 2217 Comm: stat Not tainted 5.0.0-rc1-00005-g7f702faf5a9e #4
  Hardware name: Generic DT based system
  PC is at generic_fillattr+0x104/0x108
  LR is at 0xec497f00
  pc : [<802b8898>]    lr : [<ec497f00>]    psr: 200c0013
  sp : ec497e20  ip : ed608030  fp : ec497e3c
  r10: 00000000  r9 : ec497f00  r8 : ed608030
  r7 : ec497ebc  r6 : ec497f00  r5 : ee5c1550  r4 : ee005780
  r3 : 0000052d  r2 : 00000000  r1 : ec497f00  r0 : ed608030
  Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
  Control: 10c5387d  Table: ac48006a  DAC: 00000051
  CPU: 5 PID: 2217 Comm: stat Not tainted 5.0.0-rc1-00005-g7f702faf5a9e #4
  Hardware name: Generic DT based system
  Backtrace:
  [<8010d974>] (dump_backtrace) from [<8010dc88>] (show_stack+0x20/0x24)
  [<8010dc68>] (show_stack) from [<80a1d194>] (dump_stack+0xb0/0xdc)
  [<80a1d0e4>] (dump_stack) from [<80109f34>] (show_regs+0x1c/0x20)
  [<80109f18>] (show_regs) from [<801d0a80>] (watchdog_timer_fn+0x280/0x2f8)
  [<801d0800>] (watchdog_timer_fn) from [<80198658>] (__hrtimer_run_queues+0x18c/0x380)
  [<801984cc>] (__hrtimer_run_queues) from [<80198e60>] (hrtimer_run_queues+0xb8/0xf0)
  [<80198da8>] (hrtimer_run_queues) from [<801973e8>] (run_local_timers+0x28/0x64)
  [<801973c0>] (run_local_timers) from [<80197460>] (update_process_times+0x3c/0x6c)
  [<80197424>] (update_process_times) from [<801ab2b8>] (tick_nohz_handler+0xe0/0x1bc)
  [<801ab1d8>] (tick_nohz_handler) from [<80843050>] (arch_timer_handler_virt+0x38/0x48)
  [<80843018>] (arch_timer_handler_virt) from [<80180a64>] (handle_percpu_devid_irq+0x8c/0x240)
  [<801809d8>] (handle_percpu_devid_irq) from [<8017ac20>] (generic_handle_irq+0x34/0x44)
  [<8017abec>] (generic_handle_irq) from [<8017b344>] (__handle_domain_irq+0x6c/0xc4)
  [<8017b2d8>] (__handle_domain_irq) from [<801022e0>] (gic_handle_irq+0x4c/0x88)
  [<80102294>] (gic_handle_irq) from [<80101a30>] (__irq_svc+0x70/0x98)
  [<802b8794>] (generic_fillattr) from [<8056b284>] (v9fs_vfs_getattr_dotl+0x74/0xa4)
  [<8056b210>] (v9fs_vfs_getattr_dotl) from [<802b8904>] (vfs_getattr_nosec+0x68/0x7c)
  [<802b889c>] (vfs_getattr_nosec) from [<802b895c>] (vfs_getattr+0x44/0x48)
  [<802b8918>] (vfs_getattr) from [<802b8a74>] (vfs_statx+0x9c/0xec)
  [<802b89d8>] (vfs_statx) from [<802b9428>] (sys_lstat64+0x48/0x78)
  [<802b93e0>] (sys_lstat64) from [<80101000>] (ret_fast_syscall+0x0/0x28)

[dominique.martinet@cea.fr: updated comment to not refer to a function
in another subsystem]
Link: http://lkml.kernel.org/r/20190124063514.8571-2-houtao1@huawei.com
Fixes: 7549ae3e81cc ("9p: Use the i_size_[read, write]() macros instead of using inode->i_size directly.")
Reported-by: Xing Gaopeng <xingaopeng@huawei.com>
Signed-off-by: Hou Tao <houtao1@huawei.com>
Signed-off-by: Dominique Martinet <dominique.martinet@cea.fr>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 fs/9p/v9fs_vfs.h       | 23 +++++++++++++++++++++--
 fs/9p/vfs_file.c       |  6 +++++-
 fs/9p/vfs_inode.c      | 23 +++++++++++------------
 fs/9p/vfs_inode_dotl.c | 27 ++++++++++++++-------------
 fs/9p/vfs_super.c      |  4 ++--
 5 files changed, 53 insertions(+), 30 deletions(-)

--- a/fs/9p/v9fs_vfs.h
+++ b/fs/9p/v9fs_vfs.h
@@ -40,6 +40,9 @@
  */
 #define P9_LOCK_TIMEOUT (30*HZ)
 
+/* flags for v9fs_stat2inode() & v9fs_stat2inode_dotl() */
+#define V9FS_STAT2INODE_KEEP_ISIZE 1
+
 extern struct file_system_type v9fs_fs_type;
 extern const struct address_space_operations v9fs_addr_operations;
 extern const struct file_operations v9fs_file_operations;
@@ -61,8 +64,10 @@ int v9fs_init_inode(struct v9fs_session_
 		    struct inode *inode, umode_t mode, dev_t);
 void v9fs_evict_inode(struct inode *inode);
 ino_t v9fs_qid2ino(struct p9_qid *qid);
-void v9fs_stat2inode(struct p9_wstat *, struct inode *, struct super_block *);
-void v9fs_stat2inode_dotl(struct p9_stat_dotl *, struct inode *);
+void v9fs_stat2inode(struct p9_wstat *stat, struct inode *inode,
+		      struct super_block *sb, unsigned int flags);
+void v9fs_stat2inode_dotl(struct p9_stat_dotl *stat, struct inode *inode,
+			   unsigned int flags);
 int v9fs_dir_release(struct inode *inode, struct file *filp);
 int v9fs_file_open(struct inode *inode, struct file *file);
 void v9fs_inode2stat(struct inode *inode, struct p9_wstat *stat);
@@ -87,4 +92,18 @@ static inline void v9fs_invalidate_inode
 }
 
 int v9fs_open_to_dotl_flags(int flags);
+
+static inline void v9fs_i_size_write(struct inode *inode, loff_t i_size)
+{
+	/*
+	 * 32-bit need the lock, concurrent updates could break the
+	 * sequences and make i_size_read() loop forever.
+	 * 64-bit updates are atomic and can skip the locking.
+	 */
+	if (sizeof(i_size) > sizeof(long))
+		spin_lock(&inode->i_lock);
+	i_size_write(inode, i_size);
+	if (sizeof(i_size) > sizeof(long))
+		spin_unlock(&inode->i_lock);
+}
 #endif
--- a/fs/9p/vfs_file.c
+++ b/fs/9p/vfs_file.c
@@ -484,7 +484,11 @@ v9fs_file_write_internal(struct inode *i
 		i_size = i_size_read(inode);
 		if (*offset > i_size) {
 			inode_add_bytes(inode, *offset - i_size);
-			i_size_write(inode, *offset);
+			/*
+			 * Need to serialize against i_size_write() in
+			 * v9fs_stat2inode()
+			 */
+			v9fs_i_size_write(inode, *offset);
 		}
 	}
 	if (n < 0)
--- a/fs/9p/vfs_inode.c
+++ b/fs/9p/vfs_inode.c
@@ -538,7 +538,7 @@ static struct inode *v9fs_qid_iget(struc
 	if (retval)
 		goto error;
 
-	v9fs_stat2inode(st, inode, sb);
+	v9fs_stat2inode(st, inode, sb, 0);
 	v9fs_cache_inode_get_cookie(inode);
 	unlock_new_inode(inode);
 	return inode;
@@ -1074,7 +1074,7 @@ v9fs_vfs_getattr(struct vfsmount *mnt, s
 	if (IS_ERR(st))
 		return PTR_ERR(st);
 
-	v9fs_stat2inode(st, dentry->d_inode, dentry->d_inode->i_sb);
+	v9fs_stat2inode(st, dentry->d_inode, dentry->d_inode->i_sb, 0);
 	generic_fillattr(dentry->d_inode, stat);
 
 	p9stat_free(st);
@@ -1152,12 +1152,13 @@ static int v9fs_vfs_setattr(struct dentr
  * @stat: Plan 9 metadata (mistat) structure
  * @inode: inode to populate
  * @sb: superblock of filesystem
+ * @flags: control flags (e.g. V9FS_STAT2INODE_KEEP_ISIZE)
  *
  */
 
 void
 v9fs_stat2inode(struct p9_wstat *stat, struct inode *inode,
-	struct super_block *sb)
+		 struct super_block *sb, unsigned int flags)
 {
 	umode_t mode;
 	char ext[32];
@@ -1198,10 +1199,11 @@ v9fs_stat2inode(struct p9_wstat *stat, s
 	mode = p9mode2perm(v9ses, stat);
 	mode |= inode->i_mode & ~S_IALLUGO;
 	inode->i_mode = mode;
-	i_size_write(inode, stat->length);
 
+	if (!(flags & V9FS_STAT2INODE_KEEP_ISIZE))
+		v9fs_i_size_write(inode, stat->length);
 	/* not real number of blocks, but 512 byte ones ... */
-	inode->i_blocks = (i_size_read(inode) + 512 - 1) >> 9;
+	inode->i_blocks = (stat->length + 512 - 1) >> 9;
 	v9inode->cache_validity &= ~V9FS_INO_INVALID_ATTR;
 }
 
@@ -1465,9 +1467,9 @@ int v9fs_refresh_inode(struct p9_fid *fi
 {
 	int umode;
 	dev_t rdev;
-	loff_t i_size;
 	struct p9_wstat *st;
 	struct v9fs_session_info *v9ses;
+	unsigned int flags;
 
 	v9ses = v9fs_inode2v9ses(inode);
 	st = p9_client_stat(fid);
@@ -1480,16 +1482,13 @@ int v9fs_refresh_inode(struct p9_fid *fi
 	if ((inode->i_mode & S_IFMT) != (umode & S_IFMT))
 		goto out;
 
-	spin_lock(&inode->i_lock);
 	/*
 	 * We don't want to refresh inode->i_size,
 	 * because we may have cached data
 	 */
-	i_size = inode->i_size;
-	v9fs_stat2inode(st, inode, inode->i_sb);
-	if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE)
-		inode->i_size = i_size;
-	spin_unlock(&inode->i_lock);
+	flags = (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) ?
+		V9FS_STAT2INODE_KEEP_ISIZE : 0;
+	v9fs_stat2inode(st, inode, inode->i_sb, flags);
 out:
 	p9stat_free(st);
 	kfree(st);
--- a/fs/9p/vfs_inode_dotl.c
+++ b/fs/9p/vfs_inode_dotl.c
@@ -143,7 +143,7 @@ static struct inode *v9fs_qid_iget_dotl(
 	if (retval)
 		goto error;
 
-	v9fs_stat2inode_dotl(st, inode);
+	v9fs_stat2inode_dotl(st, inode, 0);
 	v9fs_cache_inode_get_cookie(inode);
 	retval = v9fs_get_acl(inode, fid);
 	if (retval)
@@ -498,7 +498,7 @@ v9fs_vfs_getattr_dotl(struct vfsmount *m
 	if (IS_ERR(st))
 		return PTR_ERR(st);
 
-	v9fs_stat2inode_dotl(st, dentry->d_inode);
+	v9fs_stat2inode_dotl(st, dentry->d_inode, 0);
 	generic_fillattr(dentry->d_inode, stat);
 	/* Change block size to what the server returned */
 	stat->blksize = st->st_blksize;
@@ -609,11 +609,13 @@ int v9fs_vfs_setattr_dotl(struct dentry
  * v9fs_stat2inode_dotl - populate an inode structure with stat info
  * @stat: stat structure
  * @inode: inode to populate
+ * @flags: ctrl flags (e.g. V9FS_STAT2INODE_KEEP_ISIZE)
  *
  */
 
 void
-v9fs_stat2inode_dotl(struct p9_stat_dotl *stat, struct inode *inode)
+v9fs_stat2inode_dotl(struct p9_stat_dotl *stat, struct inode *inode,
+		      unsigned int flags)
 {
 	umode_t mode;
 	struct v9fs_inode *v9inode = V9FS_I(inode);
@@ -633,7 +635,8 @@ v9fs_stat2inode_dotl(struct p9_stat_dotl
 		mode |= inode->i_mode & ~S_IALLUGO;
 		inode->i_mode = mode;
 
-		i_size_write(inode, stat->st_size);
+		if (!(flags & V9FS_STAT2INODE_KEEP_ISIZE))
+			v9fs_i_size_write(inode, stat->st_size);
 		inode->i_blocks = stat->st_blocks;
 	} else {
 		if (stat->st_result_mask & P9_STATS_ATIME) {
@@ -663,8 +666,9 @@ v9fs_stat2inode_dotl(struct p9_stat_dotl
 		}
 		if (stat->st_result_mask & P9_STATS_RDEV)
 			inode->i_rdev = new_decode_dev(stat->st_rdev);
-		if (stat->st_result_mask & P9_STATS_SIZE)
-			i_size_write(inode, stat->st_size);
+		if (!(flags & V9FS_STAT2INODE_KEEP_ISIZE) &&
+		    stat->st_result_mask & P9_STATS_SIZE)
+			v9fs_i_size_write(inode, stat->st_size);
 		if (stat->st_result_mask & P9_STATS_BLOCKS)
 			inode->i_blocks = stat->st_blocks;
 	}
@@ -946,9 +950,9 @@ ndset:
 
 int v9fs_refresh_inode_dotl(struct p9_fid *fid, struct inode *inode)
 {
-	loff_t i_size;
 	struct p9_stat_dotl *st;
 	struct v9fs_session_info *v9ses;
+	unsigned int flags;
 
 	v9ses = v9fs_inode2v9ses(inode);
 	st = p9_client_getattr_dotl(fid, P9_STATS_ALL);
@@ -960,16 +964,13 @@ int v9fs_refresh_inode_dotl(struct p9_fi
 	if ((inode->i_mode & S_IFMT) != (st->st_mode & S_IFMT))
 		goto out;
 
-	spin_lock(&inode->i_lock);
 	/*
 	 * We don't want to refresh inode->i_size,
 	 * because we may have cached data
 	 */
-	i_size = inode->i_size;
-	v9fs_stat2inode_dotl(st, inode);
-	if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE)
-		inode->i_size = i_size;
-	spin_unlock(&inode->i_lock);
+	flags = (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) ?
+		V9FS_STAT2INODE_KEEP_ISIZE : 0;
+	v9fs_stat2inode_dotl(st, inode, flags);
 out:
 	kfree(st);
 	return 0;
--- a/fs/9p/vfs_super.c
+++ b/fs/9p/vfs_super.c
@@ -169,7 +169,7 @@ static struct dentry *v9fs_mount(struct
 			goto release_sb;
 		}
 		root->d_inode->i_ino = v9fs_qid2ino(&st->qid);
-		v9fs_stat2inode_dotl(st, root->d_inode);
+		v9fs_stat2inode_dotl(st, root->d_inode, 0);
 		kfree(st);
 	} else {
 		struct p9_wstat *st = NULL;
@@ -180,7 +180,7 @@ static struct dentry *v9fs_mount(struct
 		}
 
 		root->d_inode->i_ino = v9fs_qid2ino(&st->qid);
-		v9fs_stat2inode(st, root->d_inode, sb);
+		v9fs_stat2inode(st, root->d_inode, sb, 0);
 
 		p9stat_free(st);
 		kfree(st);


  parent reply	other threads:[~2019-07-07 19:42 UTC|newest]

Thread overview: 138+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-07 16:54 [PATCH 3.16 000/129] 3.16.70-rc1 review Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 009/129] clk: vf610: fix refcount leak in vf610_clocks_init() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 091/129] Btrfs: fix corruption reading shared and compressed extents after hole punching Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 008/129] clk: imx6sx: fix refcount leak in imx6sx_clocks_init() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 033/129] pinctrl: sh-pfc: r8a7778: Fix HSPI pin numbers and names Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 114/129] It's wrong to add len to sector_nr in raid10 reshape twice Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 110/129] route: set the deleted fnhe fnhe_daddr to 0 in ip_del_fnhe to fix a race Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 037/129] mtd: docg3: Don't leak docg3->bbt in error path Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 048/129] USB: serial: cp210x: add ID for Ingenico 3070 Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 074/129] perf header: Fix wrong node write in NUMA_TOPOLOGY feature Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 061/129] pinctrl: sh-pfc: r8a7791: Fix scifb2_data_c pin group Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 077/129] KVM: x86/mmu: Do not cache MMIO accesses while memslots are in flux Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 040/129] tty: ipwireless: Fix potential NULL pointer dereference Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 080/129] powerpc/83xx: Also save/restore SPRG4-7 during suspend Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 095/129] powerpc/32: Clear on-stack exception marker upon exception return Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 128/129] mwifiex: Fix heap overflow in mwifiex_uap_parse_tail_ies() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 106/129] net/hsr: fix possible crash in add_timer() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 035/129] applicom: Fix potential Spectre v1 vulnerabilities Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 081/129] powerpc/wii: properly disable use of BATs when requested Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 026/129] media: s5p-jpeg: Check for fmt_ver_flag when doing fmt enumeration Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 119/129] l2tp: fix infoleak in l2tp_ip6_recvmsg() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 093/129] NFSv4.1: Reinitialise sequence results before retransmitting a request Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 065/129] tpm/tpm_i2c_atmel: Return -E2BIG when the transfer is incomplete Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 105/129] scsi: virtio_scsi: don't send sc payload with tmfs Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 075/129] drm/radeon/evergreen_cs: fix missing break in switch statement Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 005/129] clk: socfpga: fix refcount leak Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 078/129] fs/nfs: Fix nfs_parse_devname to not modify it's argument Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 079/129] irqchip/brcmstb-l2: Use _irqsave locking variants in non-interrupt code Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 113/129] kernel/sysctl.c: add missing range check in do_proc_dointvec_minmax_conv Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 003/129] staging: iio: adt7316: allow adt751x to use internal vref for all dacs Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 052/129] rtc: 88pm80x: fix unintended sign extension Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 010/129] clk: armada-370: fix refcount leak in a370_clk_init() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 071/129] ASoC: fsl_esai: fix register setting issue in RIGHT_J mode Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 117/129] net/mlx4_core: Fix locking in SRIOV mode when switching between events and polling Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 017/129] staging: iio: adt7316: fix the dac write calculation Ben Hutchings
2019-07-07 16:54 ` Ben Hutchings [this message]
2019-07-07 16:54 ` [PATCH 3.16 013/129] clk: dove: fix refcount leak in dove_clk_init() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 045/129] splice: don't merge into linked buffers Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 023/129] selinux: avoid silent denials in permissive mode under RCU walk Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 086/129] ALSA: bebob: use more identical mod_alias for Saffire Pro 10 I/O against Liquid Saffire 56 Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 064/129] iscsi_ibft: Fix missing break in switch statement Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 098/129] CIFS: Do not reset lease state to NONE on lease break Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 047/129] rtc: ds1672: fix unintended sign extension Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 076/129] ASoC: fsl: Fix of-node refcount unbalance in fsl_ssi_probe_from_dt() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 025/129] powerpc/irq: drop arch_early_irq_init() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 089/129] regulator: wm831x-dcdc: Fix list of wm831x_dcdc_ilim from mA to uA Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 100/129] CIFS: Fix read after write for files with read caching Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 019/129] ARM: s3c24xx: Fix boolean expressions in osiris_dvs_notify Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 116/129] net: sh_eth: fix a missing check of of_get_phy_mode Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 024/129] crypto: pcbc - remove bogus memcpy()s with src == dest Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 088/129] serial: 8250_of: assume reg-shift of 2 for mrvl,mmp-uart Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 030/129] crypto: tgr192 - fix unaligned memory access Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 004/129] clk: highbank: fix refcount leak in hb_clk_init() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 092/129] tools lib traceevent: Fix buffer overflow in arg_eval Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 027/129] media: s5p-jpeg: Correct step and max values for V4L2_CID_JPEG_RESTART_INTERVAL Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 058/129] ext4: update quota information while swapping boot loader inode Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 044/129] crypto: arm64/aes-ccm - fix logical bug in AAD MAC handling Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 111/129] vxlan: test dev->flags & IFF_UP before calling gro_cells_receive() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 101/129] mm/vmalloc: fix size check for remap_vmalloc_range_partial() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 001/129] staging: iio: adt7316: fix register and bit definitions Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 068/129] serial: 8250_pci: Have ACCES cards that use the four port Pericom PI7C9X7954 chip use the pci_pericom_setup() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 115/129] md: Fix failed allocation of md_register_thread Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 011/129] clk: kirkwood: fix refcount leak in kirkwood_clk_init() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 029/129] crypto: hash - set CRYPTO_TFM_NEED_KEY if ->setkey() fails Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 007/129] clk: imx6q: fix refcount leak in imx6q_clocks_init() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 108/129] lib/div64.c: off by one in shift Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 018/129] drm: Fix error handling in drm_legacy_addctx Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 112/129] gro_cells: make sure device is up in gro_cells_receive() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 002/129] staging: iio: adt7316: invert the logic of the check for an ldac pin Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 038/129] mtd: docg3: Fix kasprintf() usage Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 042/129] devres: always use dev_name() in devm_ioremap_resource() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 039/129] mtd: docg3: Fix passing zero to 'PTR_ERR' warning in doc_probe_device Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 049/129] media: uvcvideo: Avoid NULL pointer dereference at the end of streaming Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 072/129] cdc-wdm: pass return value of recover_from_urb_loss Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 118/129] net/mlx4_core: Fix qp mtt size calculation Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 070/129] USB: serial: ftdi_sio: add ID for Hjelmslund Electronics USB485 Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 129/129] netns: provide pure entropy for net_hash_mix() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 099/129] nfsd: fix memory corruption caused by readdir Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 096/129] net-sysfs: Fix mem leak in netdev_register_kobject Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 082/129] clocksource/drivers/exynos_mct: Fix error path in timer resources initialization Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 103/129] mm, swap: bounds check swap_info array accesses to avoid NULL derefs Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 087/129] staging: android: ashmem: Avoid range_alloc() allocation with ashmem_mutex held Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 066/129] tpm: Fix off-by-one when reading binary_bios_measurements Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 021/129] RDMA/ocrdma: Fix out of bounds index check in query pkey Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 016/129] staging: iio: adt7316: fix the dac read calculation Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 053/129] rtc: pm8xxx: fix unintended sign extension Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 034/129] hpet: Fix missing '=' character in the __setup() code of hpet_mmap_enable Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 104/129] s390/virtio: handle find on invalid queue gracefully Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 107/129] cpufreq: pxa2xx: remove incorrect __init annotation Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 028/129] media: v4l2: i2c: ov7670: Fix PLL bypass register values Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 083/129] mmc: omap: fix the maximum timeout setting Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 043/129] crypto: testmgr - skip crc32c context test for ahash algorithms Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 056/129] jbd2: clear dirty flag when revoking a buffer from an older transaction Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 122/129] fs: stream_open - opener for stream-like files so that read and write can run simultaneously without deadlock Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 015/129] staging: iio: adt7316: fix handling of dac high resolution option Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 123/129] fuse: Add FOPEN_STREAM to use stream_open() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 127/129] mwifiex: Abort at too short BSS descriptor element Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 062/129] pinctrl: sh-pfc: sh73a0: Fix fsic_spdif pin groups Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 090/129] powerpc/powernv: Make opal log only readable by root Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 051/129] rtc: 88pm860x: fix unintended sign extension Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 060/129] parport_pc: fix find_superio io compare code, should use equal test Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 063/129] ext4: fix crash during online resizing Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 055/129] bcache: treat stale && dirty keys as bad keys Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 109/129] xen, cpu_hotplug: Prevent an out of bounds access Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 073/129] libertas_tf: don't set URB_ZERO_PACKET on IN USB transfer Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 036/129] rcu: Do RCU GP kthread self-wakeup from softirq and interrupt Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 050/129] crypto: ahash - fix another early termination in hash walk Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 125/129] media: uvcvideo: Fix 'type' check leading to overflow Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 126/129] mwifiex: Fix possible buffer overflows at parsing bss descriptor Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 012/129] clk: armada-xp: fix refcount leak in axp_clk_init() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 014/129] staging: iio: adt7316: fix dac_bits assignment Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 057/129] ext4: fix check of inode in swap_inode_boot_loader Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 069/129] leds: lp55xx: fix null deref on firmware load failure Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 102/129] mm: fix potential data race in SyS_swapon Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 124/129] binder: Replace "%p" with "%pK" for stable Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 121/129] tcp: refine memory limit test in tcp_fragment() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 022/129] security/selinux: pass 'flags' arg to avc_audit() and avc_has_perm_flags() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 120/129] pptp: dst_release sk_dst_cache in pptp_sock_destruct Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 084/129] btrfs: init csum_list before possible free Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 046/129] scsi: target/iscsi: Avoid iscsit_release_commands_from_conn() deadlock Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 085/129] powerpc/mm/hash: Handle mmap_min_addr correctly in get_unmapped_area topdown search Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 020/129] IB/usnic: Fix out of bounds index check in query pkey Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 059/129] ext4: add mask of ext4 flags to swap Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 032/129] m68k: Add -ffreestanding to CFLAGS Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 054/129] bcache: never writeback a discard operation Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 097/129] ip6mr: Do not call __IP6_INC_STATS() from preemptible context Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 067/129] serial: 8250_pci: Fix number of ports for ACCES serial cards Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 031/129] ASoC: imx-sgtl5000: put of nodes if finding codec fails Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 006/129] clk: samsung: exynos4: fix refcount leak in exynos4_get_xom() Ben Hutchings
2019-07-07 16:54 ` [PATCH 3.16 041/129] ext2: Fix underflow in ext2_max_size() Ben Hutchings
2019-07-08 11:05 ` [PATCH 3.16 000/129] 3.16.70-rc1 review Guenter Roeck
2019-07-08 15:21   ` Ben Hutchings
2019-07-08 13:05 ` Luke Nowakowski-Krijger
2019-07-08 15:29   ` Ben Hutchings
2019-07-08 20:21     ` Luke Nowakowski-Krijger
2019-07-08 13:43 ` Amol Surati
2019-07-09 18:07 ` Guenter Roeck
2019-07-09 18:09   ` Ben Hutchings

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=lsq.1562518457.384221353@decadent.org.uk \
    --to=ben@decadent.org.uk \
    --cc=akpm@linux-foundation.org \
    --cc=dominique.martinet@cea.fr \
    --cc=houtao1@huawei.com \
    --cc=kda@linux-powerpc.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=xingaopeng@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).