mirror of https://lore.kernel.org/lkml/
 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, "Jan Kara" <jack@suse.cz>,
	"Christoph Hellwig" <hch@lst.de>
Subject: [PATCH 3.2 145/152] fs: Give dentry to inode_change_ok() instead of inode
Date: Mon, 14 Nov 2016 00:14:07 +0000	[thread overview]
Message-ID: <lsq.1479082447.807543443@decadent.org.uk> (raw)
In-Reply-To: <lsq.1479082446.271293126@decadent.org.uk>

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

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

From: Jan Kara <jack@suse.cz>

commit 31051c85b5e2aaaf6315f74c72a732673632a905 upstream.

inode_change_ok() will be resposible for clearing capabilities and IMA
extended attributes and as such will need dentry. Give it as an argument
to inode_change_ok() instead of an inode. Also rename inode_change_ok()
to setattr_prepare() to better relect that it does also some
modifications in addition to checks.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jan Kara <jack@suse.cz>
[bwh: Backported to 3.2:
 - Drop changes to f2fs, lustre, orangefs, overlayfs
 - Adjust filenames, context
 - In nfsd, pass dentry to nfsd_sanitize_attrs()
 - In xfs, pass dentry to xfs_change_file_space(), xfs_set_mode(),
   xfs_setattr_nonsize(), and xfs_setattr_size()
 - Update ext3 as well
 - Mark pohmelfs as BROKEN; it's long dead upstream]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
--- a/Documentation/filesystems/porting
+++ b/Documentation/filesystems/porting
@@ -288,8 +288,8 @@ implementing on-disk size changes.  Star
 and vmtruncate, and the reorder the vmtruncate + foofs_vmtruncate sequence to
 be in order of zeroing blocks using block_truncate_page or similar helpers,
 size update and on finally on-disk truncation which should not fail.
-inode_change_ok now includes the size checks for ATTR_SIZE and must be called
-in the beginning of ->setattr unconditionally.
+setattr_prepare (which used to be inode_change_ok) now includes the size checks
+for ATTR_SIZE and must be called in the beginning of ->setattr unconditionally.
 
 [mandatory]
 
--- a/drivers/staging/pohmelfs/Kconfig
+++ b/drivers/staging/pohmelfs/Kconfig
@@ -1,5 +1,6 @@
 config POHMELFS
 	tristate "POHMELFS filesystem support"
+	depends on BROKEN
 	depends on NET
 	select CONNECTOR
 	select CRYPTO
--- a/fs/9p/vfs_inode.c
+++ b/fs/9p/vfs_inode.c
@@ -1068,7 +1068,7 @@ static int v9fs_vfs_setattr(struct dentr
 	struct p9_wstat wstat;
 
 	P9_DPRINTK(P9_DEBUG_VFS, "\n");
-	retval = inode_change_ok(dentry->d_inode, iattr);
+	retval = setattr_prepare(dentry, iattr);
 	if (retval)
 		return retval;
 
--- a/fs/9p/vfs_inode_dotl.c
+++ b/fs/9p/vfs_inode_dotl.c
@@ -538,7 +538,7 @@ int v9fs_vfs_setattr_dotl(struct dentry
 
 	P9_DPRINTK(P9_DEBUG_VFS, "\n");
 
-	retval = inode_change_ok(dentry->d_inode, iattr);
+	retval = setattr_prepare(dentry, iattr);
 	if (retval)
 		return retval;
 
--- a/fs/adfs/inode.c
+++ b/fs/adfs/inode.c
@@ -298,7 +298,7 @@ adfs_notify_change(struct dentry *dentry
 	unsigned int ia_valid = attr->ia_valid;
 	int error;
 	
-	error = inode_change_ok(inode, attr);
+	error = setattr_prepare(dentry, attr);
 
 	/*
 	 * we can't change the UID or GID of any file -
--- a/fs/affs/inode.c
+++ b/fs/affs/inode.c
@@ -222,7 +222,7 @@ affs_notify_change(struct dentry *dentry
 
 	pr_debug("AFFS: notify_change(%lu,0x%x)\n",inode->i_ino,attr->ia_valid);
 
-	error = inode_change_ok(inode,attr);
+	error = setattr_prepare(dentry, attr);
 	if (error)
 		goto out;
 
--- a/fs/attr.c
+++ b/fs/attr.c
@@ -16,19 +16,22 @@
 #include <linux/evm.h>
 
 /**
- * inode_change_ok - check if attribute changes to an inode are allowed
- * @inode:	inode to check
+ * setattr_prepare - check if attribute changes to a dentry are allowed
+ * @dentry:	dentry to check
  * @attr:	attributes to change
  *
  * Check if we are allowed to change the attributes contained in @attr
- * in the given inode.  This includes the normal unix access permission
- * checks, as well as checks for rlimits and others.
+ * in the given dentry.  This includes the normal unix access permission
+ * checks, as well as checks for rlimits and others. The function also clears
+ * SGID bit from mode if user is not allowed to set it. Also file capabilities
+ * and IMA extended attributes are cleared if ATTR_KILL_PRIV is set.
  *
  * Should be called as the first thing in ->setattr implementations,
  * possibly after taking additional locks.
  */
-int inode_change_ok(const struct inode *inode, struct iattr *attr)
+int setattr_prepare(struct dentry *dentry, struct iattr *attr)
 {
+	struct inode *inode = dentry->d_inode;
 	unsigned int ia_valid = attr->ia_valid;
 
 	/*
@@ -76,7 +79,7 @@ int inode_change_ok(const struct inode *
 
 	return 0;
 }
-EXPORT_SYMBOL(inode_change_ok);
+EXPORT_SYMBOL(setattr_prepare);
 
 /**
  * inode_newsize_ok - may this inode be truncated to a given size
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -3533,7 +3533,7 @@ static int btrfs_setattr(struct dentry *
 	if (btrfs_root_readonly(root))
 		return -EROFS;
 
-	err = inode_change_ok(inode, attr);
+	err = setattr_prepare(dentry, attr);
 	if (err)
 		return err;
 
--- a/fs/ceph/inode.c
+++ b/fs/ceph/inode.c
@@ -1541,7 +1541,7 @@ int ceph_setattr(struct dentry *dentry,
 
 	__ceph_do_pending_vmtruncate(inode);
 
-	err = inode_change_ok(inode, attr);
+	err = setattr_prepare(dentry, attr);
 	if (err != 0)
 		return err;
 
--- a/fs/cifs/inode.c
+++ b/fs/cifs/inode.c
@@ -1948,7 +1948,7 @@ cifs_setattr_unix(struct dentry *direntr
 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM)
 		attrs->ia_valid |= ATTR_FORCE;
 
-	rc = inode_change_ok(inode, attrs);
+	rc = setattr_prepare(direntry, attrs);
 	if (rc < 0)
 		goto out;
 
@@ -2089,7 +2089,7 @@ cifs_setattr_nounix(struct dentry *diren
 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM)
 		attrs->ia_valid |= ATTR_FORCE;
 
-	rc = inode_change_ok(inode, attrs);
+	rc = setattr_prepare(direntry, attrs);
 	if (rc < 0) {
 		FreeXid(xid);
 		return rc;
--- a/fs/ecryptfs/inode.c
+++ b/fs/ecryptfs/inode.c
@@ -1026,7 +1026,7 @@ static int ecryptfs_setattr(struct dentr
 	}
 	mutex_unlock(&crypt_stat->cs_mutex);
 
-	rc = inode_change_ok(inode, ia);
+	rc = setattr_prepare(dentry, ia);
 	if (rc)
 		goto out;
 	if (ia->ia_valid & ATTR_SIZE) {
--- a/fs/exofs/inode.c
+++ b/fs/exofs/inode.c
@@ -1018,7 +1018,7 @@ int exofs_setattr(struct dentry *dentry,
 	if (unlikely(error))
 		return error;
 
-	error = inode_change_ok(inode, iattr);
+	error = setattr_prepare(dentry, iattr);
 	if (unlikely(error))
 		return error;
 
--- a/fs/ext2/inode.c
+++ b/fs/ext2/inode.c
@@ -1530,7 +1530,7 @@ int ext2_setattr(struct dentry *dentry,
 	struct inode *inode = dentry->d_inode;
 	int error;
 
-	error = inode_change_ok(inode, iattr);
+	error = setattr_prepare(dentry, iattr);
 	if (error)
 		return error;
 
--- a/fs/ext3/inode.c
+++ b/fs/ext3/inode.c
@@ -3271,7 +3271,7 @@ int ext3_setattr(struct dentry *dentry,
 	int error, rc = 0;
 	const unsigned int ia_valid = attr->ia_valid;
 
-	error = inode_change_ok(inode, attr);
+	error = setattr_prepare(dentry, attr);
 	if (error)
 		return error;
 
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -4291,7 +4291,7 @@ int ext4_setattr(struct dentry *dentry,
 	int orphan = 0;
 	const unsigned int ia_valid = attr->ia_valid;
 
-	error = inode_change_ok(inode, attr);
+	error = setattr_prepare(dentry, attr);
 	if (error)
 		return error;
 
--- a/fs/fat/file.c
+++ b/fs/fat/file.c
@@ -382,7 +382,7 @@ int fat_setattr(struct dentry *dentry, s
 			attr->ia_valid &= ~TIMES_SET_FLAGS;
 	}
 
-	error = inode_change_ok(inode, attr);
+	error = setattr_prepare(dentry, attr);
 	attr->ia_valid = ia_valid;
 	if (error) {
 		if (sbi->options.quiet)
--- a/fs/fuse/dir.c
+++ b/fs/fuse/dir.c
@@ -1298,7 +1298,7 @@ static int fuse_do_setattr(struct dentry
 	if (!(fc->flags & FUSE_DEFAULT_PERMISSIONS))
 		attr->ia_valid |= ATTR_FORCE;
 
-	err = inode_change_ok(inode, attr);
+	err = setattr_prepare(entry, attr);
 	if (err)
 		return err;
 
--- a/fs/gfs2/inode.c
+++ b/fs/gfs2/inode.c
@@ -1646,7 +1646,7 @@ static int gfs2_setattr(struct dentry *d
 	if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
 		goto out;
 
-	error = inode_change_ok(inode, attr);
+	error = setattr_prepare(dentry, attr);
 	if (error)
 		goto out;
 
--- a/fs/hfs/inode.c
+++ b/fs/hfs/inode.c
@@ -588,7 +588,7 @@ int hfs_inode_setattr(struct dentry *den
 	struct hfs_sb_info *hsb = HFS_SB(inode->i_sb);
 	int error;
 
-	error = inode_change_ok(inode, attr); /* basic permission checks */
+	error = setattr_prepare(dentry, attr); /* basic permission checks */
 	if (error)
 		return error;
 
--- a/fs/hfsplus/inode.c
+++ b/fs/hfsplus/inode.c
@@ -292,7 +292,7 @@ static int hfsplus_setattr(struct dentry
 	struct inode *inode = dentry->d_inode;
 	int error;
 
-	error = inode_change_ok(inode, attr);
+	error = setattr_prepare(dentry, attr);
 	if (error)
 		return error;
 
--- a/fs/hostfs/hostfs_kern.c
+++ b/fs/hostfs/hostfs_kern.c
@@ -792,7 +792,7 @@ int hostfs_setattr(struct dentry *dentry
 
 	int fd = HOSTFS_I(inode)->fd;
 
-	err = inode_change_ok(inode, attr);
+	err = setattr_prepare(dentry, attr);
 	if (err)
 		return err;
 
--- a/fs/hpfs/inode.c
+++ b/fs/hpfs/inode.c
@@ -268,7 +268,7 @@ int hpfs_setattr(struct dentry *dentry,
 	if ((attr->ia_valid & ATTR_SIZE) && attr->ia_size > inode->i_size)
 		goto out_unlock;
 
-	error = inode_change_ok(inode, attr);
+	error = setattr_prepare(dentry, attr);
 	if (error)
 		goto out_unlock;
 
--- a/fs/hugetlbfs/inode.c
+++ b/fs/hugetlbfs/inode.c
@@ -422,7 +422,7 @@ static int hugetlbfs_setattr(struct dent
 
 	BUG_ON(!inode);
 
-	error = inode_change_ok(inode, attr);
+	error = setattr_prepare(dentry, attr);
 	if (error)
 		return error;
 
--- a/fs/jffs2/fs.c
+++ b/fs/jffs2/fs.c
@@ -186,7 +186,7 @@ int jffs2_setattr(struct dentry *dentry,
 {
 	int rc;
 
-	rc = inode_change_ok(dentry->d_inode, iattr);
+	rc = setattr_prepare(dentry, iattr);
 	if (rc)
 		return rc;
 
--- a/fs/jfs/file.c
+++ b/fs/jfs/file.c
@@ -102,7 +102,7 @@ int jfs_setattr(struct dentry *dentry, s
 	struct inode *inode = dentry->d_inode;
 	int rc;
 
-	rc = inode_change_ok(inode, iattr);
+	rc = setattr_prepare(dentry, iattr);
 	if (rc)
 		return rc;
 
--- a/fs/libfs.c
+++ b/fs/libfs.c
@@ -364,7 +364,7 @@ int simple_setattr(struct dentry *dentry
 
 	WARN_ON_ONCE(inode->i_op->truncate);
 
-	error = inode_change_ok(inode, iattr);
+	error = setattr_prepare(dentry, iattr);
 	if (error)
 		return error;
 
--- a/fs/logfs/file.c
+++ b/fs/logfs/file.c
@@ -241,7 +241,7 @@ static int logfs_setattr(struct dentry *
 	struct inode *inode = dentry->d_inode;
 	int err = 0;
 
-	err = inode_change_ok(inode, attr);
+	err = setattr_prepare(dentry, attr);
 	if (err)
 		return err;
 
--- a/fs/minix/file.c
+++ b/fs/minix/file.c
@@ -28,7 +28,7 @@ static int minix_setattr(struct dentry *
 	struct inode *inode = dentry->d_inode;
 	int error;
 
-	error = inode_change_ok(inode, attr);
+	error = setattr_prepare(dentry, attr);
 	if (error)
 		return error;
 
--- a/fs/ncpfs/inode.c
+++ b/fs/ncpfs/inode.c
@@ -880,7 +880,7 @@ int ncp_notify_change(struct dentry *den
 	/* ageing the dentry to force validation */
 	ncp_age_dentry(server, dentry);
 
-	result = inode_change_ok(inode, attr);
+	result = setattr_prepare(dentry, attr);
 	if (result < 0)
 		goto out;
 
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -301,17 +301,19 @@ commit_metadata(struct svc_fh *fhp)
  * NFS semantics and what Linux expects.
  */
 static void
-nfsd_sanitize_attrs(struct inode *inode, struct iattr *iap)
+nfsd_sanitize_attrs(struct dentry *dentry, struct iattr *iap)
 {
+	struct inode *inode = dentry->d_inode;
+
 	/*
 	 * NFSv2 does not differentiate between "set-[ac]time-to-now"
 	 * which only requires access, and "set-[ac]time-to-X" which
 	 * requires ownership.
 	 * So if it looks like it might be "set both to the same time which
-	 * is close to now", and if inode_change_ok fails, then we
+	 * is close to now", and if setattr_prepare fails, then we
 	 * convert to "set to now" instead of "set to explicit time"
 	 *
-	 * We only call inode_change_ok as the last test as technically
+	 * We only call setattr_prepare as the last test as technically
 	 * it is not an interface that we should be using.
 	 */
 #define BOTH_TIME_SET (ATTR_ATIME_SET | ATTR_MTIME_SET)
@@ -329,7 +331,7 @@ nfsd_sanitize_attrs(struct inode *inode,
 		if (delta < 0)
 			delta = -delta;
 		if (delta < MAX_TOUCH_TIME_ERROR &&
-		    inode_change_ok(inode, iap) != 0) {
+		    setattr_prepare(dentry, iap) != 0) {
 			/*
 			 * Turn off ATTR_[AM]TIME_SET but leave ATTR_[AM]TIME.
 			 * This will cause notify_change to set these times
@@ -437,7 +439,7 @@ nfsd_setattr(struct svc_rqst *rqstp, str
 	if (!iap->ia_valid)
 		goto out;
 
-	nfsd_sanitize_attrs(inode, iap);
+	nfsd_sanitize_attrs(dentry, iap);
 
 	/*
 	 * The size case is special, it changes the file in addition to the
--- a/fs/nilfs2/inode.c
+++ b/fs/nilfs2/inode.c
@@ -792,7 +792,7 @@ int nilfs_setattr(struct dentry *dentry,
 	struct super_block *sb = inode->i_sb;
 	int err;
 
-	err = inode_change_ok(inode, iattr);
+	err = setattr_prepare(dentry, iattr);
 	if (err)
 		return err;
 
--- a/fs/ntfs/inode.c
+++ b/fs/ntfs/inode.c
@@ -2890,7 +2890,7 @@ int ntfs_setattr(struct dentry *dentry,
 	int err;
 	unsigned int ia_valid = attr->ia_valid;
 
-	err = inode_change_ok(vi, attr);
+	err = setattr_prepare(dentry, attr);
 	if (err)
 		goto out;
 	/* We do not support NTFS ACLs yet. */
--- a/fs/ocfs2/dlmfs/dlmfs.c
+++ b/fs/ocfs2/dlmfs/dlmfs.c
@@ -212,7 +212,7 @@ static int dlmfs_file_setattr(struct den
 	struct inode *inode = dentry->d_inode;
 
 	attr->ia_valid &= ~ATTR_SIZE;
-	error = inode_change_ok(inode, attr);
+	error = setattr_prepare(dentry, attr);
 	if (error)
 		return error;
 
--- a/fs/ocfs2/file.c
+++ b/fs/ocfs2/file.c
@@ -1127,7 +1127,7 @@ int ocfs2_setattr(struct dentry *dentry,
 	if (!(attr->ia_valid & OCFS2_VALID_ATTRS))
 		return 0;
 
-	status = inode_change_ok(inode, attr);
+	status = setattr_prepare(dentry, attr);
 	if (status)
 		return status;
 
--- a/fs/omfs/file.c
+++ b/fs/omfs/file.c
@@ -345,7 +345,7 @@ static int omfs_setattr(struct dentry *d
 	struct inode *inode = dentry->d_inode;
 	int error;
 
-	error = inode_change_ok(inode, attr);
+	error = setattr_prepare(dentry, attr);
 	if (error)
 		return error;
 
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -558,7 +558,7 @@ int proc_setattr(struct dentry *dentry,
 	if (attr->ia_valid & ATTR_MODE)
 		return -EPERM;
 
-	error = inode_change_ok(inode, attr);
+	error = setattr_prepare(dentry, attr);
 	if (error)
 		return error;
 
--- a/fs/proc/generic.c
+++ b/fs/proc/generic.c
@@ -257,7 +257,7 @@ static int proc_notify_change(struct den
 	struct proc_dir_entry *de = PDE(inode);
 	int error;
 
-	error = inode_change_ok(inode, iattr);
+	error = setattr_prepare(dentry, iattr);
 	if (error)
 		return error;
 
--- a/fs/proc/proc_sysctl.c
+++ b/fs/proc/proc_sysctl.c
@@ -387,7 +387,7 @@ static int proc_sys_setattr(struct dentr
 	if (attr->ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID))
 		return -EPERM;
 
-	error = inode_change_ok(inode, attr);
+	error = setattr_prepare(dentry, attr);
 	if (error)
 		return error;
 
--- a/fs/ramfs/file-nommu.c
+++ b/fs/ramfs/file-nommu.c
@@ -164,7 +164,7 @@ static int ramfs_nommu_setattr(struct de
 	int ret = 0;
 
 	/* POSIX UID/GID verification for setting inode attributes */
-	ret = inode_change_ok(inode, ia);
+	ret = setattr_prepare(dentry, ia);
 	if (ret)
 		return ret;
 
--- a/fs/reiserfs/inode.c
+++ b/fs/reiserfs/inode.c
@@ -3107,7 +3107,7 @@ int reiserfs_setattr(struct dentry *dent
 	int depth;
 	int error;
 
-	error = inode_change_ok(inode, attr);
+	error = setattr_prepare(dentry, attr);
 	if (error)
 		return error;
 
--- a/fs/sysfs/inode.c
+++ b/fs/sysfs/inode.c
@@ -114,7 +114,7 @@ int sysfs_setattr(struct dentry *dentry,
 		return -EINVAL;
 
 	mutex_lock(&sysfs_mutex);
-	error = inode_change_ok(inode, iattr);
+	error = setattr_prepare(dentry, iattr);
 	if (error)
 		goto out;
 
--- a/fs/sysv/file.c
+++ b/fs/sysv/file.c
@@ -35,7 +35,7 @@ static int sysv_setattr(struct dentry *d
 	struct inode *inode = dentry->d_inode;
 	int error;
 
-	error = inode_change_ok(inode, attr);
+	error = setattr_prepare(dentry, attr);
 	if (error)
 		return error;
 
--- a/fs/ubifs/file.c
+++ b/fs/ubifs/file.c
@@ -1260,7 +1260,7 @@ int ubifs_setattr(struct dentry *dentry,
 
 	dbg_gen("ino %lu, mode %#x, ia_valid %#x",
 		inode->i_ino, inode->i_mode, attr->ia_valid);
-	err = inode_change_ok(inode, attr);
+	err = setattr_prepare(dentry, attr);
 	if (err)
 		return err;
 
--- a/fs/udf/file.c
+++ b/fs/udf/file.c
@@ -251,7 +251,7 @@ static int udf_setattr(struct dentry *de
 	struct inode *inode = dentry->d_inode;
 	int error;
 
-	error = inode_change_ok(inode, attr);
+	error = setattr_prepare(dentry, attr);
 	if (error)
 		return error;
 
--- a/fs/ufs/truncate.c
+++ b/fs/ufs/truncate.c
@@ -496,7 +496,7 @@ int ufs_setattr(struct dentry *dentry, s
 	unsigned int ia_valid = attr->ia_valid;
 	int error;
 
-	error = inode_change_ok(inode, attr);
+	error = setattr_prepare(dentry, attr);
 	if (error)
 		return error;
 
--- a/fs/utimes.c
+++ b/fs/utimes.c
@@ -80,7 +80,7 @@ static int utimes_common(struct path *pa
 			newattrs.ia_valid |= ATTR_MTIME_SET;
 		}
 		/*
-		 * Tell inode_change_ok(), that this is an explicit time
+		 * Tell setattr_prepare(), that this is an explicit time
 		 * update, even if neither ATTR_ATIME_SET nor ATTR_MTIME_SET
 		 * were used.
 		 */
@@ -89,7 +89,7 @@ static int utimes_common(struct path *pa
 		/*
 		 * If times is NULL (or both times are UTIME_NOW),
 		 * then we need to check permissions, because
-		 * inode_change_ok() won't do it.
+		 * setattr_prepare() won't do it.
 		 */
 		error = -EACCES;
                 if (IS_IMMUTABLE(inode))
--- a/fs/xfs/xfs_acl.c
+++ b/fs/xfs/xfs_acl.c
@@ -223,7 +223,7 @@ xfs_set_acl(struct inode *inode, int typ
 }
 
 static int
-xfs_set_mode(struct inode *inode, umode_t mode)
+xfs_set_mode(struct dentry *dentry, struct inode *inode, umode_t mode)
 {
 	int error = 0;
 
@@ -234,7 +234,8 @@ xfs_set_mode(struct inode *inode, umode_
 		iattr.ia_mode = mode;
 		iattr.ia_ctime = current_fs_time(inode->i_sb);
 
-		error = -xfs_setattr_nonsize(XFS_I(inode), &iattr, XFS_ATTR_NOACL);
+		error = -xfs_setattr_nonsize(dentry, XFS_I(inode), &iattr,
+					     XFS_ATTR_NOACL);
 	}
 
 	return error;
@@ -290,7 +291,7 @@ xfs_inherit_acl(struct inode *inode, str
 	if (error > 0)
 		inherit = 1;
 
-	error = xfs_set_mode(inode, mode);
+	error = xfs_set_mode(NULL, inode, mode);
 	if (error)
 		goto out;
 
@@ -394,7 +395,7 @@ xfs_xattr_acl_set(struct dentry *dentry,
 				return error;
 		}
 
-		error = xfs_set_mode(inode, mode);
+		error = xfs_set_mode(dentry, inode, mode);
 		if (error)
 			goto out_release;
 	}
--- a/fs/xfs/xfs_file.c
+++ b/fs/xfs/xfs_file.c
@@ -1026,7 +1026,8 @@ xfs_file_fallocate(
 	if (file->f_flags & O_DSYNC)
 		attr_flags |= XFS_ATTR_SYNC;
 
-	error = -xfs_change_file_space(ip, cmd, &bf, 0, attr_flags);
+	error = -xfs_change_file_space(file->f_dentry, cmd, &bf, 0,
+				       attr_flags);
 	if (error)
 		goto out_unlock;
 
@@ -1036,7 +1037,8 @@ xfs_file_fallocate(
 
 		iattr.ia_valid = ATTR_SIZE;
 		iattr.ia_size = new_size;
-		error = -xfs_setattr_size(ip, &iattr, XFS_ATTR_NOLOCK);
+		error = -xfs_setattr_size(file->f_dentry, &iattr,
+					  XFS_ATTR_NOLOCK);
 	}
 
 out_unlock:
--- a/fs/xfs/xfs_ioctl.c
+++ b/fs/xfs/xfs_ioctl.c
@@ -632,7 +632,8 @@ xfs_ioc_space(
 	if (ioflags & IO_INVIS)
 		attr_flags |= XFS_ATTR_DMI;
 
-	error = xfs_change_file_space(ip, cmd, bf, filp->f_pos, attr_flags);
+	error = xfs_change_file_space(filp->f_dentry, cmd, bf, filp->f_pos,
+				      attr_flags);
 	return -error;
 }
 
--- a/fs/xfs/xfs_iops.c
+++ b/fs/xfs/xfs_iops.c
@@ -531,6 +531,7 @@ xfs_setattr_mode(
 
 int
 xfs_setattr_nonsize(
+	struct dentry		*dentry,
 	struct xfs_inode	*ip,
 	struct iattr		*iattr,
 	int			flags)
@@ -553,9 +554,15 @@ xfs_setattr_nonsize(
 	if (XFS_FORCED_SHUTDOWN(mp))
 		return XFS_ERROR(EIO);
 
-	error = -inode_change_ok(inode, iattr);
-	if (error)
-		return XFS_ERROR(error);
+	/*
+	 * dentry can be NULL only when we're called from xfs_inherit_acl(),
+	 * in which case no permission checks are needed
+	 */
+	if (dentry) {
+		error = -setattr_prepare(dentry, iattr);
+		if (error)
+			return XFS_ERROR(error);
+	}
 
 	ASSERT((mask & ATTR_SIZE) == 0);
 
@@ -755,12 +762,13 @@ out_dqrele:
  */
 int
 xfs_setattr_size(
-	struct xfs_inode	*ip,
+	struct dentry		*dentry,
 	struct iattr		*iattr,
 	int			flags)
 {
+	struct inode		*inode = dentry->d_inode;
+	struct xfs_inode	*ip = XFS_I(inode);
 	struct xfs_mount	*mp = ip->i_mount;
-	struct inode		*inode = VFS_I(ip);
 	int			mask = iattr->ia_valid;
 	struct xfs_trans	*tp;
 	int			error;
@@ -776,7 +784,7 @@ xfs_setattr_size(
 	if (XFS_FORCED_SHUTDOWN(mp))
 		return XFS_ERROR(EIO);
 
-	error = -inode_change_ok(inode, iattr);
+	error = -setattr_prepare(dentry, iattr);
 	if (error)
 		return XFS_ERROR(error);
 
@@ -802,7 +810,7 @@ xfs_setattr_size(
 		 */
 		xfs_iunlock(ip, lock_flags);
 		iattr->ia_valid &= ~ATTR_SIZE;
-		return xfs_setattr_nonsize(ip, iattr, 0);
+		return xfs_setattr_nonsize(dentry, ip, iattr, 0);
 	}
 
 	/*
@@ -950,8 +958,8 @@ xfs_vn_setattr(
 	struct iattr	*iattr)
 {
 	if (iattr->ia_valid & ATTR_SIZE)
-		return -xfs_setattr_size(XFS_I(dentry->d_inode), iattr, 0);
-	return -xfs_setattr_nonsize(XFS_I(dentry->d_inode), iattr, 0);
+		return -xfs_setattr_size(dentry, iattr, 0);
+	return -xfs_setattr_nonsize(dentry, XFS_I(dentry->d_inode), iattr, 0);
 }
 
 #define XFS_FIEMAP_FLAGS	(FIEMAP_FLAG_SYNC|FIEMAP_FLAG_XATTR)
--- a/fs/xfs/xfs_vnodeops.c
+++ b/fs/xfs/xfs_vnodeops.c
@@ -2234,12 +2234,13 @@ xfs_free_file_space(
  */
 int
 xfs_change_file_space(
-	xfs_inode_t	*ip,
+	struct dentry	*dentry,
 	int		cmd,
 	xfs_flock64_t	*bf,
 	xfs_off_t	offset,
 	int		attr_flags)
 {
+	xfs_inode_t	*ip = XFS_I(dentry->d_inode);
 	xfs_mount_t	*mp = ip->i_mount;
 	int		clrprealloc;
 	int		error;
@@ -2329,7 +2330,7 @@ xfs_change_file_space(
 		iattr.ia_valid = ATTR_SIZE;
 		iattr.ia_size = startoffset;
 
-		error = xfs_setattr_size(ip, &iattr, attr_flags);
+		error = xfs_setattr_size(dentry, &iattr, attr_flags);
 
 		if (error)
 			return error;
--- a/fs/xfs/xfs_vnodeops.h
+++ b/fs/xfs/xfs_vnodeops.h
@@ -13,8 +13,9 @@ struct xfs_inode;
 struct xfs_iomap;
 
 
-int xfs_setattr_nonsize(struct xfs_inode *ip, struct iattr *vap, int flags);
-int xfs_setattr_size(struct xfs_inode *ip, struct iattr *vap, int flags);
+int xfs_setattr_nonsize(struct dentry *dentry, struct xfs_inode *ip,
+			struct iattr *vap, int flags);
+int xfs_setattr_size(struct dentry *dentry, struct iattr *vap, int flags);
 #define	XFS_ATTR_DMI		0x01	/* invocation from a DMI function */
 #define	XFS_ATTR_NONBLOCK	0x02	/* return EAGAIN if operation would block */
 #define XFS_ATTR_NOLOCK		0x04	/* Don't grab any conflicting locks */
@@ -37,7 +38,7 @@ int xfs_readdir(struct xfs_inode	*dp, vo
 int xfs_symlink(struct xfs_inode *dp, struct xfs_name *link_name,
 		const char *target_path, mode_t mode, struct xfs_inode **ipp);
 int xfs_set_dmattrs(struct xfs_inode *ip, u_int evmask, u_int16_t state);
-int xfs_change_file_space(struct xfs_inode *ip, int cmd,
+int xfs_change_file_space(struct dentry *dentry, int cmd,
 		xfs_flock64_t *bf, xfs_off_t offset, int attr_flags);
 int xfs_rename(struct xfs_inode *src_dp, struct xfs_name *src_name,
 		struct xfs_inode *src_ip, struct xfs_inode *target_dp,
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2615,7 +2615,7 @@ extern int buffer_migrate_page(struct ad
 #define buffer_migrate_page NULL
 #endif
 
-extern int inode_change_ok(const struct inode *, struct iattr *);
+extern int setattr_prepare(struct dentry *, struct iattr *);
 extern int inode_newsize_ok(const struct inode *, loff_t offset);
 extern void setattr_copy(struct inode *inode, const struct iattr *attr);
 
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -562,7 +562,7 @@ static int shmem_setattr(struct dentry *
 	struct inode *inode = dentry->d_inode;
 	int error;
 
-	error = inode_change_ok(inode, attr);
+	error = setattr_prepare(dentry, attr);
 	if (error)
 		return error;
 

  parent reply	other threads:[~2016-11-14  2:10 UTC|newest]

Thread overview: 159+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-14  0:14 [PATCH 3.2 000/152] 3.2.84-rc1 review Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 086/152] fs/seq_file: fix out-of-bounds read Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 049/152] s390: Define AT_VECTOR_SIZE_ARCH for ARCH_DLINFO Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 040/152] net/irda: fix NULL pointer dereference on memory allocation failure Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 009/152] ext4: check for extents that wrap around Ben Hutchings
2016-11-14 15:29   ` Vegard Nossum
2016-11-14 16:15     ` Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 092/152] IB/ipoib: Fix memory corruption in ipoib cm mode connect flow Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 032/152] brcmsmac: Initialize power in brcms_c_stf_ss_algo_channel_get() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 011/152] ext4: validate s_reserved_gdt_blocks on mount Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 136/152] btrfs: ensure that file descriptor used with subvol ioctls is a dir Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 016/152] x86/quirks: Reintroduce scanning of secondary buses Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 088/152] ALSA: timer: fix NULL pointer dereference on memory allocation failure Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 060/152] drm/edid: Add 6 bpc quirk for display AEO model 0 Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 056/152] block: fix use-after-free in seq file Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 063/152] USB: validate wMaxPacketValue entries in endpoint descriptors Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 029/152] Bluetooth: Fix l2cap_sock_setsockopt() with optname BT_RCVMTU Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 010/152] ext4: don't call ext4_should_journal_data() on the journal inode Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 071/152] usb: xhci: Fix panic if disconnect Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 018/152] svc: Avoid garbage replies when pc_func() returns rpc_drop_reply Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 128/152] IB/ipoib: Don't allow MC joins during light MC flush Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 141/152] Bluetooth: Fix potential NULL dereference in RFCOMM bind callback Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 100/152] alpha: fix copy_from_user() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 052/152] balloon: check the number of available pages in leak balloon Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 031/152] tpm: read burstcount from TPM_STS in one 32-bit transaction Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 143/152] scsi: arcmsr: Buffer overflow in arcmsr_iop_message_xfer() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 118/152] score: fix copy_from_user() and friends Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 149/152] [media] usbvision: revert commit 588afcc1 Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 012/152] drm/radeon: Poll for both connect/disconnect on analog connectors Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 067/152] megaraid_sas: Fix probing cards without io port Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 096/152] ALSA: timer: Code cleanup Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 140/152] mm,ksm: fix endless looping in allocating memory when ksm enable Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 109/152] hexagon: fix strncpy_from_user() error return Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 080/152] usb: gadget: fsl_qe_udc: signedness bug in qe_get_frame() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 144/152] firewire: net: guard against rx buffer overflows Ben Hutchings
2016-11-14 21:09   ` Stefan Richter
2016-11-14  0:14 ` [PATCH 3.2 134/152] ocfs2: fix start offset to ocfs2_zero_range_for_truncate() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 137/152] can: dev: fix deadlock reported after bus-off Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 146/152] fs: Avoid premature clearing of capabilities Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 046/152] avr32: off by one in at32_init_pio() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 089/152] ALSA: timer: fix NULL pointer dereference in read()/ioctl() race Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 150/152] xenbus: don't BUG() on user mode induced condition Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 132/152] xfrm: Fix memory leak of aead algorithm name Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 065/152] x86/mm: Disable preemption during CR3 read+write Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 082/152] USB: avoid left shift by -1 Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 020/152] Bluetooth: Add USB ID 13D3:3487 to ath3k Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 017/152] x86/quirks: Add early quirk to reset Apple AirPort card Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 139/152] ipmr, ip6mr: fix scheduling while atomic and a deadlock with ipmr_get_route Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 054/152] mm/hugetlb: avoid soft lockup in set_max_huge_pages() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 069/152] USB: serial: mos7840: fix non-atomic allocation in write path Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 061/152] aacraid: Check size values after double-fetch from user Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 043/152] ceph: Correctly return NXIO errors from ceph_llseek Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 041/152] l2tp: Correctly return -EBADF from pppol2tp_getname Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 105/152] crypto: skcipher - Fix blkcipher walk OOM crash Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 081/152] USB: fix typo in wMaxPacketSize validation Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 083/152] ubifs: Fix assertion in layout_in_gaps() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 035/152] tty/vt/keyboard: fix OOB access in do_compute_shiftstate() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 135/152] i2c-eg20t: fix race between i2c init and interrupt enable Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 044/152] KEYS: 64-bit MIPS needs to use compat_sys_keyctl for 32-bit userspace Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 007/152] usb: renesas_usbhs: protect the CFIFOSEL setting in usbhsg_ep_enable() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 014/152] ppp: defer netns reference release for ppp channel Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 045/152] drm/radeon: fix firmware info version checks Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 121/152] sparc32: fix copy_from_user() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 048/152] tcp: consider recv buf for the initial window scale Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 036/152] MIPS: RM7000: Double locking bug in rm7k_tc_disable() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 106/152] asm-generic: make get_user() clear the destination on errors Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 039/152] ARM: OMAP3: hwmod data: Add sysc information for DSI Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 001/152] netlabel: add address family checks to netlbl_{sock,req}_delattr() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 068/152] USB: serial: mos7720: fix non-atomic allocation in write path Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 013/152] ALSA: ctl: Stop notification after disconnection Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 057/152] USB: serial: option: add D-Link DWM-156/A3 Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 122/152] blackfin: fix copy_from_user() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 099/152] xfrm_user: propagate sec ctx allocation errors Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 037/152] nfs: don't create zero-length requests Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 152/152] ext3: NULL dereference in ext3_evict_inode() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 147/152] Btrfs: skip adding an acl attribute if we don't have to Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 027/152] mtd: pmcmsp-flash: Allocating too much in init_msp_flash() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 066/152] arm: oabi compat: add missing access checks Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 074/152] drm/radeon: fix radeon_move_blit on 32bit systems Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 107/152] cris: buggered copy_from_user/copy_to_user/clear_user Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 098/152] ALSA: rawmidi: Fix possible deadlock with virmidi registration Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 079/152] drm: Reject page_flip for !DRIVER_MODESET Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 006/152] usb: renesas_usbhs: fix NULL pointer dereference in xfer_work() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 028/152] USB: serial: option: add support for Telit LE910 PID 0x1206 Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 023/152] KVM: nVMX: fix lifetime issues for vmcs02 Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 021/152] Bluetooth: Add support of 13d3:3490 AR3012 device Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 087/152] ALSA: timer: fix division by zero after SNDRV_TIMER_IOCTL_CONTINUE Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 062/152] netfilter: nfnetlink_queue: reject verdict request from different portid Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 084/152] x86/apic: Do not init irq remapping if ioapic is disabled Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 005/152] serial: samsung: Fix possible out of bounds access on non-DT platform Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 055/152] hostfs: Freeing an ERR_PTR in hostfs_fill_sb_common() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 125/152] microblaze: fix __get_user() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 042/152] Input: i8042 - break load dependency between atkbd/psmouse and i8042 Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 112/152] mn10300: copy_from_user() should zero on access_ok() failure Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 030/152] crypto: scatterwalk - Fix test in scatterwalk_done Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 090/152] x86/paravirt: Do not trace _paravirt_ident_*() functions Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 142/152] KEYS: Fix short sprintf buffer in /proc/keys show function Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 091/152] IB/core: Fix use after free in send_leave function Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 102/152] mtd: nand: davinci: Reinitialize the HW ECC engine in 4bit hwctl Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 148/152] posix_acl: Clear SGID bit when setting file permissions Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 026/152] ext4: short-cut orphan cleanup on error Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 120/152] sh: fix copy_from_user() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 124/152] microblaze: " Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 015/152] x86/quirks: Apply nvidia_bugs quirk only on root bus Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 133/152] ocfs2/dlm: fix race between convert and migration Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 059/152] USB: serial: ftdi_sio: add device ID for WICED USB UART dev board Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 110/152] ia64: copy_from_user() should zero the destination on access_ok() failure Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 019/152] NFS: Don't drop CB requests with invalid principals Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 116/152] s390: get_user() should zero on failure Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 113/152] openrisc: fix copy_from_user() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 127/152] USB: change bInterval default to 10 ms Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 004/152] crypto: gcm - Filter out async ghash if necessary Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 126/152] avr32: fix copy_from_user() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 002/152] powerpc/numa: Fix multiple bugs in memory_hotplug_max() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 034/152] hwmon: (adt7411) set bit 3 in CFG1 register Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 131/152] openrisc: fix the fix of copy_from_user() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 094/152] sched/core: Fix a race between try_to_wake_up() and a woken up task Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 077/152] USB: serial: option: add WeTelecom WM-D200 Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 103/152] NFSv4.1: Fix the CREATE_SESSION slot number accounting Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 070/152] cdc-acm: fix wrong pipe type on rx interrupt xfers Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 111/152] mn10300: failing __get_user() and get_user() should zero Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 114/152] parisc: fix copy_from_user() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 095/152] crypto: cryptd - initialize child shash_desc on import Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 085/152] USB: serial: option: add WeTelecom 0x6802 and 0x6803 products Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 008/152] Input: xpad - validate USB endpoint count during probe Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 024/152] KVM: nVMX: Fix memory corruption when using VMCS shadowing Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 078/152] iio: accel: kxsd9: Fix raw read return Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 117/152] score: fix __get_user/get_user Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 115/152] ppc32: fix copy_from_user() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 003/152] sched/cputime: Fix prev steal time accouting during CPU hotplug Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 038/152] pps: do not crash when failed to register Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 097/152] ALSA: timer: Fix zero-division by continue of uninitialized instance Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 072/152] xhci: don't dereference a xhci member after removing xhci Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 051/152] x86/syscalls/64: Add compat_sys_keyctl for 32-bit userspace Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 123/152] m32r: fix __get_user() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 129/152] irda: Free skb on irda_accept error path Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 151/152] xenbus: don't look up transaction IDs for ordinary writes Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 130/152] avr32: fix 'undefined reference to `___copy_from_user' Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 076/152] parisc: Fix order of EREFUSED define in errno.h Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 073/152] tcp: fix use after free in tcp_xmit_retransmit_queue() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 119/152] sh64: failing __get_user() should zero Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 138/152] tracing: Move mutex to protect against resetting of seq data Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 025/152] ext4: fix reference counting bug on block allocation error Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 033/152] mtd: nand: fix bug writing 1 byte less than page size Ben Hutchings
2016-11-14  0:14 ` Ben Hutchings [this message]
2016-11-14  0:14 ` [PATCH 3.2 058/152] USB: serial: ftdi_sio: add PIDs for Ivium Technologies devices Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 064/152] s390/dasd: fix hanging device after clear subchannel Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 101/152] asm-generic: make copy_from_user() zero the destination properly Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 050/152] ext4: validate that metadata blocks do not overlap superblock Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 053/152] dm flakey: error READ bios during the down_interval Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 104/152] ARM: sa1111: fix pcmcia suspend/resume Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 047/152] ubi: Fix race condition between ubi device creation and udev Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 108/152] frv: fix clear_user() Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 022/152] net: ethoc: Fix early error paths Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 075/152] Input: i8042 - set up shared ps2_cmd_mutex for AUX ports Ben Hutchings
2016-11-14  0:14 ` [PATCH 3.2 093/152] iio: accel: kxsd9: Fix scaling bug Ben Hutchings
2016-11-14  4:05 ` [PATCH 3.2 000/152] 3.2.84-rc1 review Ben Hutchings
2016-11-14  5:47 ` Guenter Roeck
2016-11-14 17:10   ` 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.1479082447.807543443@decadent.org.uk \
    --to=ben@decadent.org.uk \
    --cc=akpm@linux-foundation.org \
    --cc=hch@lst.de \
    --cc=jack@suse.cz \
    --cc=linux-kernel@vger.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

all inboxes | Powered by JetHome®