From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Christoph Hellwig <hch@lst.de>,
Jeff Layton <jlayton@redhat.com>, Jan Kara <jack@suse.cz>,
Andreas Gruenbacher <agruenba@redhat.com>,
Amit Pundir <amit.pundir@linaro.org>
Subject: [PATCH 3.18 40/68] posix_acl: Clear SGID bit when setting file permissions
Date: Fri, 5 May 2017 11:32:25 -0700 [thread overview]
Message-ID: <20170505183214.203876276@linuxfoundation.org> (raw)
In-Reply-To: <20170505183212.587141964@linuxfoundation.org>
3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kara <jack@suse.cz>
commit 073931017b49d9458aa351605b43a7e34598caef upstream.
When file permissions are modified via chmod(2) and the user is not in
the owning group or capable of CAP_FSETID, the setgid bit is cleared in
inode_change_ok(). Setting a POSIX ACL via setxattr(2) sets the file
permissions as well as the new ACL, but doesn't clear the setgid bit in
a similar way; this allows to bypass the check in chmod(2). Fix that.
References: CVE-2016-7097
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/9p/acl.c | 40 +++++++++++++++++-----------------------
fs/btrfs/acl.c | 6 ++----
fs/ceph/acl.c | 6 ++----
fs/ext2/acl.c | 12 ++++--------
fs/ext4/acl.c | 12 ++++--------
fs/f2fs/acl.c | 6 ++----
fs/gfs2/acl.c | 12 +++---------
fs/hfsplus/posix_acl.c | 4 ++--
fs/jffs2/acl.c | 9 ++++-----
fs/jfs/acl.c | 6 ++----
fs/ocfs2/acl.c | 20 ++++++++------------
fs/posix_acl.c | 31 +++++++++++++++++++++++++++++++
fs/reiserfs/xattr_acl.c | 8 ++------
fs/xfs/xfs_acl.c | 13 ++++---------
include/linux/posix_acl.h | 1 +
15 files changed, 88 insertions(+), 98 deletions(-)
--- a/fs/9p/acl.c
+++ b/fs/9p/acl.c
@@ -320,32 +320,26 @@ static int v9fs_xattr_set_acl(struct den
case ACL_TYPE_ACCESS:
name = POSIX_ACL_XATTR_ACCESS;
if (acl) {
- umode_t mode = inode->i_mode;
- retval = posix_acl_equiv_mode(acl, &mode);
- if (retval < 0)
+ struct iattr iattr;
+
+ retval = posix_acl_update_mode(inode, &iattr.ia_mode, &acl);
+ if (retval)
goto err_out;
- else {
- struct iattr iattr;
- if (retval == 0) {
- /*
- * ACL can be represented
- * by the mode bits. So don't
- * update ACL.
- */
- acl = NULL;
- value = NULL;
- size = 0;
- }
- /* Updte the mode bits */
- iattr.ia_mode = ((mode & S_IALLUGO) |
- (inode->i_mode & ~S_IALLUGO));
- iattr.ia_valid = ATTR_MODE;
- /* FIXME should we update ctime ?
- * What is the following setxattr update the
- * mode ?
+ if (!acl) {
+ /*
+ * ACL can be represented
+ * by the mode bits. So don't
+ * update ACL.
*/
- v9fs_vfs_setattr_dotl(dentry, &iattr);
+ value = NULL;
+ size = 0;
}
+ iattr.ia_valid = ATTR_MODE;
+ /* FIXME should we update ctime ?
+ * What is the following setxattr update the
+ * mode ?
+ */
+ v9fs_vfs_setattr_dotl(dentry, &iattr);
}
break;
case ACL_TYPE_DEFAULT:
--- a/fs/btrfs/acl.c
+++ b/fs/btrfs/acl.c
@@ -83,11 +83,9 @@ static int __btrfs_set_acl(struct btrfs_
case ACL_TYPE_ACCESS:
name = POSIX_ACL_XATTR_ACCESS;
if (acl) {
- ret = posix_acl_equiv_mode(acl, &inode->i_mode);
- if (ret < 0)
+ ret = posix_acl_update_mode(inode, &inode->i_mode, &acl);
+ if (ret)
return ret;
- if (ret == 0)
- acl = NULL;
}
ret = 0;
break;
--- a/fs/ceph/acl.c
+++ b/fs/ceph/acl.c
@@ -108,11 +108,9 @@ int ceph_set_acl(struct inode *inode, st
case ACL_TYPE_ACCESS:
name = POSIX_ACL_XATTR_ACCESS;
if (acl) {
- ret = posix_acl_equiv_mode(acl, &new_mode);
- if (ret < 0)
+ ret = posix_acl_update_mode(inode, &new_mode, &acl);
+ if (ret)
goto out;
- if (ret == 0)
- acl = NULL;
}
break;
case ACL_TYPE_DEFAULT:
--- a/fs/ext2/acl.c
+++ b/fs/ext2/acl.c
@@ -193,15 +193,11 @@ ext2_set_acl(struct inode *inode, struct
case ACL_TYPE_ACCESS:
name_index = EXT2_XATTR_INDEX_POSIX_ACL_ACCESS;
if (acl) {
- error = posix_acl_equiv_mode(acl, &inode->i_mode);
- if (error < 0)
+ error = posix_acl_update_mode(inode, &inode->i_mode, &acl);
+ if (error)
return error;
- else {
- inode->i_ctime = CURRENT_TIME_SEC;
- mark_inode_dirty(inode);
- if (error == 0)
- acl = NULL;
- }
+ inode->i_ctime = CURRENT_TIME_SEC;
+ mark_inode_dirty(inode);
}
break;
--- a/fs/ext4/acl.c
+++ b/fs/ext4/acl.c
@@ -201,15 +201,11 @@ __ext4_set_acl(handle_t *handle, struct
case ACL_TYPE_ACCESS:
name_index = EXT4_XATTR_INDEX_POSIX_ACL_ACCESS;
if (acl) {
- error = posix_acl_equiv_mode(acl, &inode->i_mode);
- if (error < 0)
+ error = posix_acl_update_mode(inode, &inode->i_mode, &acl);
+ if (error)
return error;
- else {
- inode->i_ctime = ext4_current_time(inode);
- ext4_mark_inode_dirty(handle, inode);
- if (error == 0)
- acl = NULL;
- }
+ inode->i_ctime = ext4_current_time(inode);
+ ext4_mark_inode_dirty(handle, inode);
}
break;
--- a/fs/f2fs/acl.c
+++ b/fs/f2fs/acl.c
@@ -207,12 +207,10 @@ static int __f2fs_set_acl(struct inode *
case ACL_TYPE_ACCESS:
name_index = F2FS_XATTR_INDEX_POSIX_ACL_ACCESS;
if (acl) {
- error = posix_acl_equiv_mode(acl, &inode->i_mode);
- if (error < 0)
+ error = posix_acl_update_mode(inode, &inode->i_mode, &acl);
+ if (error)
return error;
set_acl_inode(fi, inode->i_mode);
- if (error == 0)
- acl = NULL;
}
break;
--- a/fs/gfs2/acl.c
+++ b/fs/gfs2/acl.c
@@ -79,17 +79,11 @@ int gfs2_set_acl(struct inode *inode, st
if (type == ACL_TYPE_ACCESS) {
umode_t mode = inode->i_mode;
- error = posix_acl_equiv_mode(acl, &mode);
- if (error < 0)
+ error = posix_acl_update_mode(inode, &inode->i_mode, &acl);
+ if (error)
return error;
-
- if (error == 0)
- acl = NULL;
-
- if (mode != inode->i_mode) {
- inode->i_mode = mode;
+ if (mode != inode->i_mode)
mark_inode_dirty(inode);
- }
}
if (acl) {
--- a/fs/hfsplus/posix_acl.c
+++ b/fs/hfsplus/posix_acl.c
@@ -68,8 +68,8 @@ int hfsplus_set_posix_acl(struct inode *
case ACL_TYPE_ACCESS:
xattr_name = POSIX_ACL_XATTR_ACCESS;
if (acl) {
- err = posix_acl_equiv_mode(acl, &inode->i_mode);
- if (err < 0)
+ err = posix_acl_update_mode(inode, &inode->i_mode, &acl);
+ if (err)
return err;
}
err = 0;
--- a/fs/jffs2/acl.c
+++ b/fs/jffs2/acl.c
@@ -235,9 +235,10 @@ int jffs2_set_acl(struct inode *inode, s
case ACL_TYPE_ACCESS:
xprefix = JFFS2_XPREFIX_ACL_ACCESS;
if (acl) {
- umode_t mode = inode->i_mode;
- rc = posix_acl_equiv_mode(acl, &mode);
- if (rc < 0)
+ umode_t mode;
+
+ rc = posix_acl_update_mode(inode, &mode, &acl);
+ if (rc)
return rc;
if (inode->i_mode != mode) {
struct iattr attr;
@@ -249,8 +250,6 @@ int jffs2_set_acl(struct inode *inode, s
if (rc < 0)
return rc;
}
- if (rc == 0)
- acl = NULL;
}
break;
case ACL_TYPE_DEFAULT:
--- a/fs/jfs/acl.c
+++ b/fs/jfs/acl.c
@@ -84,13 +84,11 @@ static int __jfs_set_acl(tid_t tid, stru
case ACL_TYPE_ACCESS:
ea_name = POSIX_ACL_XATTR_ACCESS;
if (acl) {
- rc = posix_acl_equiv_mode(acl, &inode->i_mode);
- if (rc < 0)
+ rc = posix_acl_update_mode(inode, &inode->i_mode, &acl);
+ if (rc)
return rc;
inode->i_ctime = CURRENT_TIME;
mark_inode_dirty(inode);
- if (rc == 0)
- acl = NULL;
}
break;
case ACL_TYPE_DEFAULT:
--- a/fs/ocfs2/acl.c
+++ b/fs/ocfs2/acl.c
@@ -241,20 +241,16 @@ int ocfs2_set_acl(handle_t *handle,
case ACL_TYPE_ACCESS:
name_index = OCFS2_XATTR_INDEX_POSIX_ACL_ACCESS;
if (acl) {
- umode_t mode = inode->i_mode;
- ret = posix_acl_equiv_mode(acl, &mode);
- if (ret < 0)
- return ret;
- else {
- if (ret == 0)
- acl = NULL;
+ umode_t mode;
- ret = ocfs2_acl_set_mode(inode, di_bh,
- handle, mode);
- if (ret)
- return ret;
+ ret = posix_acl_update_mode(inode, &mode, &acl);
+ if (ret)
+ return ret;
- }
+ ret = ocfs2_acl_set_mode(inode, di_bh,
+ handle, mode);
+ if (ret)
+ return ret;
}
break;
case ACL_TYPE_DEFAULT:
--- a/fs/posix_acl.c
+++ b/fs/posix_acl.c
@@ -594,6 +594,37 @@ no_acl:
}
EXPORT_SYMBOL_GPL(posix_acl_create);
+/**
+ * posix_acl_update_mode - update mode in set_acl
+ *
+ * Update the file mode when setting an ACL: compute the new file permission
+ * bits based on the ACL. In addition, if the ACL is equivalent to the new
+ * file mode, set *acl to NULL to indicate that no ACL should be set.
+ *
+ * As with chmod, clear the setgit bit if the caller is not in the owning group
+ * or capable of CAP_FSETID (see inode_change_ok).
+ *
+ * Called from set_acl inode operations.
+ */
+int posix_acl_update_mode(struct inode *inode, umode_t *mode_p,
+ struct posix_acl **acl)
+{
+ umode_t mode = inode->i_mode;
+ int error;
+
+ error = posix_acl_equiv_mode(*acl, &mode);
+ if (error < 0)
+ return error;
+ if (error == 0)
+ *acl = NULL;
+ if (!in_group_p(inode->i_gid) &&
+ !capable_wrt_inode_uidgid(inode, CAP_FSETID))
+ mode &= ~S_ISGID;
+ *mode_p = mode;
+ return 0;
+}
+EXPORT_SYMBOL(posix_acl_update_mode);
+
/*
* Fix up the uids and gids in posix acl extended attributes in place.
*/
--- a/fs/reiserfs/xattr_acl.c
+++ b/fs/reiserfs/xattr_acl.c
@@ -246,13 +246,9 @@ __reiserfs_set_acl(struct reiserfs_trans
case ACL_TYPE_ACCESS:
name = POSIX_ACL_XATTR_ACCESS;
if (acl) {
- error = posix_acl_equiv_mode(acl, &inode->i_mode);
- if (error < 0)
+ error = posix_acl_update_mode(inode, &inode->i_mode, &acl);
+ if (error)
return error;
- else {
- if (error == 0)
- acl = NULL;
- }
}
break;
case ACL_TYPE_DEFAULT:
--- a/fs/xfs/xfs_acl.c
+++ b/fs/xfs/xfs_acl.c
@@ -286,16 +286,11 @@ xfs_set_acl(struct inode *inode, struct
return error;
if (type == ACL_TYPE_ACCESS) {
- umode_t mode = inode->i_mode;
- error = posix_acl_equiv_mode(acl, &mode);
-
- if (error <= 0) {
- acl = NULL;
-
- if (error < 0)
- return error;
- }
+ umode_t mode;
+ error = posix_acl_update_mode(inode, &mode, &acl);
+ if (error)
+ return error;
error = xfs_set_mode(inode, mode);
if (error)
return error;
--- a/include/linux/posix_acl.h
+++ b/include/linux/posix_acl.h
@@ -95,6 +95,7 @@ extern int set_posix_acl(struct inode *,
extern int posix_acl_chmod(struct inode *, umode_t);
extern int posix_acl_create(struct inode *, umode_t *, struct posix_acl **,
struct posix_acl **);
+extern int posix_acl_update_mode(struct inode *, umode_t *, struct posix_acl **);
extern int simple_set_acl(struct inode *, struct posix_acl *, int);
extern int simple_acl_create(struct inode *, struct inode *);
next prev parent reply other threads:[~2017-05-05 18:48 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-05 18:31 [PATCH 3.18 00/68] 3.18.52-stable review Greg Kroah-Hartman
2017-05-05 18:31 ` [PATCH 3.18 01/68] f2fs: do more integrity verification for superblock Greg Kroah-Hartman
2017-05-05 18:31 ` [PATCH 3.18 02/68] [media] xc2028: unlock on error in xc2028_set_config() Greg Kroah-Hartman
2017-05-05 18:31 ` [PATCH 3.18 03/68] ext4: check if in-inode xattr is corrupted in ext4_expand_extra_isize_ea() Greg Kroah-Hartman
2017-05-05 18:31 ` [PATCH 3.18 04/68] md:raid1: fix a dead loop when read from a WriteMostly disk Greg Kroah-Hartman
2017-05-05 18:31 ` [PATCH 3.18 05/68] MIPS: Fix crash registers on non-crashing CPUs Greg Kroah-Hartman
2017-05-05 18:31 ` [PATCH 3.18 06/68] RDS: Fix the atomicity for congestion map update Greg Kroah-Hartman
2017-05-05 18:31 ` [PATCH 3.18 07/68] usb: gadget: f_midi: Fixed a bug when buflen was smaller than wMaxPacketSize Greg Kroah-Hartman
2017-05-05 18:31 ` [PATCH 3.18 08/68] xen/x86: dont lose event interrupts Greg Kroah-Hartman
2017-05-05 18:31 ` [PATCH 3.18 09/68] sparc64: kern_addr_valid regression Greg Kroah-Hartman
2017-05-05 18:31 ` [PATCH 3.18 10/68] sparc64: Fix kernel panic due to erroneous #ifdef surrounding pmd_write() Greg Kroah-Hartman
2017-05-05 18:31 ` [PATCH 3.18 11/68] net: neigh: guard against NULL solicit() method Greg Kroah-Hartman
2017-05-05 18:31 ` [PATCH 3.18 12/68] net: phy: handle state correctly in phy_stop_machine Greg Kroah-Hartman
2017-05-05 18:31 ` [PATCH 3.18 13/68] l2tp: purge socket queues in the .destruct() callback Greg Kroah-Hartman
2017-05-05 18:31 ` [PATCH 3.18 14/68] net/packet: fix overflow in check for tp_frame_nr Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 15/68] net/packet: fix overflow in check for tp_reserve Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 16/68] net: ipv4: fix multipath RTM_GETROUTE behavior when iif is given Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 17/68] sctp: listen on the sock only when its state is listening or closed Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 18/68] netpoll: Check for skb->queue_mapping Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 19/68] ip6mr: fix notification device destruction Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 20/68] ALSA: seq: Dont break snd_use_lock_sync() loop by timeout Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 21/68] MIPS: KGDB: Use kernel context for sleeping threads Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 22/68] p9_client_readdir() fix Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 25/68] ftrace/x86: Fix triple fault with graph tracing and suspend-to-ram Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 26/68] powerpc/ptrace: Fix out of bounds array access warning Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 27/68] drbd: avoid redefinition of BITS_PER_PAGE Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 28/68] IB/iser: Fix sparse warnings Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 29/68] mtd: avoid stack overflow in MTD CFI code Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 30/68] mlx5: avoid build warnings on 32-bit Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 31/68] PCI: xilinx: Fix harmless format string warning Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 32/68] ALSA: ppc/awacs: shut up maybe-uninitialized warning Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 33/68] cred/userns: define current_user_ns() as a function Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 34/68] net: tg3: avoid uninitialized variable warning Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 35/68] timerfd: Protect the might cancel mechanism proper Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 36/68] Handle mismatched open calls Greg Kroah-Hartman
2017-07-14 16:42 ` Ben Hutchings
2017-07-19 18:39 ` Pavel Shilovskiy
2017-07-22 12:46 ` Greg Kroah-Hartman
2017-11-15 9:08 ` Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 37/68] ALSA: pcm : Call kill_fasync() in stream lock Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 38/68] regulator: core: Fix regualtor_ena_gpio_free not to access pin after freeing Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 39/68] perf: Tighten (and fix) the grouping condition Greg Kroah-Hartman
2017-05-05 18:32 ` Greg Kroah-Hartman [this message]
2017-05-05 18:32 ` [PATCH 3.18 41/68] l2tp: fix racy SOCK_ZAPPED flag check in l2tp_ip{,6}_bind() Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 42/68] net: avoid signed overflows for SO_{SND|RCV}BUFFORCE Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 43/68] mm: avoid setting up anonymous pages into file mapping Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 44/68] ARM: cns3xxx: shut up frame size warning Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 45/68] arm64: Provide a namespace to NCAPS Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 46/68] staging: vt6655: fix overly large stack usage Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 47/68] staging: imx-drm: fix indentation warning Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 48/68] staging: bcm: add 32-bit host dependency Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 49/68] IB/qib: rename BITS_PER_PAGE to RVT_BITS_PER_PAGE Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 50/68] IB/ehca: fix maybe-uninitialized warnings Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 51/68] tty/isicom: fix big-endian compile warning Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 52/68] infiniband: mlx5: avoid a compile-time warning Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 53/68] ips: remove pointless #warning Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 54/68] mISDN: avoid arch specific __builtin_return_address call Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 55/68] arm64: build vdso without libgcov Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 56/68] mm/cma: silence warnings due to max() usage Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 57/68] MIPS: jz4740: fix build error in irq.h Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 58/68] MIPS: elf2ecoff: Ignore PT_MIPS_ABIFLAGS program headers Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 60/68] staging: unisys: correctly handle return value from queue_delayed_work() Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 61/68] message: i2o: fix 64bit build warnings Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 62/68] scsi: advansys: remove #warning message Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 63/68] modpost: expand pattern matching to support substring matches Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 64/68] modpost: dont emit section mismatch warnings for compiler optimizations Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 65/68] cpumask_set_cpu_local_first => cpumask_local_spread, lament Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 66/68] e1000e: fix call to do_div() to use u64 arg Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 67/68] gfs2: remove IS_ERR_VALUE abuse Greg Kroah-Hartman
2017-05-05 18:32 ` [PATCH 3.18 68/68] kbuild: mergeconfig: fix "jobserver unavailable" warning Greg Kroah-Hartman
2017-05-06 1:58 ` [PATCH 3.18 00/68] 3.18.52-stable review Shuah Khan
2017-05-07 19:35 ` Guenter Roeck
[not found] ` <590d0d30.01b9370a.e3d65.b17a@mx.google.com>
[not found] ` <m2tw4vdxnk.fsf@baylibre.com>
2017-05-09 7:47 ` Alexandre Belloni
2017-05-31 19:47 ` Alexandre Belloni
2017-06-06 20:52 ` Kevin Hilman
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=20170505183214.203876276@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=agruenba@redhat.com \
--cc=amit.pundir@linaro.org \
--cc=hch@lst.de \
--cc=jack@suse.cz \
--cc=jlayton@redhat.com \
--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;
as well as URLs for NNTP newsgroup(s).