stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, David Howells <dhowells@redhat.com>,
	Sasha Levin <sashal@kernel.org>
Subject: [PATCH 5.2 008/143] afs: Fix missing dentry data version updating
Date: Wed,  4 Sep 2019 19:52:31 +0200	[thread overview]
Message-ID: <20190904175314.465937108@linuxfoundation.org> (raw)
In-Reply-To: <20190904175314.206239922@linuxfoundation.org>

[ Upstream commit 9dd0b82ef530cdfe805c9f7079c99e104be59a14 ]

In the in-kernel afs filesystem, the d_fsdata dentry field is used to hold
the data version of the parent directory when it was created or when
d_revalidate() last caused it to be updated.  This is compared to the
->invalid_before field in the directory inode, rather than the actual data
version number, thereby allowing changes due to local edits to be ignored.
Only if the server data version gets bumped unexpectedly (eg. by a
competing client), do we need to revalidate stuff.

However, the d_fsdata field should also be updated if an rpc op is
performed that modifies that particular dentry.  Such ops return the
revised data version of the directory(ies) involved, so we should use that.

This is particularly problematic for rename, since a dentry from one
directory may be moved directly into another directory (ie. mv a/x b/x).
It would then be sporting the wrong data version - and if this is in the
future, for the destination directory, revalidations would be missed,
leading to foreign renames and hard-link deletion being missed.

Fix this by the following means:

 (1) Return the data version number from operations that read the directory
     contents - if they issue the read.  This starts in afs_dir_iterate()
     and is used, ignored or passed back by its callers.

 (2) In afs_lookup*(), set the dentry version to the version returned by
     (1) before d_splice_alias() is called and the dentry published.

 (3) In afs_d_revalidate(), set the dentry version to that returned from
     (1) if an rpc call was issued.  This means that if a parallel
     procedure, such as mkdir(), modifies the directory, we won't
     accidentally use the data version from that.

 (4) In afs_{mkdir,create,link,symlink}(), set the new dentry's version to
     the directory data version before d_instantiate() is called.

 (5) In afs_{rmdir,unlink}, update the target dentry's version to the
     directory data version as soon as we've updated the directory inode.

 (6) In afs_rename(), we need to unhash the old dentry before we start so
     that we don't get afs_d_revalidate() reverting the version change in
     cross-directory renames.

     We then need to set both the old and the new dentry versions the data
     version of the new directory before we call d_move() as d_move() will
     rehash them.

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 fs/afs/dir.c | 84 +++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 70 insertions(+), 14 deletions(-)

diff --git a/fs/afs/dir.c b/fs/afs/dir.c
index b87b41721eaa8..9620f19308f58 100644
--- a/fs/afs/dir.c
+++ b/fs/afs/dir.c
@@ -441,7 +441,7 @@ static int afs_dir_iterate_block(struct afs_vnode *dvnode,
  * iterate through the data blob that lists the contents of an AFS directory
  */
 static int afs_dir_iterate(struct inode *dir, struct dir_context *ctx,
-			   struct key *key)
+			   struct key *key, afs_dataversion_t *_dir_version)
 {
 	struct afs_vnode *dvnode = AFS_FS_I(dir);
 	struct afs_xdr_dir_page *dbuf;
@@ -461,6 +461,7 @@ static int afs_dir_iterate(struct inode *dir, struct dir_context *ctx,
 	req = afs_read_dir(dvnode, key);
 	if (IS_ERR(req))
 		return PTR_ERR(req);
+	*_dir_version = req->data_version;
 
 	/* round the file position up to the next entry boundary */
 	ctx->pos += sizeof(union afs_xdr_dirent) - 1;
@@ -515,7 +516,10 @@ out:
  */
 static int afs_readdir(struct file *file, struct dir_context *ctx)
 {
-	return afs_dir_iterate(file_inode(file), ctx, afs_file_key(file));
+	afs_dataversion_t dir_version;
+
+	return afs_dir_iterate(file_inode(file), ctx, afs_file_key(file),
+			       &dir_version);
 }
 
 /*
@@ -556,7 +560,8 @@ static int afs_lookup_one_filldir(struct dir_context *ctx, const char *name,
  * - just returns the FID the dentry name maps to if found
  */
 static int afs_do_lookup_one(struct inode *dir, struct dentry *dentry,
-			     struct afs_fid *fid, struct key *key)
+			     struct afs_fid *fid, struct key *key,
+			     afs_dataversion_t *_dir_version)
 {
 	struct afs_super_info *as = dir->i_sb->s_fs_info;
 	struct afs_lookup_one_cookie cookie = {
@@ -569,7 +574,7 @@ static int afs_do_lookup_one(struct inode *dir, struct dentry *dentry,
 	_enter("{%lu},%p{%pd},", dir->i_ino, dentry, dentry);
 
 	/* search the directory */
-	ret = afs_dir_iterate(dir, &cookie.ctx, key);
+	ret = afs_dir_iterate(dir, &cookie.ctx, key, _dir_version);
 	if (ret < 0) {
 		_leave(" = %d [iter]", ret);
 		return ret;
@@ -643,6 +648,7 @@ static struct inode *afs_do_lookup(struct inode *dir, struct dentry *dentry,
 	struct afs_server *server;
 	struct afs_vnode *dvnode = AFS_FS_I(dir), *vnode;
 	struct inode *inode = NULL, *ti;
+	afs_dataversion_t data_version = READ_ONCE(dvnode->status.data_version);
 	int ret, i;
 
 	_enter("{%lu},%p{%pd},", dir->i_ino, dentry, dentry);
@@ -670,12 +676,14 @@ static struct inode *afs_do_lookup(struct inode *dir, struct dentry *dentry,
 		cookie->fids[i].vid = as->volume->vid;
 
 	/* search the directory */
-	ret = afs_dir_iterate(dir, &cookie->ctx, key);
+	ret = afs_dir_iterate(dir, &cookie->ctx, key, &data_version);
 	if (ret < 0) {
 		inode = ERR_PTR(ret);
 		goto out;
 	}
 
+	dentry->d_fsdata = (void *)(unsigned long)data_version;
+
 	inode = ERR_PTR(-ENOENT);
 	if (!cookie->found)
 		goto out;
@@ -969,7 +977,8 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
 	struct dentry *parent;
 	struct inode *inode;
 	struct key *key;
-	long dir_version, de_version;
+	afs_dataversion_t dir_version;
+	long de_version;
 	int ret;
 
 	if (flags & LOOKUP_RCU)
@@ -1015,20 +1024,20 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
 	 * on a 32-bit system, we only have 32 bits in the dentry to store the
 	 * version.
 	 */
-	dir_version = (long)dir->status.data_version;
+	dir_version = dir->status.data_version;
 	de_version = (long)dentry->d_fsdata;
-	if (de_version == dir_version)
+	if (de_version == (long)dir_version)
 		goto out_valid_noupdate;
 
-	dir_version = (long)dir->invalid_before;
-	if (de_version - dir_version >= 0)
+	dir_version = dir->invalid_before;
+	if (de_version - (long)dir_version >= 0)
 		goto out_valid;
 
 	_debug("dir modified");
 	afs_stat_v(dir, n_reval);
 
 	/* search the directory for this vnode */
-	ret = afs_do_lookup_one(&dir->vfs_inode, dentry, &fid, key);
+	ret = afs_do_lookup_one(&dir->vfs_inode, dentry, &fid, key, &dir_version);
 	switch (ret) {
 	case 0:
 		/* the filename maps to something */
@@ -1081,7 +1090,7 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
 	}
 
 out_valid:
-	dentry->d_fsdata = (void *)dir_version;
+	dentry->d_fsdata = (void *)(unsigned long)dir_version;
 out_valid_noupdate:
 	dput(parent);
 	key_put(key);
@@ -1187,6 +1196,20 @@ static void afs_prep_for_new_inode(struct afs_fs_cursor *fc,
 	iget_data->cb_s_break = fc->cbi->server->cb_s_break;
 }
 
+/*
+ * Note that a dentry got changed.  We need to set d_fsdata to the data version
+ * number derived from the result of the operation.  It doesn't matter if
+ * d_fsdata goes backwards as we'll just revalidate.
+ */
+static void afs_update_dentry_version(struct afs_fs_cursor *fc,
+				      struct dentry *dentry,
+				      struct afs_status_cb *scb)
+{
+	if (fc->ac.error == 0)
+		dentry->d_fsdata =
+			(void *)(unsigned long)scb->status.data_version;
+}
+
 /*
  * create a directory on an AFS filesystem
  */
@@ -1229,6 +1252,7 @@ static int afs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
 		afs_check_for_remote_deletion(&fc, dvnode);
 		afs_vnode_commit_status(&fc, dvnode, fc.cb_break,
 					&data_version, &scb[0]);
+		afs_update_dentry_version(&fc, dentry, &scb[0]);
 		afs_vnode_new_inode(&fc, dentry, &iget_data, &scb[1]);
 		ret = afs_end_vnode_operation(&fc);
 		if (ret < 0)
@@ -1321,6 +1345,7 @@ static int afs_rmdir(struct inode *dir, struct dentry *dentry)
 
 		afs_vnode_commit_status(&fc, dvnode, fc.cb_break,
 					&data_version, scb);
+		afs_update_dentry_version(&fc, dentry, scb);
 		ret = afs_end_vnode_operation(&fc);
 		if (ret == 0) {
 			afs_dir_remove_subdir(dentry);
@@ -1462,6 +1487,7 @@ static int afs_unlink(struct inode *dir, struct dentry *dentry)
 					&data_version, &scb[0]);
 		afs_vnode_commit_status(&fc, vnode, fc.cb_break_2,
 					&data_version_2, &scb[1]);
+		afs_update_dentry_version(&fc, dentry, &scb[0]);
 		ret = afs_end_vnode_operation(&fc);
 		if (ret == 0 && !(scb[1].have_status || scb[1].have_error))
 			ret = afs_dir_remove_link(dvnode, dentry, key);
@@ -1530,6 +1556,7 @@ static int afs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
 		afs_check_for_remote_deletion(&fc, dvnode);
 		afs_vnode_commit_status(&fc, dvnode, fc.cb_break,
 					&data_version, &scb[0]);
+		afs_update_dentry_version(&fc, dentry, &scb[0]);
 		afs_vnode_new_inode(&fc, dentry, &iget_data, &scb[1]);
 		ret = afs_end_vnode_operation(&fc);
 		if (ret < 0)
@@ -1611,6 +1638,7 @@ static int afs_link(struct dentry *from, struct inode *dir,
 		afs_vnode_commit_status(&fc, vnode, fc.cb_break_2,
 					NULL, &scb[1]);
 		ihold(&vnode->vfs_inode);
+		afs_update_dentry_version(&fc, dentry, &scb[0]);
 		d_instantiate(dentry, &vnode->vfs_inode);
 
 		mutex_unlock(&vnode->io_lock);
@@ -1690,6 +1718,7 @@ static int afs_symlink(struct inode *dir, struct dentry *dentry,
 		afs_check_for_remote_deletion(&fc, dvnode);
 		afs_vnode_commit_status(&fc, dvnode, fc.cb_break,
 					&data_version, &scb[0]);
+		afs_update_dentry_version(&fc, dentry, &scb[0]);
 		afs_vnode_new_inode(&fc, dentry, &iget_data, &scb[1]);
 		ret = afs_end_vnode_operation(&fc);
 		if (ret < 0)
@@ -1795,6 +1824,17 @@ static int afs_rename(struct inode *old_dir, struct dentry *old_dentry,
 		}
 	}
 
+	/* This bit is potentially nasty as there's a potential race with
+	 * afs_d_revalidate{,_rcu}().  We have to change d_fsdata on the dentry
+	 * to reflect it's new parent's new data_version after the op, but
+	 * d_revalidate may see old_dentry between the op having taken place
+	 * and the version being updated.
+	 *
+	 * So drop the old_dentry for now to make other threads go through
+	 * lookup instead - which we hold a lock against.
+	 */
+	d_drop(old_dentry);
+
 	ret = -ERESTARTSYS;
 	if (afs_begin_vnode_operation(&fc, orig_dvnode, key, true)) {
 		afs_dataversion_t orig_data_version;
@@ -1806,7 +1846,7 @@ static int afs_rename(struct inode *old_dir, struct dentry *old_dentry,
 		if (orig_dvnode != new_dvnode) {
 			if (mutex_lock_interruptible_nested(&new_dvnode->io_lock, 1) < 0) {
 				afs_end_vnode_operation(&fc);
-				goto error_rehash;
+				goto error_rehash_old;
 			}
 			new_data_version = new_dvnode->status.data_version + 1;
 		} else {
@@ -1831,7 +1871,7 @@ static int afs_rename(struct inode *old_dir, struct dentry *old_dentry,
 		}
 		ret = afs_end_vnode_operation(&fc);
 		if (ret < 0)
-			goto error_rehash;
+			goto error_rehash_old;
 	}
 
 	if (ret == 0) {
@@ -1857,10 +1897,26 @@ static int afs_rename(struct inode *old_dir, struct dentry *old_dentry,
 				drop_nlink(new_inode);
 			spin_unlock(&new_inode->i_lock);
 		}
+
+		/* Now we can update d_fsdata on the dentries to reflect their
+		 * new parent's data_version.
+		 *
+		 * Note that if we ever implement RENAME_EXCHANGE, we'll have
+		 * to update both dentries with opposing dir versions.
+		 */
+		if (new_dvnode != orig_dvnode) {
+			afs_update_dentry_version(&fc, old_dentry, &scb[1]);
+			afs_update_dentry_version(&fc, new_dentry, &scb[1]);
+		} else {
+			afs_update_dentry_version(&fc, old_dentry, &scb[0]);
+			afs_update_dentry_version(&fc, new_dentry, &scb[0]);
+		}
 		d_move(old_dentry, new_dentry);
 		goto error_tmp;
 	}
 
+error_rehash_old:
+	d_rehash(new_dentry);
 error_rehash:
 	if (rehash)
 		d_rehash(rehash);
-- 
2.20.1




  parent reply	other threads:[~2019-09-04 18:19 UTC|newest]

Thread overview: 157+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-04 17:52 [PATCH 5.2 000/143] 5.2.12-stable review Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 001/143] dmaengine: ste_dma40: fix unneeded variable warning Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 002/143] nvme-multipath: revalidate nvme_ns_head gendisk in nvme_validate_ns Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 003/143] afs: Fix the CB.ProbeUuid service handler to reply correctly Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 004/143] afs: Fix loop index mixup in afs_deliver_vl_get_entry_by_name_u() Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 005/143] fs: afs: Fix a possible null-pointer dereference in afs_put_read() Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 006/143] afs: Fix off-by-one in afs_rename() expected data version calculation Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 007/143] afs: Only update d_fsdata if different in afs_d_revalidate() Greg Kroah-Hartman
2019-09-04 17:52 ` Greg Kroah-Hartman [this message]
2019-09-04 17:52 ` [PATCH 5.2 009/143] nvmet: Fix use-after-free bug when a port is removed Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 010/143] nvmet-loop: Flush nvme_delete_wq when removing the port Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 011/143] nvmet-file: fix nvmet_file_flush() always returning an error Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 012/143] nvme-core: Fix extra device_put() call on error path Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 013/143] nvme: fix a possible deadlock when passthru commands sent to a multipath device Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 014/143] nvme-rdma: fix possible use-after-free in connect error flow Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 015/143] nvme: fix controller removal race with scan work Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 016/143] nvme-pci: Fix async probe remove race Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 017/143] soundwire: cadence_master: fix register definition for SLAVE_STATE Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 018/143] soundwire: cadence_master: fix definitions for INTSTAT0/1 Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 019/143] auxdisplay: panel: need to delete scan_timer when misc_register fails in panel_attach Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 020/143] btrfs: trim: Check the range passed into to prevent overflow Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 021/143] IB/mlx5: Fix implicit MR release flow Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 022/143] dmaengine: stm32-mdma: Fix a possible null-pointer dereference in stm32_mdma_irq_handler() Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 023/143] omap-dma/omap_vout_vrfb: fix off-by-one fi value Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 024/143] iommu/dma: Handle SG length overflow better Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 025/143] dma-direct: dont truncate dma_required_mask to bus addressing capabilities Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 026/143] usb: gadget: composite: Clear "suspended" on reset/disconnect Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 027/143] usb: gadget: mass_storage: Fix races between fsg_disable and fsg_set_alt Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 028/143] habanalabs: fix DRAM usage accounting on context tear down Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 029/143] habanalabs: fix endianness handling for packets from user Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 030/143] habanalabs: fix completion queue handling when host is BE Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 031/143] habanalabs: fix endianness handling for internal QMAN submission Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 032/143] habanalabs: fix device IRQ unmasking for BE host Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 033/143] xen/blkback: fix memory leaks Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 034/143] arm64: cpufeature: Dont treat granule sizes as strict Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 035/143] riscv: fix flush_tlb_range() end address for flush_tlb_page() Greg Kroah-Hartman
2019-09-04 17:52 ` [PATCH 5.2 036/143] i2c: rcar: avoid race when unregistering slave client Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 037/143] i2c: emev2: " Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 038/143] drm/scheduler: use job count instead of peek Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 039/143] drm/ast: Fixed reboot test may cause system hanged Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 040/143] usb: host: fotg2: restart hcd after port reset Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 041/143] tools: hv: fixed Python pep8/flake8 warnings for lsvmbus Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 042/143] tools: hv: fix KVP and VSS daemons exit code Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 043/143] locking/rwsem: Add missing ACQUIRE to read_slowpath exit when queue is empty Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 044/143] lcoking/rwsem: Add missing ACQUIRE to read_slowpath sleep loop Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 045/143] watchdog: bcm2835_wdt: Fix module autoload Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 046/143] selftests/bpf: install files test_xdp_vlan.sh Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 047/143] drm/bridge: tfp410: fix memleak in get_modes() Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 048/143] mt76: usb: fix rx A-MSDU support Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 049/143] ipv6/addrconf: allow adding multicast addr if IFA_F_MCAUTOJOIN is set Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 050/143] ipv6: Fix return value of ipv6_mc_may_pull() for malformed packets Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 051/143] net: cpsw: fix NULL pointer exception in the probe error path Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 052/143] net: fix __ip_mc_inc_group usage Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 053/143] net/smc: make sure EPOLLOUT is raised Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 054/143] tcp: make sure EPOLLOUT wont be missed Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 055/143] ipv4: mpls: fix mpls_xmit for iptunnel Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 056/143] openvswitch: Fix conntrack cache with timeout Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 057/143] ipv4/icmp: fix rt dst dev null pointer dereference Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 058/143] xfrm/xfrm_policy: fix dst dev null pointer dereference in collect_md mode Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 059/143] mm/zsmalloc.c: fix build when CONFIG_COMPACTION=n Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 060/143] ALSA: usb-audio: Check mixer unit bitmap yet more strictly Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 061/143] ALSA: hda/ca0132 - Add new SBZ quirk Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 062/143] ALSA: line6: Fix memory leak at line6_init_pcm() error path Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 063/143] ALSA: hda - Fixes inverted Conexant GPIO mic mute led Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 064/143] ALSA: seq: Fix potential concurrent access to the deleted pool Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 065/143] ALSA: usb-audio: Fix invalid NULL check in snd_emuusb_set_samplerate() Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 066/143] ALSA: usb-audio: Add implicit fb quirk for Behringer UFX1604 Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 067/143] kvm: x86: skip populating logical dest map if apic is not sw enabled Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 068/143] KVM: x86: hyper-v: dont crash on KVM_GET_SUPPORTED_HV_CPUID when kvm_intel.nested is disabled Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 069/143] KVM: x86: Dont update RIP or do single-step on faulting emulation Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 070/143] uprobes/x86: Fix detection of 32-bit user mode Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 071/143] x86/mm/cpa: Prevent large page split when ftrace flips RW on kernel text Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 072/143] x86/apic: Do not initialize LDR and DFR for bigsmp Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 073/143] x86/apic: Include the LDR when clearing out APIC registers Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 074/143] HID: logitech-hidpp: remove support for the G700 over USB Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 075/143] ftrace: Fix NULL pointer dereference in t_probe_next() Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 076/143] ftrace: Check for successful allocation of hash Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 077/143] ftrace: Check for empty hash and comment the race with registering probes Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 078/143] usbtmc: more sanity checking for packet size Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 079/143] usb-storage: Add new JMS567 revision to unusual_devs Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 080/143] USB: cdc-wdm: fix race between write and disconnect due to flag abuse Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 081/143] usb: hcd: use managed device resources Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 082/143] usb: chipidea: udc: dont do hardware access if gadget has stopped Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 083/143] usb: host: ohci: fix a race condition between shutdown and irq Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 084/143] usb: host: xhci: rcar: Fix typo in compatible string matching Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 085/143] USB: storage: ums-realtek: Update module parameter description for auto_delink_en Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 086/143] USB: storage: ums-realtek: Whitelist auto-delink support Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 087/143] tools/power turbostat: Fix caller parameter of get_tdp_amd() Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 088/143] KVM: PPC: Book3S: Fix incorrect guest-to-user-translation error handling Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 089/143] KVM: arm/arm64: vgic: Fix potential deadlock when ap_list is long Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 090/143] KVM: arm/arm64: vgic-v2: Handle SGI bits in GICD_I{S,C}PENDR0 as WI Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 091/143] mei: me: add Tiger Lake point LP device ID Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 092/143] Revert "mmc: sdhci-tegra: drop ->get_ro() implementation" Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 093/143] mmc: sdhci-of-at91: add quirk for broken HS200 Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 094/143] mmc: sdhci-cadence: enable v4_mode to fix ADMA 64-bit addressing Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 095/143] mmc: core: Fix init of SD cards reporting an invalid VDD range Greg Kroah-Hartman
2019-09-04 17:53 ` [PATCH 5.2 096/143] mmc: sdhci-sprd: fixed incorrect clock divider Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 097/143] mmc: sdhci-sprd: add SDHCI_QUIRK2_PRESET_VALUE_BROKEN Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 098/143] stm class: Fix a double free of stm_source_device Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 099/143] intel_th: pci: Add support for another Lewisburg PCH Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 100/143] intel_th: pci: Add Tiger Lake support Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 101/143] typec: tcpm: fix a typo in the comparison of pdo_max_voltage Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 102/143] fsi: scom: Dont abort operations for minor errors Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 103/143] lkdtm/bugs: fix build error in lkdtm_EXHAUST_STACK Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 104/143] NFSv4/pnfs: Fix a page lock leak in nfs_pageio_resend() Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 105/143] NFS: Ensure O_DIRECT reports an error if the bytes read/written is 0 Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 106/143] Revert "NFSv4/flexfiles: Abort I/O early if the layout segment was invalidated" Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 107/143] lib: logic_pio: Fix RCU usage Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 108/143] lib: logic_pio: Avoid possible overlap for unregistering regions Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 109/143] lib: logic_pio: Add logic_pio_unregister_range() Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 110/143] drm/amdgpu: Add APTX quirk for Dell Latitude 5495 Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 111/143] drm/amdgpu: fix GFXOFF on Picasso and Raven2 Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 112/143] drm/i915: Dont deballoon unused ggtt drm_mm_node in linux guest Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 113/143] drm/i915: Call dma_set_max_seg_size() in i915_driver_hw_probe() Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 114/143] i2c: piix4: Fix port selection for AMD Family 16h Model 30h Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 115/143] bus: hisi_lpc: Unregister logical PIO range to avoid potential use-after-free Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 116/143] bus: hisi_lpc: Add .remove method to avoid driver unbind crash Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 117/143] VMCI: Release resource if the work is already queued Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 118/143] crypto: ccp - Ignore unconfigured CCP device on suspend/resume Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 119/143] SUNRPC: Dont handle errors if the bind/connect succeeded Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 120/143] mt76: mt76x0u: do not reset radio on resume Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 121/143] mms: sdhci-sprd: add SDHCI_QUIRK_BROKEN_CARD_DETECTION Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 122/143] mm, memcg: partially revert "mm/memcontrol.c: keep local VM counters in sync with the hierarchical ones" Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 123/143] mm: memcontrol: fix percpu vmstats and vmevents flush Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 124/143] Revert "cfg80211: fix processing world regdomain when non modular" Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 125/143] mac80211: fix possible sta leak Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 126/143] cfg80211: Fix Extended Key ID key install checks Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 127/143] mac80211: Dont memset RXCB prior to PAE intercept Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 128/143] mac80211: Correctly set noencrypt for PAE frames Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 129/143] mmc: sdhci-sprd: clear the UHS-I modes read from registers Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 130/143] mmc: sdhci-sprd: Implement the get_max_timeout_count() interface Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 131/143] mmc: sdhci-sprd: add get_ro hook function Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 132/143] iwlwifi: add new cards for 22000 and fix struct name Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 133/143] iwlwifi: add new cards for 22000 and change wrong structs Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 134/143] iwlwifi: add new cards for 9000 and 20000 series Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 135/143] iwlwifi: change 0x02F0 fw from qu to quz Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 136/143] iwlwifi: pcie: add support for qu c-step devices Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 137/143] iwlwifi: pcie: dont switch FW to qnj when ax201 is detected Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 138/143] iwlwifi: pcie: handle switching killer Qu B0 NICs to C0 Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 139/143] drm/i915: Do not create a new max_bpc prop for MST connectors Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 140/143] drm/i915/dp: Fix DSC enable code to use cpu_transcoder instead of encoder->type Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 141/143] x86/ptrace: fix up botched merge of spectrev1 fix Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 142/143] bpf: fix use after free in prog symbol exposure Greg Kroah-Hartman
2019-09-04 17:54 ` [PATCH 5.2 143/143] hsr: implement dellink to clean up resources Greg Kroah-Hartman
2019-09-04 21:20   ` Sasha Levin
2019-09-05 18:47     ` Greg Kroah-Hartman
2019-09-04 23:38 ` [PATCH 5.2 000/143] 5.2.12-stable review kernelci.org bot
2019-09-05 15:00 ` shuah
2019-09-05 19:06   ` Greg Kroah-Hartman
2019-09-05 16:56 ` Guenter Roeck
2019-09-05 19:15   ` Greg Kroah-Hartman
2019-09-05 17:29 ` Daniel Díaz
2019-09-05 19:16   ` Greg Kroah-Hartman
2019-09-05 19:50 ` Kelsey Skunberg
2019-09-05 20:17   ` Greg Kroah-Hartman
2019-09-06  7:37 ` Jon Hunter
2019-09-06  8:16   ` Greg Kroah-Hartman

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=20190904175314.465937108@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=dhowells@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    /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).