From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark Salyzyn Subject: [PATCH v13 2/5] Add flags option to get xattr method paired to __vfs_getxattr Date: Wed, 31 Jul 2019 09:57:57 -0700 Message-ID: <20190731165803.4755-3-salyzyn@android.com> References: <20190731165803.4755-1-salyzyn@android.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Return-path: In-Reply-To: <20190731165803.4755-1-salyzyn@android.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: cluster-devel-bounces@redhat.com Errors-To: cluster-devel-bounces@redhat.com To: linux-kernel@vger.kernel.org Cc: Latchesar Ionkov , Dave Kleikamp , jfs-discussion@lists.sourceforge.net, Randy Dunlap , linux-doc@vger.kernel.org, Martin Brandenburg , samba-technical@lists.samba.org, Dominique Martinet , Amir Goldstein , Mimi Zohar , James Morris , David Howells , Chris Mason , "David S . Miller" , Andreas Dilger , ocfs2-devel@oss.oracle.com, Eric Paris , netdev@vger.kernel.org, Tyler Hicks , linux-afs@lists.infradead.org, Mike Marshall , linux-xfs@vger.kernel.org, Sage Weil , Jonathan Corbet , Richard Weinberger , Mark List-Id: ceph-devel.vger.kernel.org Add a flag option to get xattr method that could have a bit flag of XATTR_NOSECURITY passed to it. XATTR_NOSECURITY is generally then set in the __vfs_getxattr path. This handles the case of a union filesystem driver that is being requested by the security layer to report back the data that is the target label or context embedded into wrapped filesystem's xattr. For the use case where access is to be blocked by the security layer. The path then could be security(dentry) -> __vfs_getxattr(dentry...XATTR_NOSECUIRTY) -> handler->get(dentry...XATTR_NOSECURITY) -> __vfs_getxattr(lower_dentry...XATTR_NOSECUIRTY) -> lower_handler->get(lower_dentry...XATTR_NOSECUIRTY) which would report back through the chain data and success as expected, but the logging security layer at the top would have the data to determine the access permissions and report back the target context that was blocked. Without the get handler flag, the path on a union filesystem would be the errant security(dentry) -> __vfs_getxattr(dentry) -> handler->get(dentry) -> vfs_getxattr(lower_dentry) -> nested -> security(lower_dentry, log off) -> lower_handler->get(lower_dentry) which would report back through the chain no data, and -EACCES. For selinux for both cases, this would translate to a correctly determined blocked access. In the first corrected case a correct avc log would be reported, in the second legacy case an incorrect avc log would be reported against an uninitialized u:object_r:unlabeled:s0 context making the logs cosmetically useless for audit2allow. This patch series is inert and is the wide-spread addition of the flags option for xattr functions, and a replacement of _vfs_getxattr with __vfs_getxattr(...XATTR_NOSECURITY). Signed-off-by: Mark Salyzyn Cc: Miklos Szeredi Cc: Jonathan Corbet Cc: Vivek Goyal Cc: Eric W. Biederman Cc: Amir Goldstein Cc: Randy Dunlap Cc: Stephen Smalley Cc: linux-unionfs@vger.kernel.org Cc: linux-doc@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: kernel-team@android.com Cc: Eric Van Hensbergen Cc: Latchesar Ionkov Cc: Dominique Martinet Cc: David Howells Cc: Chris Mason Cc: Josef Bacik Cc: David Sterba Cc: Jeff Layton Cc: Sage Weil Cc: Ilya Dryomov Cc: Steve French Cc: Tyler Hicks Cc: Jan Kara Cc: Theodore Ts'o Cc: Andreas Dilger Cc: Jaegeuk Kim Cc: Chao Yu Cc: Bob Peterson Cc: Andreas Gruenbacher Cc: David Woodhouse Cc: Richard Weinberger Cc: Dave Kleikamp Cc: Greg Kroah-Hartman Cc: Tejun Heo Cc: Trond Myklebust Cc: Anna Schumaker Cc: Mark Fasheh Cc: Joel Becker Cc: Joseph Qi Cc: Mike Marshall Cc: Martin Brandenburg Cc: Alexander Viro Cc: Phillip Lougher Cc: Darrick J. Wong Cc: linux-xfs@vger.kernel.org Cc: Hugh Dickins Cc: David S. Miller Cc: Andrew Morton Cc: Mathieu Malaterre Cc: Ernesto A. Fernández Cc: Vyacheslav Dubeyko Cc: v9fs-developer@lists.sourceforge.net Cc: linux-afs@lists.infradead.org Cc: linux-btrfs@vger.kernel.org Cc: ceph-devel@vger.kernel.org Cc: linux-cifs@vger.kernel.org Cc: samba-technical@lists.samba.org Cc: ecryptfs@vger.kernel.org Cc: linux-ext4@vger.kernel.org Cc: linux-f2fs-devel@lists.sourceforge.net Cc: linux-fsdevel@vger.kernel.org Cc: cluster-devel@redhat.com Cc: linux-mtd@lists.infradead.org Cc: jfs-discussion@lists.sourceforge.net Cc: linux-nfs@vger.kernel.org Cc: ocfs2-devel@oss.oracle.com Cc: devel@lists.orangefs.org Cc: reiserfs-devel@vger.kernel.org Cc: linux-mm@kvack.org Cc: netdev@vger.kernel.org Cc: linux-security-module@vger.kernel.org Cc: stable@vger.kernel.org # 4.4, 4.9, 4.14 & 4.19 --- v13 - added flags to __vfs_getxattr call, and moved all the security code from vfs_getxattr into it. v12 - Added back to patch series as get xattr with flag option. v11 - Squashed out of patch series and replaced with per-thread flag solution. v10 - Added to patch series as __get xattr method. --- fs/9p/acl.c | 3 ++- fs/9p/xattr.c | 3 ++- fs/afs/xattr.c | 6 +++--- fs/btrfs/xattr.c | 3 ++- fs/ceph/xattr.c | 3 ++- fs/cifs/xattr.c | 2 +- fs/ecryptfs/inode.c | 6 ++++-- fs/ecryptfs/mmap.c | 2 +- fs/ext2/xattr_trusted.c | 2 +- fs/ext2/xattr_user.c | 2 +- fs/ext4/xattr_security.c | 2 +- fs/ext4/xattr_trusted.c | 2 +- fs/ext4/xattr_user.c | 2 +- fs/f2fs/xattr.c | 4 ++-- fs/fuse/xattr.c | 4 ++-- fs/gfs2/xattr.c | 3 ++- fs/hfs/attr.c | 2 +- fs/hfsplus/xattr.c | 3 ++- fs/hfsplus/xattr_trusted.c | 3 ++- fs/hfsplus/xattr_user.c | 3 ++- fs/jffs2/security.c | 3 ++- fs/jffs2/xattr_trusted.c | 3 ++- fs/jffs2/xattr_user.c | 3 ++- fs/jfs/xattr.c | 5 +++-- fs/kernfs/inode.c | 3 ++- fs/nfs/nfs4proc.c | 6 ++++-- fs/ocfs2/xattr.c | 9 +++++--- fs/orangefs/xattr.c | 3 ++- fs/overlayfs/super.c | 8 ++++--- fs/posix_acl.c | 2 +- fs/reiserfs/xattr_security.c | 3 ++- fs/reiserfs/xattr_trusted.c | 3 ++- fs/reiserfs/xattr_user.c | 3 ++- fs/squashfs/xattr.c | 2 +- fs/xattr.c | 36 +++++++++++++++---------------- fs/xfs/xfs_xattr.c | 3 ++- include/linux/xattr.h | 9 ++++---- include/uapi/linux/xattr.h | 5 +++-- mm/shmem.c | 3 ++- net/socket.c | 3 ++- security/commoncap.c | 6 ++++-- security/integrity/evm/evm_main.c | 3 ++- security/selinux/hooks.c | 11 ++++++---- security/smack/smack_lsm.c | 5 +++-- 44 files changed, 119 insertions(+), 81 deletions(-) diff --git a/fs/9p/acl.c b/fs/9p/acl.c index 6261719f6f2a..cb14e8b312bc 100644 --- a/fs/9p/acl.c +++ b/fs/9p/acl.c @@ -214,7 +214,8 @@ int v9fs_acl_mode(struct inode *dir, umode_t *modep, static int v9fs_xattr_get_acl(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { struct v9fs_session_info *v9ses; struct posix_acl *acl; diff --git a/fs/9p/xattr.c b/fs/9p/xattr.c index ac8ff8ca4c11..5cfa772452fd 100644 --- a/fs/9p/xattr.c +++ b/fs/9p/xattr.c @@ -139,7 +139,8 @@ ssize_t v9fs_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size) static int v9fs_xattr_handler_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { const char *full_name = xattr_full_name(handler, name); diff --git a/fs/afs/xattr.c b/fs/afs/xattr.c index 5552d034090a..e6509c21f08a 100644 --- a/fs/afs/xattr.c +++ b/fs/afs/xattr.c @@ -334,7 +334,7 @@ static const struct xattr_handler afs_xattr_yfs_handler = { static int afs_xattr_get_cell(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, - void *buffer, size_t size) + void *buffer, size_t size, int flags) { struct afs_vnode *vnode = AFS_FS_I(inode); struct afs_cell *cell = vnode->volume->cell; @@ -361,7 +361,7 @@ static const struct xattr_handler afs_xattr_afs_cell_handler = { static int afs_xattr_get_fid(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, - void *buffer, size_t size) + void *buffer, size_t size, int flags) { struct afs_vnode *vnode = AFS_FS_I(inode); char text[16 + 1 + 24 + 1 + 8 + 1]; @@ -397,7 +397,7 @@ static const struct xattr_handler afs_xattr_afs_fid_handler = { static int afs_xattr_get_volume(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, - void *buffer, size_t size) + void *buffer, size_t size, int flags) { struct afs_vnode *vnode = AFS_FS_I(inode); const char *volname = vnode->volume->name; diff --git a/fs/btrfs/xattr.c b/fs/btrfs/xattr.c index 95d9aebff2c4..1e522e145344 100644 --- a/fs/btrfs/xattr.c +++ b/fs/btrfs/xattr.c @@ -353,7 +353,8 @@ ssize_t btrfs_listxattr(struct dentry *dentry, char *buffer, size_t size) static int btrfs_xattr_handler_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { name = xattr_full_name(handler, name); return btrfs_getxattr(inode, name, buffer, size); diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c index 37b458a9af3a..edb7eb9ae83e 100644 --- a/fs/ceph/xattr.c +++ b/fs/ceph/xattr.c @@ -1171,7 +1171,8 @@ int __ceph_setxattr(struct inode *inode, const char *name, static int ceph_get_xattr_handler(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, + int flags) { if (!ceph_is_valid_xattr(name)) return -EOPNOTSUPP; diff --git a/fs/cifs/xattr.c b/fs/cifs/xattr.c index 9076150758d8..7f71c06ce631 100644 --- a/fs/cifs/xattr.c +++ b/fs/cifs/xattr.c @@ -199,7 +199,7 @@ static int cifs_creation_time_get(struct dentry *dentry, struct inode *inode, static int cifs_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, int flags) { ssize_t rc = -EOPNOTSUPP; unsigned int xid; diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c index 18426f4855f1..c710c7533729 100644 --- a/fs/ecryptfs/inode.c +++ b/fs/ecryptfs/inode.c @@ -1018,7 +1018,8 @@ ecryptfs_getxattr_lower(struct dentry *lower_dentry, struct inode *lower_inode, goto out; } inode_lock(lower_inode); - rc = __vfs_getxattr(lower_dentry, lower_inode, name, value, size); + rc = __vfs_getxattr(lower_dentry, lower_inode, name, value, size, + XATTR_NOSECURITY); inode_unlock(lower_inode); out: return rc; @@ -1103,7 +1104,8 @@ const struct inode_operations ecryptfs_main_iops = { static int ecryptfs_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return ecryptfs_getxattr(dentry, inode, name, buffer, size); } diff --git a/fs/ecryptfs/mmap.c b/fs/ecryptfs/mmap.c index cffa0c1ec829..2362be3e3b4d 100644 --- a/fs/ecryptfs/mmap.c +++ b/fs/ecryptfs/mmap.c @@ -422,7 +422,7 @@ static int ecryptfs_write_inode_size_to_xattr(struct inode *ecryptfs_inode) } inode_lock(lower_inode); size = __vfs_getxattr(lower_dentry, lower_inode, ECRYPTFS_XATTR_NAME, - xattr_virt, PAGE_SIZE); + xattr_virt, PAGE_SIZE, XATTR_NOSECURITY); if (size < 0) size = 8; put_unaligned_be64(i_size_read(ecryptfs_inode), xattr_virt); diff --git a/fs/ext2/xattr_trusted.c b/fs/ext2/xattr_trusted.c index 49add1107850..8d313664f0fa 100644 --- a/fs/ext2/xattr_trusted.c +++ b/fs/ext2/xattr_trusted.c @@ -18,7 +18,7 @@ ext2_xattr_trusted_list(struct dentry *dentry) static int ext2_xattr_trusted_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { return ext2_xattr_get(inode, EXT2_XATTR_INDEX_TRUSTED, name, buffer, size); diff --git a/fs/ext2/xattr_user.c b/fs/ext2/xattr_user.c index c243a3b4d69d..712b7c95cc64 100644 --- a/fs/ext2/xattr_user.c +++ b/fs/ext2/xattr_user.c @@ -20,7 +20,7 @@ ext2_xattr_user_list(struct dentry *dentry) static int ext2_xattr_user_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { if (!test_opt(inode->i_sb, XATTR_USER)) return -EOPNOTSUPP; diff --git a/fs/ext4/xattr_security.c b/fs/ext4/xattr_security.c index 197a9d8a15ef..50fb71393fb6 100644 --- a/fs/ext4/xattr_security.c +++ b/fs/ext4/xattr_security.c @@ -15,7 +15,7 @@ static int ext4_xattr_security_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { return ext4_xattr_get(inode, EXT4_XATTR_INDEX_SECURITY, name, buffer, size); diff --git a/fs/ext4/xattr_trusted.c b/fs/ext4/xattr_trusted.c index e9389e5d75c3..64bd8f86c1f1 100644 --- a/fs/ext4/xattr_trusted.c +++ b/fs/ext4/xattr_trusted.c @@ -22,7 +22,7 @@ ext4_xattr_trusted_list(struct dentry *dentry) static int ext4_xattr_trusted_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { return ext4_xattr_get(inode, EXT4_XATTR_INDEX_TRUSTED, name, buffer, size); diff --git a/fs/ext4/xattr_user.c b/fs/ext4/xattr_user.c index d4546184b34b..b7301373820e 100644 --- a/fs/ext4/xattr_user.c +++ b/fs/ext4/xattr_user.c @@ -21,7 +21,7 @@ ext4_xattr_user_list(struct dentry *dentry) static int ext4_xattr_user_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { if (!test_opt(inode->i_sb, XATTR_USER)) return -EOPNOTSUPP; diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c index b32c45621679..76559da8dfba 100644 --- a/fs/f2fs/xattr.c +++ b/fs/f2fs/xattr.c @@ -24,7 +24,7 @@ static int f2fs_xattr_generic_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); @@ -79,7 +79,7 @@ static bool f2fs_xattr_trusted_list(struct dentry *dentry) static int f2fs_xattr_advise_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { if (buffer) *((char *)buffer) = F2FS_I(inode)->i_advise; diff --git a/fs/fuse/xattr.c b/fs/fuse/xattr.c index 433717640f78..d1ef7808304e 100644 --- a/fs/fuse/xattr.c +++ b/fs/fuse/xattr.c @@ -176,7 +176,7 @@ int fuse_removexattr(struct inode *inode, const char *name) static int fuse_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, int flags) { return fuse_getxattr(inode, name, value, size); } @@ -199,7 +199,7 @@ static bool no_xattr_list(struct dentry *dentry) static int no_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, int flags) { return -EOPNOTSUPP; } diff --git a/fs/gfs2/xattr.c b/fs/gfs2/xattr.c index bbe593d16bea..a9db067a99c1 100644 --- a/fs/gfs2/xattr.c +++ b/fs/gfs2/xattr.c @@ -588,7 +588,8 @@ static int __gfs2_xattr_get(struct inode *inode, const char *name, static int gfs2_xattr_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { struct gfs2_inode *ip = GFS2_I(inode); struct gfs2_holder gh; diff --git a/fs/hfs/attr.c b/fs/hfs/attr.c index 74fa62643136..08222a9c5d31 100644 --- a/fs/hfs/attr.c +++ b/fs/hfs/attr.c @@ -115,7 +115,7 @@ static ssize_t __hfs_getxattr(struct inode *inode, enum hfs_xattr_type type, static int hfs_xattr_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, int flags) { return __hfs_getxattr(inode, handler->flags, value, size); } diff --git a/fs/hfsplus/xattr.c b/fs/hfsplus/xattr.c index bb0b27d88e50..381c2aaedbc8 100644 --- a/fs/hfsplus/xattr.c +++ b/fs/hfsplus/xattr.c @@ -839,7 +839,8 @@ static int hfsplus_removexattr(struct inode *inode, const char *name) static int hfsplus_osx_getxattr(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { /* * Don't allow retrieving properly prefixed attributes diff --git a/fs/hfsplus/xattr_trusted.c b/fs/hfsplus/xattr_trusted.c index fbad91e1dada..54d926314f8c 100644 --- a/fs/hfsplus/xattr_trusted.c +++ b/fs/hfsplus/xattr_trusted.c @@ -14,7 +14,8 @@ static int hfsplus_trusted_getxattr(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, + size_t size, int flags) { return hfsplus_getxattr(inode, name, buffer, size, XATTR_TRUSTED_PREFIX, diff --git a/fs/hfsplus/xattr_user.c b/fs/hfsplus/xattr_user.c index 74d19faf255e..4d2b1ffff887 100644 --- a/fs/hfsplus/xattr_user.c +++ b/fs/hfsplus/xattr_user.c @@ -14,7 +14,8 @@ static int hfsplus_user_getxattr(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return hfsplus_getxattr(inode, name, buffer, size, diff --git a/fs/jffs2/security.c b/fs/jffs2/security.c index c2332e30f218..e6f42fe435af 100644 --- a/fs/jffs2/security.c +++ b/fs/jffs2/security.c @@ -50,7 +50,8 @@ int jffs2_init_security(struct inode *inode, struct inode *dir, /* ---- XATTR Handler for "security.*" ----------------- */ static int jffs2_security_getxattr(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return do_jffs2_getxattr(inode, JFFS2_XPREFIX_SECURITY, name, buffer, size); diff --git a/fs/jffs2/xattr_trusted.c b/fs/jffs2/xattr_trusted.c index 5d6030826c52..9dccaae549f5 100644 --- a/fs/jffs2/xattr_trusted.c +++ b/fs/jffs2/xattr_trusted.c @@ -18,7 +18,8 @@ static int jffs2_trusted_getxattr(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return do_jffs2_getxattr(inode, JFFS2_XPREFIX_TRUSTED, name, buffer, size); diff --git a/fs/jffs2/xattr_user.c b/fs/jffs2/xattr_user.c index 9d027b4abcf9..c0983a3e810b 100644 --- a/fs/jffs2/xattr_user.c +++ b/fs/jffs2/xattr_user.c @@ -18,7 +18,8 @@ static int jffs2_user_getxattr(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return do_jffs2_getxattr(inode, JFFS2_XPREFIX_USER, name, buffer, size); diff --git a/fs/jfs/xattr.c b/fs/jfs/xattr.c index db41e7803163..5c79a35bf62f 100644 --- a/fs/jfs/xattr.c +++ b/fs/jfs/xattr.c @@ -925,7 +925,7 @@ static int __jfs_xattr_set(struct inode *inode, const char *name, static int jfs_xattr_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, int flags) { name = xattr_full_name(handler, name); return __jfs_getxattr(inode, name, value, size); @@ -942,7 +942,8 @@ static int jfs_xattr_set(const struct xattr_handler *handler, static int jfs_xattr_get_os2(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, + int flags) { if (is_known_namespace(name)) return -EOPNOTSUPP; diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c index f3f3984cce80..89db24ce644e 100644 --- a/fs/kernfs/inode.c +++ b/fs/kernfs/inode.c @@ -309,7 +309,8 @@ int kernfs_xattr_set(struct kernfs_node *kn, const char *name, static int kernfs_vfs_xattr_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *suffix, void *value, size_t size) + const char *suffix, void *value, size_t size, + int flags) { const char *name = xattr_full_name(handler, suffix); struct kernfs_node *kn = inode->i_private; diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 39896afc6edf..5e6a58685cd0 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -7203,7 +7203,8 @@ static int nfs4_xattr_set_nfs4_acl(const struct xattr_handler *handler, static int nfs4_xattr_get_nfs4_acl(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *key, void *buf, size_t buflen) + const char *key, void *buf, size_t buflen, + int flags) { return nfs4_proc_get_acl(inode, buf, buflen); } @@ -7228,7 +7229,8 @@ static int nfs4_xattr_set_nfs4_label(const struct xattr_handler *handler, static int nfs4_xattr_get_nfs4_label(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *key, void *buf, size_t buflen) + const char *key, void *buf, size_t buflen, + int flags) { if (security_ismaclabel(key)) return nfs4_get_security_label(inode, buf, buflen); diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c index 385f3aaa2448..06e615642422 100644 --- a/fs/ocfs2/xattr.c +++ b/fs/ocfs2/xattr.c @@ -7245,7 +7245,8 @@ int ocfs2_init_security_and_acl(struct inode *dir, */ static int ocfs2_xattr_security_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return ocfs2_xattr_get(inode, OCFS2_XATTR_INDEX_SECURITY, name, buffer, size); @@ -7317,7 +7318,8 @@ const struct xattr_handler ocfs2_xattr_security_handler = { */ static int ocfs2_xattr_trusted_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return ocfs2_xattr_get(inode, OCFS2_XATTR_INDEX_TRUSTED, name, buffer, size); @@ -7343,7 +7345,8 @@ const struct xattr_handler ocfs2_xattr_trusted_handler = { */ static int ocfs2_xattr_user_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); diff --git a/fs/orangefs/xattr.c b/fs/orangefs/xattr.c index bdc285aea360..ef4180bff7bb 100644 --- a/fs/orangefs/xattr.c +++ b/fs/orangefs/xattr.c @@ -541,7 +541,8 @@ static int orangefs_xattr_get_default(const struct xattr_handler *handler, struct inode *inode, const char *name, void *buffer, - size_t size) + size_t size, + int flags) { return orangefs_inode_getxattr(inode, name, buffer, size); diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index b368e2e102fa..a7b21f2ea2dd 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -854,7 +854,7 @@ static unsigned int ovl_split_lowerdirs(char *str) static int __maybe_unused ovl_posix_acl_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { return ovl_xattr_get(dentry, inode, handler->name, buffer, size); } @@ -919,7 +919,8 @@ ovl_posix_acl_xattr_set(const struct xattr_handler *handler, static int ovl_own_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return -EOPNOTSUPP; } @@ -934,7 +935,8 @@ static int ovl_own_xattr_set(const struct xattr_handler *handler, static int ovl_other_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return ovl_xattr_get(dentry, inode, name, buffer, size); } diff --git a/fs/posix_acl.c b/fs/posix_acl.c index 84ad1c90d535..cd55621e570b 100644 --- a/fs/posix_acl.c +++ b/fs/posix_acl.c @@ -832,7 +832,7 @@ EXPORT_SYMBOL (posix_acl_to_xattr); static int posix_acl_xattr_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, int flags) { struct posix_acl *acl; int error; diff --git a/fs/reiserfs/xattr_security.c b/fs/reiserfs/xattr_security.c index 20be9a0e5870..eedfa07a4fd0 100644 --- a/fs/reiserfs/xattr_security.c +++ b/fs/reiserfs/xattr_security.c @@ -11,7 +11,8 @@ static int security_get(const struct xattr_handler *handler, struct dentry *unused, - struct inode *inode, const char *name, void *buffer, size_t size) + struct inode *inode, const char *name, void *buffer, size_t size, + int flags) { if (IS_PRIVATE(inode)) return -EPERM; diff --git a/fs/reiserfs/xattr_trusted.c b/fs/reiserfs/xattr_trusted.c index 5ed48da3d02b..2d11d98605dd 100644 --- a/fs/reiserfs/xattr_trusted.c +++ b/fs/reiserfs/xattr_trusted.c @@ -10,7 +10,8 @@ static int trusted_get(const struct xattr_handler *handler, struct dentry *unused, - struct inode *inode, const char *name, void *buffer, size_t size) + struct inode *inode, const char *name, void *buffer, size_t size, + int flags) { if (!capable(CAP_SYS_ADMIN) || IS_PRIVATE(inode)) return -EPERM; diff --git a/fs/reiserfs/xattr_user.c b/fs/reiserfs/xattr_user.c index a573ca45bacc..2a59d85c69c9 100644 --- a/fs/reiserfs/xattr_user.c +++ b/fs/reiserfs/xattr_user.c @@ -9,7 +9,8 @@ static int user_get(const struct xattr_handler *handler, struct dentry *unused, - struct inode *inode, const char *name, void *buffer, size_t size) + struct inode *inode, const char *name, void *buffer, size_t size, + int flags) { if (!reiserfs_xattrs_user(inode->i_sb)) return -EOPNOTSUPP; diff --git a/fs/squashfs/xattr.c b/fs/squashfs/xattr.c index e1e3f3dd5a06..d8d58c990652 100644 --- a/fs/squashfs/xattr.c +++ b/fs/squashfs/xattr.c @@ -204,7 +204,7 @@ static int squashfs_xattr_handler_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, const char *name, - void *buffer, size_t size) + void *buffer, size_t size, int flags) { return squashfs_xattr_get(inode, handler->flags, name, buffer, size); diff --git a/fs/xattr.c b/fs/xattr.c index 90dd78f0eb27..71f887518d6f 100644 --- a/fs/xattr.c +++ b/fs/xattr.c @@ -281,7 +281,7 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value, return PTR_ERR(handler); if (!handler->get) return -EOPNOTSUPP; - error = handler->get(handler, dentry, inode, name, NULL, 0); + error = handler->get(handler, dentry, inode, name, NULL, 0, 0); if (error < 0) return error; @@ -292,32 +292,20 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value, memset(value, 0, error + 1); } - error = handler->get(handler, dentry, inode, name, value, error); + error = handler->get(handler, dentry, inode, name, value, error, 0); *xattr_value = value; return error; } ssize_t __vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name, - void *value, size_t size) + void *value, size_t size, int flags) { const struct xattr_handler *handler; - - handler = xattr_resolve_name(inode, &name); - if (IS_ERR(handler)) - return PTR_ERR(handler); - if (!handler->get) - return -EOPNOTSUPP; - return handler->get(handler, dentry, inode, name, value, size); -} -EXPORT_SYMBOL(__vfs_getxattr); - -ssize_t -vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size) -{ - struct inode *inode = dentry->d_inode; int error; + if (flags & XATTR_NOSECURITY) + goto nolsm; error = xattr_permission(inode, name, MAY_READ); if (error) return error; @@ -339,7 +327,19 @@ vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size) return ret; } nolsm: - return __vfs_getxattr(dentry, inode, name, value, size); + handler = xattr_resolve_name(inode, &name); + if (IS_ERR(handler)) + return PTR_ERR(handler); + if (!handler->get) + return -EOPNOTSUPP; + return handler->get(handler, dentry, inode, name, value, size, flags); +} +EXPORT_SYMBOL(__vfs_getxattr); + +ssize_t +vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size) +{ + return __vfs_getxattr(dentry, dentry->d_inode, name, value, size, 0); } EXPORT_SYMBOL_GPL(vfs_getxattr); diff --git a/fs/xfs/xfs_xattr.c b/fs/xfs/xfs_xattr.c index 3123b5aaad2a..cafc99c48e20 100644 --- a/fs/xfs/xfs_xattr.c +++ b/fs/xfs/xfs_xattr.c @@ -18,7 +18,8 @@ static int xfs_xattr_get(const struct xattr_handler *handler, struct dentry *unused, - struct inode *inode, const char *name, void *value, size_t size) + struct inode *inode, const char *name, void *value, size_t size, + int flags) { int xflags = handler->flags; struct xfs_inode *ip = XFS_I(inode); diff --git a/include/linux/xattr.h b/include/linux/xattr.h index 6dad031be3c2..e5c191b30818 100644 --- a/include/linux/xattr.h +++ b/include/linux/xattr.h @@ -30,10 +30,10 @@ struct xattr_handler { const char *prefix; int flags; /* fs private flags */ bool (*list)(struct dentry *dentry); - int (*get)(const struct xattr_handler *, struct dentry *dentry, + int (*get)(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, void *buffer, - size_t size); - int (*set)(const struct xattr_handler *, struct dentry *dentry, + size_t size, int flags); + int (*set)(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, const void *buffer, size_t size, int flags); }; @@ -46,7 +46,8 @@ struct xattr { size_t value_len; }; -ssize_t __vfs_getxattr(struct dentry *, struct inode *, const char *, void *, size_t); +ssize_t __vfs_getxattr(struct dentry *, struct inode *, const char *, void *, + size_t, int); ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t); ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size); int __vfs_setxattr(struct dentry *, struct inode *, const char *, const void *, size_t, int); diff --git a/include/uapi/linux/xattr.h b/include/uapi/linux/xattr.h index c1395b5bd432..1216d777d210 100644 --- a/include/uapi/linux/xattr.h +++ b/include/uapi/linux/xattr.h @@ -17,8 +17,9 @@ #if __UAPI_DEF_XATTR #define __USE_KERNEL_XATTR_DEFS -#define XATTR_CREATE 0x1 /* set value, fail if attr already exists */ -#define XATTR_REPLACE 0x2 /* set value, fail if attr does not exist */ +#define XATTR_CREATE 0x1 /* set value, fail if attr already exists */ +#define XATTR_REPLACE 0x2 /* set value, fail if attr does not exist */ +#define XATTR_NOSECURITY 0x4 /* get value, do not involve security check */ #endif /* Namespaces */ diff --git a/mm/shmem.c b/mm/shmem.c index 626d8c74b973..34d3818b4424 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -3206,7 +3206,8 @@ static int shmem_initxattrs(struct inode *inode, static int shmem_xattr_handler_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { struct shmem_inode_info *info = SHMEM_I(inode); diff --git a/net/socket.c b/net/socket.c index 6a9ab7a8b1d2..6b0fea92dd02 100644 --- a/net/socket.c +++ b/net/socket.c @@ -300,7 +300,8 @@ static const struct dentry_operations sockfs_dentry_operations = { static int sockfs_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *suffix, void *value, size_t size) + const char *suffix, void *value, size_t size, + int flags) { if (value) { if (dentry->d_name.len + 1 > size) diff --git a/security/commoncap.c b/security/commoncap.c index f4ee0ae106b2..378a2f66a73d 100644 --- a/security/commoncap.c +++ b/security/commoncap.c @@ -297,7 +297,8 @@ int cap_inode_need_killpriv(struct dentry *dentry) struct inode *inode = d_backing_inode(dentry); int error; - error = __vfs_getxattr(dentry, inode, XATTR_NAME_CAPS, NULL, 0); + error = __vfs_getxattr(dentry, inode, XATTR_NAME_CAPS, NULL, 0, + XATTR_NOSECURITY); return error > 0; } @@ -586,7 +587,8 @@ int get_vfs_caps_from_disk(const struct dentry *dentry, struct cpu_vfs_cap_data fs_ns = inode->i_sb->s_user_ns; size = __vfs_getxattr((struct dentry *)dentry, inode, - XATTR_NAME_CAPS, &data, XATTR_CAPS_SZ); + XATTR_NAME_CAPS, &data, XATTR_CAPS_SZ, + XATTR_NOSECURITY); if (size == -ENODATA || size == -EOPNOTSUPP) /* no data, that's ok */ return -ENODATA; diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c index f9a81b187fae..921c8f2afcaf 100644 --- a/security/integrity/evm/evm_main.c +++ b/security/integrity/evm/evm_main.c @@ -100,7 +100,8 @@ static int evm_find_protected_xattrs(struct dentry *dentry) return -EOPNOTSUPP; list_for_each_entry_rcu(xattr, &evm_config_xattrnames, list) { - error = __vfs_getxattr(dentry, inode, xattr->name, NULL, 0); + error = __vfs_getxattr(dentry, inode, xattr->name, NULL, 0, + XATTR_NOSECURITY); if (error < 0) { if (error == -ENODATA) continue; diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 74dd46de01b6..b0822da0658f 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -552,7 +552,8 @@ static int sb_finish_set_opts(struct super_block *sb) goto out; } - rc = __vfs_getxattr(root, root_inode, XATTR_NAME_SELINUX, NULL, 0); + rc = __vfs_getxattr(root, root_inode, XATTR_NAME_SELINUX, NULL, + 0, XATTR_NOSECURITY); if (rc < 0 && rc != -ENODATA) { if (rc == -EOPNOTSUPP) pr_warn("SELinux: (dev %s, type " @@ -1378,12 +1379,14 @@ static int inode_doinit_use_xattr(struct inode *inode, struct dentry *dentry, return -ENOMEM; context[len] = '\0'; - rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, context, len); + rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, context, len, + XATTR_NOSECURITY); if (rc == -ERANGE) { kfree(context); /* Need a larger buffer. Query for the right size. */ - rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, NULL, 0); + rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, NULL, 0, + XATTR_NOSECURITY); if (rc < 0) return rc; @@ -1394,7 +1397,7 @@ static int inode_doinit_use_xattr(struct inode *inode, struct dentry *dentry, context[len] = '\0'; rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, - context, len); + context, len, XATTR_NOSECURITY); } if (rc < 0) { kfree(context); diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 4c5e5a438f8b..158b35772be1 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -292,7 +292,8 @@ static struct smack_known *smk_fetch(const char *name, struct inode *ip, if (buffer == NULL) return ERR_PTR(-ENOMEM); - rc = __vfs_getxattr(dp, ip, name, buffer, SMK_LONGLABEL); + rc = __vfs_getxattr(dp, ip, name, buffer, SMK_LONGLABEL, + XATTR_NOSECURITY); if (rc < 0) skp = ERR_PTR(rc); else if (rc == 0) @@ -3442,7 +3443,7 @@ static void smack_d_instantiate(struct dentry *opt_dentry, struct inode *inode) } else { rc = __vfs_getxattr(dp, inode, XATTR_NAME_SMACKTRANSMUTE, trattr, - TRANS_TRUE_SIZE); + TRANS_TRUE_SIZE, XATTR_NOSECURITY); if (rc >= 0 && strncmp(trattr, TRANS_TRUE, TRANS_TRUE_SIZE) != 0) rc = -EINVAL; -- 2.22.0.770.g0f2c4a37fd-goog From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark Salyzyn Date: Wed, 31 Jul 2019 09:57:57 -0700 Subject: [Cluster-devel] [PATCH v13 2/5] Add flags option to get xattr method paired to __vfs_getxattr In-Reply-To: <20190731165803.4755-1-salyzyn@android.com> References: <20190731165803.4755-1-salyzyn@android.com> Message-ID: <20190731165803.4755-3-salyzyn@android.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Add a flag option to get xattr method that could have a bit flag of XATTR_NOSECURITY passed to it. XATTR_NOSECURITY is generally then set in the __vfs_getxattr path. This handles the case of a union filesystem driver that is being requested by the security layer to report back the data that is the target label or context embedded into wrapped filesystem's xattr. For the use case where access is to be blocked by the security layer. The path then could be security(dentry) -> __vfs_getxattr(dentry...XATTR_NOSECUIRTY) -> handler->get(dentry...XATTR_NOSECURITY) -> __vfs_getxattr(lower_dentry...XATTR_NOSECUIRTY) -> lower_handler->get(lower_dentry...XATTR_NOSECUIRTY) which would report back through the chain data and success as expected, but the logging security layer at the top would have the data to determine the access permissions and report back the target context that was blocked. Without the get handler flag, the path on a union filesystem would be the errant security(dentry) -> __vfs_getxattr(dentry) -> handler->get(dentry) -> vfs_getxattr(lower_dentry) -> nested -> security(lower_dentry, log off) -> lower_handler->get(lower_dentry) which would report back through the chain no data, and -EACCES. For selinux for both cases, this would translate to a correctly determined blocked access. In the first corrected case a correct avc log would be reported, in the second legacy case an incorrect avc log would be reported against an uninitialized u:object_r:unlabeled:s0 context making the logs cosmetically useless for audit2allow. This patch series is inert and is the wide-spread addition of the flags option for xattr functions, and a replacement of _vfs_getxattr with __vfs_getxattr(...XATTR_NOSECURITY). Signed-off-by: Mark Salyzyn Cc: Miklos Szeredi Cc: Jonathan Corbet Cc: Vivek Goyal Cc: Eric W. Biederman Cc: Amir Goldstein Cc: Randy Dunlap Cc: Stephen Smalley Cc: linux-unionfs at vger.kernel.org Cc: linux-doc at vger.kernel.org Cc: linux-kernel at vger.kernel.org Cc: kernel-team at android.com Cc: Eric Van Hensbergen Cc: Latchesar Ionkov Cc: Dominique Martinet Cc: David Howells Cc: Chris Mason Cc: Josef Bacik Cc: David Sterba Cc: Jeff Layton Cc: Sage Weil Cc: Ilya Dryomov Cc: Steve French Cc: Tyler Hicks Cc: Jan Kara Cc: Theodore Ts'o Cc: Andreas Dilger Cc: Jaegeuk Kim Cc: Chao Yu Cc: Bob Peterson Cc: Andreas Gruenbacher Cc: David Woodhouse Cc: Richard Weinberger Cc: Dave Kleikamp Cc: Greg Kroah-Hartman Cc: Tejun Heo Cc: Trond Myklebust Cc: Anna Schumaker Cc: Mark Fasheh Cc: Joel Becker Cc: Joseph Qi Cc: Mike Marshall Cc: Martin Brandenburg Cc: Alexander Viro Cc: Phillip Lougher Cc: Darrick J. Wong Cc: linux-xfs at vger.kernel.org Cc: Hugh Dickins Cc: David S. Miller Cc: Andrew Morton Cc: Mathieu Malaterre Cc: Ernesto A. Fern?ndez Cc: Vyacheslav Dubeyko Cc: v9fs-developer at lists.sourceforge.net Cc: linux-afs at lists.infradead.org Cc: linux-btrfs at vger.kernel.org Cc: ceph-devel at vger.kernel.org Cc: linux-cifs at vger.kernel.org Cc: samba-technical at lists.samba.org Cc: ecryptfs at vger.kernel.org Cc: linux-ext4 at vger.kernel.org Cc: linux-f2fs-devel at lists.sourceforge.net Cc: linux-fsdevel at vger.kernel.org Cc: cluster-devel at redhat.com Cc: linux-mtd at lists.infradead.org Cc: jfs-discussion at lists.sourceforge.net Cc: linux-nfs at vger.kernel.org Cc: ocfs2-devel at oss.oracle.com Cc: devel at lists.orangefs.org Cc: reiserfs-devel at vger.kernel.org Cc: linux-mm at kvack.org Cc: netdev at vger.kernel.org Cc: linux-security-module at vger.kernel.org Cc: stable at vger.kernel.org # 4.4, 4.9, 4.14 & 4.19 --- v13 - added flags to __vfs_getxattr call, and moved all the security code from vfs_getxattr into it. v12 - Added back to patch series as get xattr with flag option. v11 - Squashed out of patch series and replaced with per-thread flag solution. v10 - Added to patch series as __get xattr method. --- fs/9p/acl.c | 3 ++- fs/9p/xattr.c | 3 ++- fs/afs/xattr.c | 6 +++--- fs/btrfs/xattr.c | 3 ++- fs/ceph/xattr.c | 3 ++- fs/cifs/xattr.c | 2 +- fs/ecryptfs/inode.c | 6 ++++-- fs/ecryptfs/mmap.c | 2 +- fs/ext2/xattr_trusted.c | 2 +- fs/ext2/xattr_user.c | 2 +- fs/ext4/xattr_security.c | 2 +- fs/ext4/xattr_trusted.c | 2 +- fs/ext4/xattr_user.c | 2 +- fs/f2fs/xattr.c | 4 ++-- fs/fuse/xattr.c | 4 ++-- fs/gfs2/xattr.c | 3 ++- fs/hfs/attr.c | 2 +- fs/hfsplus/xattr.c | 3 ++- fs/hfsplus/xattr_trusted.c | 3 ++- fs/hfsplus/xattr_user.c | 3 ++- fs/jffs2/security.c | 3 ++- fs/jffs2/xattr_trusted.c | 3 ++- fs/jffs2/xattr_user.c | 3 ++- fs/jfs/xattr.c | 5 +++-- fs/kernfs/inode.c | 3 ++- fs/nfs/nfs4proc.c | 6 ++++-- fs/ocfs2/xattr.c | 9 +++++--- fs/orangefs/xattr.c | 3 ++- fs/overlayfs/super.c | 8 ++++--- fs/posix_acl.c | 2 +- fs/reiserfs/xattr_security.c | 3 ++- fs/reiserfs/xattr_trusted.c | 3 ++- fs/reiserfs/xattr_user.c | 3 ++- fs/squashfs/xattr.c | 2 +- fs/xattr.c | 36 +++++++++++++++---------------- fs/xfs/xfs_xattr.c | 3 ++- include/linux/xattr.h | 9 ++++---- include/uapi/linux/xattr.h | 5 +++-- mm/shmem.c | 3 ++- net/socket.c | 3 ++- security/commoncap.c | 6 ++++-- security/integrity/evm/evm_main.c | 3 ++- security/selinux/hooks.c | 11 ++++++---- security/smack/smack_lsm.c | 5 +++-- 44 files changed, 119 insertions(+), 81 deletions(-) diff --git a/fs/9p/acl.c b/fs/9p/acl.c index 6261719f6f2a..cb14e8b312bc 100644 --- a/fs/9p/acl.c +++ b/fs/9p/acl.c @@ -214,7 +214,8 @@ int v9fs_acl_mode(struct inode *dir, umode_t *modep, static int v9fs_xattr_get_acl(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { struct v9fs_session_info *v9ses; struct posix_acl *acl; diff --git a/fs/9p/xattr.c b/fs/9p/xattr.c index ac8ff8ca4c11..5cfa772452fd 100644 --- a/fs/9p/xattr.c +++ b/fs/9p/xattr.c @@ -139,7 +139,8 @@ ssize_t v9fs_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size) static int v9fs_xattr_handler_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { const char *full_name = xattr_full_name(handler, name); diff --git a/fs/afs/xattr.c b/fs/afs/xattr.c index 5552d034090a..e6509c21f08a 100644 --- a/fs/afs/xattr.c +++ b/fs/afs/xattr.c @@ -334,7 +334,7 @@ static const struct xattr_handler afs_xattr_yfs_handler = { static int afs_xattr_get_cell(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, - void *buffer, size_t size) + void *buffer, size_t size, int flags) { struct afs_vnode *vnode = AFS_FS_I(inode); struct afs_cell *cell = vnode->volume->cell; @@ -361,7 +361,7 @@ static const struct xattr_handler afs_xattr_afs_cell_handler = { static int afs_xattr_get_fid(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, - void *buffer, size_t size) + void *buffer, size_t size, int flags) { struct afs_vnode *vnode = AFS_FS_I(inode); char text[16 + 1 + 24 + 1 + 8 + 1]; @@ -397,7 +397,7 @@ static const struct xattr_handler afs_xattr_afs_fid_handler = { static int afs_xattr_get_volume(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, - void *buffer, size_t size) + void *buffer, size_t size, int flags) { struct afs_vnode *vnode = AFS_FS_I(inode); const char *volname = vnode->volume->name; diff --git a/fs/btrfs/xattr.c b/fs/btrfs/xattr.c index 95d9aebff2c4..1e522e145344 100644 --- a/fs/btrfs/xattr.c +++ b/fs/btrfs/xattr.c @@ -353,7 +353,8 @@ ssize_t btrfs_listxattr(struct dentry *dentry, char *buffer, size_t size) static int btrfs_xattr_handler_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { name = xattr_full_name(handler, name); return btrfs_getxattr(inode, name, buffer, size); diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c index 37b458a9af3a..edb7eb9ae83e 100644 --- a/fs/ceph/xattr.c +++ b/fs/ceph/xattr.c @@ -1171,7 +1171,8 @@ int __ceph_setxattr(struct inode *inode, const char *name, static int ceph_get_xattr_handler(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, + int flags) { if (!ceph_is_valid_xattr(name)) return -EOPNOTSUPP; diff --git a/fs/cifs/xattr.c b/fs/cifs/xattr.c index 9076150758d8..7f71c06ce631 100644 --- a/fs/cifs/xattr.c +++ b/fs/cifs/xattr.c @@ -199,7 +199,7 @@ static int cifs_creation_time_get(struct dentry *dentry, struct inode *inode, static int cifs_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, int flags) { ssize_t rc = -EOPNOTSUPP; unsigned int xid; diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c index 18426f4855f1..c710c7533729 100644 --- a/fs/ecryptfs/inode.c +++ b/fs/ecryptfs/inode.c @@ -1018,7 +1018,8 @@ ecryptfs_getxattr_lower(struct dentry *lower_dentry, struct inode *lower_inode, goto out; } inode_lock(lower_inode); - rc = __vfs_getxattr(lower_dentry, lower_inode, name, value, size); + rc = __vfs_getxattr(lower_dentry, lower_inode, name, value, size, + XATTR_NOSECURITY); inode_unlock(lower_inode); out: return rc; @@ -1103,7 +1104,8 @@ const struct inode_operations ecryptfs_main_iops = { static int ecryptfs_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return ecryptfs_getxattr(dentry, inode, name, buffer, size); } diff --git a/fs/ecryptfs/mmap.c b/fs/ecryptfs/mmap.c index cffa0c1ec829..2362be3e3b4d 100644 --- a/fs/ecryptfs/mmap.c +++ b/fs/ecryptfs/mmap.c @@ -422,7 +422,7 @@ static int ecryptfs_write_inode_size_to_xattr(struct inode *ecryptfs_inode) } inode_lock(lower_inode); size = __vfs_getxattr(lower_dentry, lower_inode, ECRYPTFS_XATTR_NAME, - xattr_virt, PAGE_SIZE); + xattr_virt, PAGE_SIZE, XATTR_NOSECURITY); if (size < 0) size = 8; put_unaligned_be64(i_size_read(ecryptfs_inode), xattr_virt); diff --git a/fs/ext2/xattr_trusted.c b/fs/ext2/xattr_trusted.c index 49add1107850..8d313664f0fa 100644 --- a/fs/ext2/xattr_trusted.c +++ b/fs/ext2/xattr_trusted.c @@ -18,7 +18,7 @@ ext2_xattr_trusted_list(struct dentry *dentry) static int ext2_xattr_trusted_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { return ext2_xattr_get(inode, EXT2_XATTR_INDEX_TRUSTED, name, buffer, size); diff --git a/fs/ext2/xattr_user.c b/fs/ext2/xattr_user.c index c243a3b4d69d..712b7c95cc64 100644 --- a/fs/ext2/xattr_user.c +++ b/fs/ext2/xattr_user.c @@ -20,7 +20,7 @@ ext2_xattr_user_list(struct dentry *dentry) static int ext2_xattr_user_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { if (!test_opt(inode->i_sb, XATTR_USER)) return -EOPNOTSUPP; diff --git a/fs/ext4/xattr_security.c b/fs/ext4/xattr_security.c index 197a9d8a15ef..50fb71393fb6 100644 --- a/fs/ext4/xattr_security.c +++ b/fs/ext4/xattr_security.c @@ -15,7 +15,7 @@ static int ext4_xattr_security_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { return ext4_xattr_get(inode, EXT4_XATTR_INDEX_SECURITY, name, buffer, size); diff --git a/fs/ext4/xattr_trusted.c b/fs/ext4/xattr_trusted.c index e9389e5d75c3..64bd8f86c1f1 100644 --- a/fs/ext4/xattr_trusted.c +++ b/fs/ext4/xattr_trusted.c @@ -22,7 +22,7 @@ ext4_xattr_trusted_list(struct dentry *dentry) static int ext4_xattr_trusted_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { return ext4_xattr_get(inode, EXT4_XATTR_INDEX_TRUSTED, name, buffer, size); diff --git a/fs/ext4/xattr_user.c b/fs/ext4/xattr_user.c index d4546184b34b..b7301373820e 100644 --- a/fs/ext4/xattr_user.c +++ b/fs/ext4/xattr_user.c @@ -21,7 +21,7 @@ ext4_xattr_user_list(struct dentry *dentry) static int ext4_xattr_user_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { if (!test_opt(inode->i_sb, XATTR_USER)) return -EOPNOTSUPP; diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c index b32c45621679..76559da8dfba 100644 --- a/fs/f2fs/xattr.c +++ b/fs/f2fs/xattr.c @@ -24,7 +24,7 @@ static int f2fs_xattr_generic_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); @@ -79,7 +79,7 @@ static bool f2fs_xattr_trusted_list(struct dentry *dentry) static int f2fs_xattr_advise_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { if (buffer) *((char *)buffer) = F2FS_I(inode)->i_advise; diff --git a/fs/fuse/xattr.c b/fs/fuse/xattr.c index 433717640f78..d1ef7808304e 100644 --- a/fs/fuse/xattr.c +++ b/fs/fuse/xattr.c @@ -176,7 +176,7 @@ int fuse_removexattr(struct inode *inode, const char *name) static int fuse_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, int flags) { return fuse_getxattr(inode, name, value, size); } @@ -199,7 +199,7 @@ static bool no_xattr_list(struct dentry *dentry) static int no_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, int flags) { return -EOPNOTSUPP; } diff --git a/fs/gfs2/xattr.c b/fs/gfs2/xattr.c index bbe593d16bea..a9db067a99c1 100644 --- a/fs/gfs2/xattr.c +++ b/fs/gfs2/xattr.c @@ -588,7 +588,8 @@ static int __gfs2_xattr_get(struct inode *inode, const char *name, static int gfs2_xattr_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { struct gfs2_inode *ip = GFS2_I(inode); struct gfs2_holder gh; diff --git a/fs/hfs/attr.c b/fs/hfs/attr.c index 74fa62643136..08222a9c5d31 100644 --- a/fs/hfs/attr.c +++ b/fs/hfs/attr.c @@ -115,7 +115,7 @@ static ssize_t __hfs_getxattr(struct inode *inode, enum hfs_xattr_type type, static int hfs_xattr_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, int flags) { return __hfs_getxattr(inode, handler->flags, value, size); } diff --git a/fs/hfsplus/xattr.c b/fs/hfsplus/xattr.c index bb0b27d88e50..381c2aaedbc8 100644 --- a/fs/hfsplus/xattr.c +++ b/fs/hfsplus/xattr.c @@ -839,7 +839,8 @@ static int hfsplus_removexattr(struct inode *inode, const char *name) static int hfsplus_osx_getxattr(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { /* * Don't allow retrieving properly prefixed attributes diff --git a/fs/hfsplus/xattr_trusted.c b/fs/hfsplus/xattr_trusted.c index fbad91e1dada..54d926314f8c 100644 --- a/fs/hfsplus/xattr_trusted.c +++ b/fs/hfsplus/xattr_trusted.c @@ -14,7 +14,8 @@ static int hfsplus_trusted_getxattr(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, + size_t size, int flags) { return hfsplus_getxattr(inode, name, buffer, size, XATTR_TRUSTED_PREFIX, diff --git a/fs/hfsplus/xattr_user.c b/fs/hfsplus/xattr_user.c index 74d19faf255e..4d2b1ffff887 100644 --- a/fs/hfsplus/xattr_user.c +++ b/fs/hfsplus/xattr_user.c @@ -14,7 +14,8 @@ static int hfsplus_user_getxattr(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return hfsplus_getxattr(inode, name, buffer, size, diff --git a/fs/jffs2/security.c b/fs/jffs2/security.c index c2332e30f218..e6f42fe435af 100644 --- a/fs/jffs2/security.c +++ b/fs/jffs2/security.c @@ -50,7 +50,8 @@ int jffs2_init_security(struct inode *inode, struct inode *dir, /* ---- XATTR Handler for "security.*" ----------------- */ static int jffs2_security_getxattr(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return do_jffs2_getxattr(inode, JFFS2_XPREFIX_SECURITY, name, buffer, size); diff --git a/fs/jffs2/xattr_trusted.c b/fs/jffs2/xattr_trusted.c index 5d6030826c52..9dccaae549f5 100644 --- a/fs/jffs2/xattr_trusted.c +++ b/fs/jffs2/xattr_trusted.c @@ -18,7 +18,8 @@ static int jffs2_trusted_getxattr(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return do_jffs2_getxattr(inode, JFFS2_XPREFIX_TRUSTED, name, buffer, size); diff --git a/fs/jffs2/xattr_user.c b/fs/jffs2/xattr_user.c index 9d027b4abcf9..c0983a3e810b 100644 --- a/fs/jffs2/xattr_user.c +++ b/fs/jffs2/xattr_user.c @@ -18,7 +18,8 @@ static int jffs2_user_getxattr(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return do_jffs2_getxattr(inode, JFFS2_XPREFIX_USER, name, buffer, size); diff --git a/fs/jfs/xattr.c b/fs/jfs/xattr.c index db41e7803163..5c79a35bf62f 100644 --- a/fs/jfs/xattr.c +++ b/fs/jfs/xattr.c @@ -925,7 +925,7 @@ static int __jfs_xattr_set(struct inode *inode, const char *name, static int jfs_xattr_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, int flags) { name = xattr_full_name(handler, name); return __jfs_getxattr(inode, name, value, size); @@ -942,7 +942,8 @@ static int jfs_xattr_set(const struct xattr_handler *handler, static int jfs_xattr_get_os2(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, + int flags) { if (is_known_namespace(name)) return -EOPNOTSUPP; diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c index f3f3984cce80..89db24ce644e 100644 --- a/fs/kernfs/inode.c +++ b/fs/kernfs/inode.c @@ -309,7 +309,8 @@ int kernfs_xattr_set(struct kernfs_node *kn, const char *name, static int kernfs_vfs_xattr_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *suffix, void *value, size_t size) + const char *suffix, void *value, size_t size, + int flags) { const char *name = xattr_full_name(handler, suffix); struct kernfs_node *kn = inode->i_private; diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 39896afc6edf..5e6a58685cd0 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -7203,7 +7203,8 @@ static int nfs4_xattr_set_nfs4_acl(const struct xattr_handler *handler, static int nfs4_xattr_get_nfs4_acl(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *key, void *buf, size_t buflen) + const char *key, void *buf, size_t buflen, + int flags) { return nfs4_proc_get_acl(inode, buf, buflen); } @@ -7228,7 +7229,8 @@ static int nfs4_xattr_set_nfs4_label(const struct xattr_handler *handler, static int nfs4_xattr_get_nfs4_label(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *key, void *buf, size_t buflen) + const char *key, void *buf, size_t buflen, + int flags) { if (security_ismaclabel(key)) return nfs4_get_security_label(inode, buf, buflen); diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c index 385f3aaa2448..06e615642422 100644 --- a/fs/ocfs2/xattr.c +++ b/fs/ocfs2/xattr.c @@ -7245,7 +7245,8 @@ int ocfs2_init_security_and_acl(struct inode *dir, */ static int ocfs2_xattr_security_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return ocfs2_xattr_get(inode, OCFS2_XATTR_INDEX_SECURITY, name, buffer, size); @@ -7317,7 +7318,8 @@ const struct xattr_handler ocfs2_xattr_security_handler = { */ static int ocfs2_xattr_trusted_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return ocfs2_xattr_get(inode, OCFS2_XATTR_INDEX_TRUSTED, name, buffer, size); @@ -7343,7 +7345,8 @@ const struct xattr_handler ocfs2_xattr_trusted_handler = { */ static int ocfs2_xattr_user_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); diff --git a/fs/orangefs/xattr.c b/fs/orangefs/xattr.c index bdc285aea360..ef4180bff7bb 100644 --- a/fs/orangefs/xattr.c +++ b/fs/orangefs/xattr.c @@ -541,7 +541,8 @@ static int orangefs_xattr_get_default(const struct xattr_handler *handler, struct inode *inode, const char *name, void *buffer, - size_t size) + size_t size, + int flags) { return orangefs_inode_getxattr(inode, name, buffer, size); diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index b368e2e102fa..a7b21f2ea2dd 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -854,7 +854,7 @@ static unsigned int ovl_split_lowerdirs(char *str) static int __maybe_unused ovl_posix_acl_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { return ovl_xattr_get(dentry, inode, handler->name, buffer, size); } @@ -919,7 +919,8 @@ ovl_posix_acl_xattr_set(const struct xattr_handler *handler, static int ovl_own_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return -EOPNOTSUPP; } @@ -934,7 +935,8 @@ static int ovl_own_xattr_set(const struct xattr_handler *handler, static int ovl_other_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return ovl_xattr_get(dentry, inode, name, buffer, size); } diff --git a/fs/posix_acl.c b/fs/posix_acl.c index 84ad1c90d535..cd55621e570b 100644 --- a/fs/posix_acl.c +++ b/fs/posix_acl.c @@ -832,7 +832,7 @@ EXPORT_SYMBOL (posix_acl_to_xattr); static int posix_acl_xattr_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, int flags) { struct posix_acl *acl; int error; diff --git a/fs/reiserfs/xattr_security.c b/fs/reiserfs/xattr_security.c index 20be9a0e5870..eedfa07a4fd0 100644 --- a/fs/reiserfs/xattr_security.c +++ b/fs/reiserfs/xattr_security.c @@ -11,7 +11,8 @@ static int security_get(const struct xattr_handler *handler, struct dentry *unused, - struct inode *inode, const char *name, void *buffer, size_t size) + struct inode *inode, const char *name, void *buffer, size_t size, + int flags) { if (IS_PRIVATE(inode)) return -EPERM; diff --git a/fs/reiserfs/xattr_trusted.c b/fs/reiserfs/xattr_trusted.c index 5ed48da3d02b..2d11d98605dd 100644 --- a/fs/reiserfs/xattr_trusted.c +++ b/fs/reiserfs/xattr_trusted.c @@ -10,7 +10,8 @@ static int trusted_get(const struct xattr_handler *handler, struct dentry *unused, - struct inode *inode, const char *name, void *buffer, size_t size) + struct inode *inode, const char *name, void *buffer, size_t size, + int flags) { if (!capable(CAP_SYS_ADMIN) || IS_PRIVATE(inode)) return -EPERM; diff --git a/fs/reiserfs/xattr_user.c b/fs/reiserfs/xattr_user.c index a573ca45bacc..2a59d85c69c9 100644 --- a/fs/reiserfs/xattr_user.c +++ b/fs/reiserfs/xattr_user.c @@ -9,7 +9,8 @@ static int user_get(const struct xattr_handler *handler, struct dentry *unused, - struct inode *inode, const char *name, void *buffer, size_t size) + struct inode *inode, const char *name, void *buffer, size_t size, + int flags) { if (!reiserfs_xattrs_user(inode->i_sb)) return -EOPNOTSUPP; diff --git a/fs/squashfs/xattr.c b/fs/squashfs/xattr.c index e1e3f3dd5a06..d8d58c990652 100644 --- a/fs/squashfs/xattr.c +++ b/fs/squashfs/xattr.c @@ -204,7 +204,7 @@ static int squashfs_xattr_handler_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, const char *name, - void *buffer, size_t size) + void *buffer, size_t size, int flags) { return squashfs_xattr_get(inode, handler->flags, name, buffer, size); diff --git a/fs/xattr.c b/fs/xattr.c index 90dd78f0eb27..71f887518d6f 100644 --- a/fs/xattr.c +++ b/fs/xattr.c @@ -281,7 +281,7 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value, return PTR_ERR(handler); if (!handler->get) return -EOPNOTSUPP; - error = handler->get(handler, dentry, inode, name, NULL, 0); + error = handler->get(handler, dentry, inode, name, NULL, 0, 0); if (error < 0) return error; @@ -292,32 +292,20 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value, memset(value, 0, error + 1); } - error = handler->get(handler, dentry, inode, name, value, error); + error = handler->get(handler, dentry, inode, name, value, error, 0); *xattr_value = value; return error; } ssize_t __vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name, - void *value, size_t size) + void *value, size_t size, int flags) { const struct xattr_handler *handler; - - handler = xattr_resolve_name(inode, &name); - if (IS_ERR(handler)) - return PTR_ERR(handler); - if (!handler->get) - return -EOPNOTSUPP; - return handler->get(handler, dentry, inode, name, value, size); -} -EXPORT_SYMBOL(__vfs_getxattr); - -ssize_t -vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size) -{ - struct inode *inode = dentry->d_inode; int error; + if (flags & XATTR_NOSECURITY) + goto nolsm; error = xattr_permission(inode, name, MAY_READ); if (error) return error; @@ -339,7 +327,19 @@ vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size) return ret; } nolsm: - return __vfs_getxattr(dentry, inode, name, value, size); + handler = xattr_resolve_name(inode, &name); + if (IS_ERR(handler)) + return PTR_ERR(handler); + if (!handler->get) + return -EOPNOTSUPP; + return handler->get(handler, dentry, inode, name, value, size, flags); +} +EXPORT_SYMBOL(__vfs_getxattr); + +ssize_t +vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size) +{ + return __vfs_getxattr(dentry, dentry->d_inode, name, value, size, 0); } EXPORT_SYMBOL_GPL(vfs_getxattr); diff --git a/fs/xfs/xfs_xattr.c b/fs/xfs/xfs_xattr.c index 3123b5aaad2a..cafc99c48e20 100644 --- a/fs/xfs/xfs_xattr.c +++ b/fs/xfs/xfs_xattr.c @@ -18,7 +18,8 @@ static int xfs_xattr_get(const struct xattr_handler *handler, struct dentry *unused, - struct inode *inode, const char *name, void *value, size_t size) + struct inode *inode, const char *name, void *value, size_t size, + int flags) { int xflags = handler->flags; struct xfs_inode *ip = XFS_I(inode); diff --git a/include/linux/xattr.h b/include/linux/xattr.h index 6dad031be3c2..e5c191b30818 100644 --- a/include/linux/xattr.h +++ b/include/linux/xattr.h @@ -30,10 +30,10 @@ struct xattr_handler { const char *prefix; int flags; /* fs private flags */ bool (*list)(struct dentry *dentry); - int (*get)(const struct xattr_handler *, struct dentry *dentry, + int (*get)(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, void *buffer, - size_t size); - int (*set)(const struct xattr_handler *, struct dentry *dentry, + size_t size, int flags); + int (*set)(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, const void *buffer, size_t size, int flags); }; @@ -46,7 +46,8 @@ struct xattr { size_t value_len; }; -ssize_t __vfs_getxattr(struct dentry *, struct inode *, const char *, void *, size_t); +ssize_t __vfs_getxattr(struct dentry *, struct inode *, const char *, void *, + size_t, int); ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t); ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size); int __vfs_setxattr(struct dentry *, struct inode *, const char *, const void *, size_t, int); diff --git a/include/uapi/linux/xattr.h b/include/uapi/linux/xattr.h index c1395b5bd432..1216d777d210 100644 --- a/include/uapi/linux/xattr.h +++ b/include/uapi/linux/xattr.h @@ -17,8 +17,9 @@ #if __UAPI_DEF_XATTR #define __USE_KERNEL_XATTR_DEFS -#define XATTR_CREATE 0x1 /* set value, fail if attr already exists */ -#define XATTR_REPLACE 0x2 /* set value, fail if attr does not exist */ +#define XATTR_CREATE 0x1 /* set value, fail if attr already exists */ +#define XATTR_REPLACE 0x2 /* set value, fail if attr does not exist */ +#define XATTR_NOSECURITY 0x4 /* get value, do not involve security check */ #endif /* Namespaces */ diff --git a/mm/shmem.c b/mm/shmem.c index 626d8c74b973..34d3818b4424 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -3206,7 +3206,8 @@ static int shmem_initxattrs(struct inode *inode, static int shmem_xattr_handler_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { struct shmem_inode_info *info = SHMEM_I(inode); diff --git a/net/socket.c b/net/socket.c index 6a9ab7a8b1d2..6b0fea92dd02 100644 --- a/net/socket.c +++ b/net/socket.c @@ -300,7 +300,8 @@ static const struct dentry_operations sockfs_dentry_operations = { static int sockfs_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *suffix, void *value, size_t size) + const char *suffix, void *value, size_t size, + int flags) { if (value) { if (dentry->d_name.len + 1 > size) diff --git a/security/commoncap.c b/security/commoncap.c index f4ee0ae106b2..378a2f66a73d 100644 --- a/security/commoncap.c +++ b/security/commoncap.c @@ -297,7 +297,8 @@ int cap_inode_need_killpriv(struct dentry *dentry) struct inode *inode = d_backing_inode(dentry); int error; - error = __vfs_getxattr(dentry, inode, XATTR_NAME_CAPS, NULL, 0); + error = __vfs_getxattr(dentry, inode, XATTR_NAME_CAPS, NULL, 0, + XATTR_NOSECURITY); return error > 0; } @@ -586,7 +587,8 @@ int get_vfs_caps_from_disk(const struct dentry *dentry, struct cpu_vfs_cap_data fs_ns = inode->i_sb->s_user_ns; size = __vfs_getxattr((struct dentry *)dentry, inode, - XATTR_NAME_CAPS, &data, XATTR_CAPS_SZ); + XATTR_NAME_CAPS, &data, XATTR_CAPS_SZ, + XATTR_NOSECURITY); if (size == -ENODATA || size == -EOPNOTSUPP) /* no data, that's ok */ return -ENODATA; diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c index f9a81b187fae..921c8f2afcaf 100644 --- a/security/integrity/evm/evm_main.c +++ b/security/integrity/evm/evm_main.c @@ -100,7 +100,8 @@ static int evm_find_protected_xattrs(struct dentry *dentry) return -EOPNOTSUPP; list_for_each_entry_rcu(xattr, &evm_config_xattrnames, list) { - error = __vfs_getxattr(dentry, inode, xattr->name, NULL, 0); + error = __vfs_getxattr(dentry, inode, xattr->name, NULL, 0, + XATTR_NOSECURITY); if (error < 0) { if (error == -ENODATA) continue; diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 74dd46de01b6..b0822da0658f 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -552,7 +552,8 @@ static int sb_finish_set_opts(struct super_block *sb) goto out; } - rc = __vfs_getxattr(root, root_inode, XATTR_NAME_SELINUX, NULL, 0); + rc = __vfs_getxattr(root, root_inode, XATTR_NAME_SELINUX, NULL, + 0, XATTR_NOSECURITY); if (rc < 0 && rc != -ENODATA) { if (rc == -EOPNOTSUPP) pr_warn("SELinux: (dev %s, type " @@ -1378,12 +1379,14 @@ static int inode_doinit_use_xattr(struct inode *inode, struct dentry *dentry, return -ENOMEM; context[len] = '\0'; - rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, context, len); + rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, context, len, + XATTR_NOSECURITY); if (rc == -ERANGE) { kfree(context); /* Need a larger buffer. Query for the right size. */ - rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, NULL, 0); + rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, NULL, 0, + XATTR_NOSECURITY); if (rc < 0) return rc; @@ -1394,7 +1397,7 @@ static int inode_doinit_use_xattr(struct inode *inode, struct dentry *dentry, context[len] = '\0'; rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, - context, len); + context, len, XATTR_NOSECURITY); } if (rc < 0) { kfree(context); diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 4c5e5a438f8b..158b35772be1 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -292,7 +292,8 @@ static struct smack_known *smk_fetch(const char *name, struct inode *ip, if (buffer == NULL) return ERR_PTR(-ENOMEM); - rc = __vfs_getxattr(dp, ip, name, buffer, SMK_LONGLABEL); + rc = __vfs_getxattr(dp, ip, name, buffer, SMK_LONGLABEL, + XATTR_NOSECURITY); if (rc < 0) skp = ERR_PTR(rc); else if (rc == 0) @@ -3442,7 +3443,7 @@ static void smack_d_instantiate(struct dentry *opt_dentry, struct inode *inode) } else { rc = __vfs_getxattr(dp, inode, XATTR_NAME_SMACKTRANSMUTE, trattr, - TRANS_TRUE_SIZE); + TRANS_TRUE_SIZE, XATTR_NOSECURITY); if (rc >= 0 && strncmp(trattr, TRANS_TRUE, TRANS_TRUE_SIZE) != 0) rc = -EINVAL; -- 2.22.0.770.g0f2c4a37fd-goog From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark Salyzyn Subject: [PATCH v13 2/5] Add flags option to get xattr method paired to __vfs_getxattr Date: Wed, 31 Jul 2019 09:57:57 -0700 Message-ID: <20190731165803.4755-3-salyzyn@android.com> References: <20190731165803.4755-1-salyzyn@android.com> Mime-Version: 1.0 Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190731165803.4755-1-salyzyn@android.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: cluster-devel-bounces@redhat.com Errors-To: cluster-devel-bounces@redhat.com Content-Type: text/plain; charset="macroman" To: linux-kernel@vger.kernel.org Cc: Latchesar Ionkov , Dave Kleikamp , jfs-discussion@lists.sourceforge.net, Randy Dunlap , linux-doc@vger.kernel.org, Martin Brandenburg , samba-technical@lists.samba.org, Dominique Martinet , Amir Goldstein , Mimi Zohar , James Morris , David Howells , Chris Mason , "David S . Miller" , Andreas Dilger , ocfs2-devel@oss.oracle.com, Eric Paris , netdev@vger.kernel.org, Tyler Hicks , linux-afs@lists.infradead.org, Mike Marshall , linux-xfs@vger.kernel.org, Sage Weil , Jonathan Corbet , Richard Weinberger , Mark QWRkIGEgZmxhZyBvcHRpb24gdG8gZ2V0IHhhdHRyIG1ldGhvZCB0aGF0IGNvdWxkIGhhdmUgYSBi aXQgZmxhZyBvZgpYQVRUUl9OT1NFQ1VSSVRZIHBhc3NlZCB0byBpdC4gIFhBVFRSX05PU0VDVVJJ VFkgaXMgZ2VuZXJhbGx5IHRoZW4Kc2V0IGluIHRoZSBfX3Zmc19nZXR4YXR0ciBwYXRoLgoKVGhp cyBoYW5kbGVzIHRoZSBjYXNlIG9mIGEgdW5pb24gZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBpcyBi ZWluZwpyZXF1ZXN0ZWQgYnkgdGhlIHNlY3VyaXR5IGxheWVyIHRvIHJlcG9ydCBiYWNrIHRoZSBk YXRhIHRoYXQgaXMgdGhlCnRhcmdldCBsYWJlbCBvciBjb250ZXh0IGVtYmVkZGVkIGludG8gd3Jh cHBlZCBmaWxlc3lzdGVtJ3MgeGF0dHIuCgpGb3IgdGhlIHVzZSBjYXNlIHdoZXJlIGFjY2VzcyBp cyB0byBiZSBibG9ja2VkIGJ5IHRoZSBzZWN1cml0eSBsYXllci4KClRoZSBwYXRoIHRoZW4gY291 bGQgYmUgc2VjdXJpdHkoZGVudHJ5KSAtPgpfX3Zmc19nZXR4YXR0cihkZW50cnkuLi5YQVRUUl9O T1NFQ1VJUlRZKSAtPgpoYW5kbGVyLT5nZXQoZGVudHJ5Li4uWEFUVFJfTk9TRUNVUklUWSkgLT4K X192ZnNfZ2V0eGF0dHIobG93ZXJfZGVudHJ5Li4uWEFUVFJfTk9TRUNVSVJUWSkgLT4KbG93ZXJf aGFuZGxlci0+Z2V0KGxvd2VyX2RlbnRyeS4uLlhBVFRSX05PU0VDVUlSVFkpCndoaWNoIHdvdWxk IHJlcG9ydCBiYWNrIHRocm91Z2ggdGhlIGNoYWluIGRhdGEgYW5kIHN1Y2Nlc3MgYXMKZXhwZWN0 ZWQsIGJ1dCB0aGUgbG9nZ2luZyBzZWN1cml0eSBsYXllciBhdCB0aGUgdG9wIHdvdWxkIGhhdmUg dGhlCmRhdGEgdG8gZGV0ZXJtaW5lIHRoZSBhY2Nlc3MgcGVybWlzc2lvbnMgYW5kIHJlcG9ydCBi YWNrIHRoZSB0YXJnZXQKY29udGV4dCB0aGF0IHdhcyBibG9ja2VkLgoKV2l0aG91dCB0aGUgZ2V0 IGhhbmRsZXIgZmxhZywgdGhlIHBhdGggb24gYSB1bmlvbiBmaWxlc3lzdGVtIHdvdWxkIGJlCnRo ZSBlcnJhbnQgc2VjdXJpdHkoZGVudHJ5KSAtPiBfX3Zmc19nZXR4YXR0cihkZW50cnkpIC0+Cmhh bmRsZXItPmdldChkZW50cnkpIC0+IHZmc19nZXR4YXR0cihsb3dlcl9kZW50cnkpIC0+IG5lc3Rl ZCAtPgpzZWN1cml0eShsb3dlcl9kZW50cnksIGxvZyBvZmYpIC0+IGxvd2VyX2hhbmRsZXItPmdl dChsb3dlcl9kZW50cnkpCndoaWNoIHdvdWxkIHJlcG9ydCBiYWNrIHRocm91Z2ggdGhlIGNoYWlu IG5vIGRhdGEsIGFuZCAtRUFDQ0VTLgoKRm9yIHNlbGludXggZm9yIGJvdGggY2FzZXMsIHRoaXMg d291bGQgdHJhbnNsYXRlIHRvIGEgY29ycmVjdGx5CmRldGVybWluZWQgYmxvY2tlZCBhY2Nlc3Mu IEluIHRoZSBmaXJzdCBjb3JyZWN0ZWQgY2FzZSBhIGNvcnJlY3QgYXZjCmxvZyB3b3VsZCBiZSBy ZXBvcnRlZCwgaW4gdGhlIHNlY29uZCBsZWdhY3kgY2FzZSBhbiBpbmNvcnJlY3QgYXZjIGxvZwp3 b3VsZCBiZSByZXBvcnRlZCBhZ2FpbnN0IGFuIHVuaW5pdGlhbGl6ZWQgdTpvYmplY3Rfcjp1bmxh YmVsZWQ6czAKY29udGV4dCBtYWtpbmcgdGhlIGxvZ3MgY29zbWV0aWNhbGx5IHVzZWxlc3MgZm9y IGF1ZGl0MmFsbG93LgoKVGhpcyBwYXRjaCBzZXJpZXMgaXMgaW5lcnQgYW5kIGlzIHRoZSB3aWRl LXNwcmVhZCBhZGRpdGlvbiBvZiB0aGUKZmxhZ3Mgb3B0aW9uIGZvciB4YXR0ciBmdW5jdGlvbnMs IGFuZCBhIHJlcGxhY2VtZW50IG9mIF92ZnNfZ2V0eGF0dHIKd2l0aCBfX3Zmc19nZXR4YXR0cigu Li5YQVRUUl9OT1NFQ1VSSVRZKS4KClNpZ25lZC1vZmYtYnk6IE1hcmsgU2FseXp5biA8c2FseXp5 bkBhbmRyb2lkLmNvbT4KQ2M6IE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KQ2M6 IEpvbmF0aGFuIENvcmJldCA8Y29yYmV0QGx3bi5uZXQ+CkNjOiBWaXZlayBHb3lhbCA8dmdveWFs QHJlZGhhdC5jb20+CkNjOiBFcmljIFcuIEJpZWRlcm1hbiA8ZWJpZWRlcm1AeG1pc3Npb24uY29t PgpDYzogQW1pciBHb2xkc3RlaW4gPGFtaXI3M2lsQGdtYWlsLmNvbT4KQ2M6IFJhbmR5IER1bmxh cCA8cmR1bmxhcEBpbmZyYWRlYWQub3JnPgpDYzogU3RlcGhlbiBTbWFsbGV5IDxzZHNAdHljaG8u bnNhLmdvdj4KQ2M6IGxpbnV4LXVuaW9uZnNAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1kb2NA dmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCkNjOiBrZXJu ZWwtdGVhbUBhbmRyb2lkLmNvbQpDYzogRXJpYyBWYW4gSGVuc2JlcmdlbiA8ZXJpY3ZoQGdtYWls LmNvbT4KQ2M6IExhdGNoZXNhciBJb25rb3YgPGx1Y2hvQGlvbmtvdi5uZXQ+CkNjOiBEb21pbmlx dWUgTWFydGluZXQgPGFzbWFkZXVzQGNvZGV3cmVjay5vcmc+CkNjOiBEYXZpZCBIb3dlbGxzIDxk aG93ZWxsc0ByZWRoYXQuY29tPgpDYzogQ2hyaXMgTWFzb24gPGNsbUBmYi5jb20+CkNjOiBKb3Nl ZiBCYWNpayA8am9zZWZAdG94aWNwYW5kYS5jb20+CkNjOiBEYXZpZCBTdGVyYmEgPGRzdGVyYmFA c3VzZS5jb20+CkNjOiBKZWZmIExheXRvbiA8amxheXRvbkBrZXJuZWwub3JnPgpDYzogU2FnZSBX ZWlsIDxzYWdlQHJlZGhhdC5jb20+CkNjOiBJbHlhIERyeW9tb3YgPGlkcnlvbW92QGdtYWlsLmNv bT4KQ2M6IFN0ZXZlIEZyZW5jaCA8c2ZyZW5jaEBzYW1iYS5vcmc+CkNjOiBUeWxlciBIaWNrcyA8 dHloaWNrc0BjYW5vbmljYWwuY29tPgpDYzogSmFuIEthcmEgPGphY2tAc3VzZS5jb20+CkNjOiBU aGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgpDYzogQW5kcmVhcyBEaWxnZXIgPGFkaWxnZXIu a2VybmVsQGRpbGdlci5jYT4KQ2M6IEphZWdldWsgS2ltIDxqYWVnZXVrQGtlcm5lbC5vcmc+CkNj OiBDaGFvIFl1IDx5dWNoYW8wQGh1YXdlaS5jb20+CkNjOiBCb2IgUGV0ZXJzb24gPHJwZXRlcnNv QHJlZGhhdC5jb20+CkNjOiBBbmRyZWFzIEdydWVuYmFjaGVyIDxhZ3J1ZW5iYUByZWRoYXQuY29t PgpDYzogRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgpDYzogUmljaGFyZCBX ZWluYmVyZ2VyIDxyaWNoYXJkQG5vZC5hdD4KQ2M6IERhdmUgS2xlaWthbXAgPHNoYWdneUBrZXJu ZWwub3JnPgpDYzogR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9y Zz4KQ2M6IFRlanVuIEhlbyA8dGpAa2VybmVsLm9yZz4KQ2M6IFRyb25kIE15a2xlYnVzdCA8dHJv bmQubXlrbGVidXN0QGhhbW1lcnNwYWNlLmNvbT4KQ2M6IEFubmEgU2NodW1ha2VyIDxhbm5hLnNj aHVtYWtlckBuZXRhcHAuY29tPgpDYzogTWFyayBGYXNoZWggPG1hcmtAZmFzaGVoLmNvbT4KQ2M6 IEpvZWwgQmVja2VyIDxqbGJlY0BldmlscGxhbi5vcmc+CkNjOiBKb3NlcGggUWkgPGpvc2VwaC5x aUBsaW51eC5hbGliYWJhLmNvbT4KQ2M6IE1pa2UgTWFyc2hhbGwgPGh1YmNhcEBvbW5pYm9uZC5j b20+CkNjOiBNYXJ0aW4gQnJhbmRlbmJ1cmcgPG1hcnRpbkBvbW5pYm9uZC5jb20+CkNjOiBBbGV4 YW5kZXIgVmlybyA8dmlyb0B6ZW5pdi5saW51eC5vcmcudWs+CkNjOiBQaGlsbGlwIExvdWdoZXIg PHBoaWxsaXBAc3F1YXNoZnMub3JnLnVrPgpDYzogRGFycmljayBKLiBXb25nIDxkYXJyaWNrLndv bmdAb3JhY2xlLmNvbT4KQ2M6IGxpbnV4LXhmc0B2Z2VyLmtlcm5lbC5vcmcKQ2M6IEh1Z2ggRGlj a2lucyA8aHVnaGRAZ29vZ2xlLmNvbT4KQ2M6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1s b2Z0Lm5ldD4KQ2M6IEFuZHJldyBNb3J0b24gPGFrcG1AbGludXgtZm91bmRhdGlvbi5vcmc+CkNj OiBNYXRoaWV1IE1hbGF0ZXJyZSA8bWFsYXRAZGViaWFuLm9yZz4KQ2M6IEVybmVzdG8gQS4gRmVy bsOhbmRleiA8ZXJuZXN0by5tbmQuZmVybmFuZGV6QGdtYWlsLmNvbT4KQ2M6IFZ5YWNoZXNsYXYg RHViZXlrbyA8c2xhdmFAZHViZXlrby5jb20+CkNjOiB2OWZzLWRldmVsb3BlckBsaXN0cy5zb3Vy Y2Vmb3JnZS5uZXQKQ2M6IGxpbnV4LWFmc0BsaXN0cy5pbmZyYWRlYWQub3JnCkNjOiBsaW51eC1i dHJmc0B2Z2VyLmtlcm5lbC5vcmcKQ2M6IGNlcGgtZGV2ZWxAdmdlci5rZXJuZWwub3JnCkNjOiBs aW51eC1jaWZzQHZnZXIua2VybmVsLm9yZwpDYzogc2FtYmEtdGVjaG5pY2FsQGxpc3RzLnNhbWJh Lm9yZwpDYzogZWNyeXB0ZnNAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1leHQ0QHZnZXIua2Vy bmVsLm9yZwpDYzogbGludXgtZjJmcy1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKQ2M6IGxp bnV4LWZzZGV2ZWxAdmdlci5rZXJuZWwub3JnCkNjOiBjbHVzdGVyLWRldmVsQHJlZGhhdC5jb20K Q2M6IGxpbnV4LW10ZEBsaXN0cy5pbmZyYWRlYWQub3JnCkNjOiBqZnMtZGlzY3Vzc2lvbkBsaXN0 cy5zb3VyY2Vmb3JnZS5uZXQKQ2M6IGxpbnV4LW5mc0B2Z2VyLmtlcm5lbC5vcmcKQ2M6IG9jZnMy LWRldmVsQG9zcy5vcmFjbGUuY29tCkNjOiBkZXZlbEBsaXN0cy5vcmFuZ2Vmcy5vcmcKQ2M6IHJl aXNlcmZzLWRldmVsQHZnZXIua2VybmVsLm9yZwpDYzogbGludXgtbW1Aa3ZhY2sub3JnCkNjOiBu ZXRkZXZAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1zZWN1cml0eS1tb2R1bGVAdmdlci5rZXJu ZWwub3JnCkNjOiBzdGFibGVAdmdlci5rZXJuZWwub3JnICMgNC40LCA0LjksIDQuMTQgJiA0LjE5 Ci0tLQp2MTMgLSBhZGRlZCBmbGFncyB0byBfX3Zmc19nZXR4YXR0ciBjYWxsLCBhbmQgbW92ZWQg YWxsIHRoZSBzZWN1cml0eQogICAgICBjb2RlIGZyb20gdmZzX2dldHhhdHRyIGludG8gaXQuCgp2 MTIgLSBBZGRlZCBiYWNrIHRvIHBhdGNoIHNlcmllcyBhcyBnZXQgeGF0dHIgd2l0aCBmbGFnIG9w dGlvbi4KCnYxMSAtIFNxdWFzaGVkIG91dCBvZiBwYXRjaCBzZXJpZXMgYW5kIHJlcGxhY2VkIHdp dGggcGVyLXRocmVhZCBmbGFnCiAgICAgIHNvbHV0aW9uLgoKdjEwIC0gQWRkZWQgdG8gcGF0Y2gg c2VyaWVzIGFzIF9fZ2V0IHhhdHRyIG1ldGhvZC4KLS0tCiBmcy85cC9hY2wuYyAgICAgICAgICAg ICAgICAgICAgICAgfCAgMyArKy0KIGZzLzlwL3hhdHRyLmMgICAgICAgICAgICAgICAgICAgICB8 ICAzICsrLQogZnMvYWZzL3hhdHRyLmMgICAgICAgICAgICAgICAgICAgIHwgIDYgKysrLS0tCiBm cy9idHJmcy94YXR0ci5jICAgICAgICAgICAgICAgICAgfCAgMyArKy0KIGZzL2NlcGgveGF0dHIu YyAgICAgICAgICAgICAgICAgICB8ICAzICsrLQogZnMvY2lmcy94YXR0ci5jICAgICAgICAgICAg ICAgICAgIHwgIDIgKy0KIGZzL2VjcnlwdGZzL2lub2RlLmMgICAgICAgICAgICAgICB8ICA2ICsr KystLQogZnMvZWNyeXB0ZnMvbW1hcC5jICAgICAgICAgICAgICAgIHwgIDIgKy0KIGZzL2V4dDIv eGF0dHJfdHJ1c3RlZC5jICAgICAgICAgICB8ICAyICstCiBmcy9leHQyL3hhdHRyX3VzZXIuYyAg ICAgICAgICAgICAgfCAgMiArLQogZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jICAgICAgICAgIHwg IDIgKy0KIGZzL2V4dDQveGF0dHJfdHJ1c3RlZC5jICAgICAgICAgICB8ICAyICstCiBmcy9leHQ0 L3hhdHRyX3VzZXIuYyAgICAgICAgICAgICAgfCAgMiArLQogZnMvZjJmcy94YXR0ci5jICAgICAg ICAgICAgICAgICAgIHwgIDQgKystLQogZnMvZnVzZS94YXR0ci5jICAgICAgICAgICAgICAgICAg IHwgIDQgKystLQogZnMvZ2ZzMi94YXR0ci5jICAgICAgICAgICAgICAgICAgIHwgIDMgKystCiBm cy9oZnMvYXR0ci5jICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQogZnMvaGZzcGx1cy94YXR0 ci5jICAgICAgICAgICAgICAgIHwgIDMgKystCiBmcy9oZnNwbHVzL3hhdHRyX3RydXN0ZWQuYyAg ICAgICAgfCAgMyArKy0KIGZzL2hmc3BsdXMveGF0dHJfdXNlci5jICAgICAgICAgICB8ICAzICsr LQogZnMvamZmczIvc2VjdXJpdHkuYyAgICAgICAgICAgICAgIHwgIDMgKystCiBmcy9qZmZzMi94 YXR0cl90cnVzdGVkLmMgICAgICAgICAgfCAgMyArKy0KIGZzL2pmZnMyL3hhdHRyX3VzZXIuYyAg ICAgICAgICAgICB8ICAzICsrLQogZnMvamZzL3hhdHRyLmMgICAgICAgICAgICAgICAgICAgIHwg IDUgKysrLS0KIGZzL2tlcm5mcy9pbm9kZS5jICAgICAgICAgICAgICAgICB8ICAzICsrLQogZnMv bmZzL25mczRwcm9jLmMgICAgICAgICAgICAgICAgIHwgIDYgKysrKy0tCiBmcy9vY2ZzMi94YXR0 ci5jICAgICAgICAgICAgICAgICAgfCAgOSArKysrKy0tLQogZnMvb3JhbmdlZnMveGF0dHIuYyAg ICAgICAgICAgICAgIHwgIDMgKystCiBmcy9vdmVybGF5ZnMvc3VwZXIuYyAgICAgICAgICAgICAg fCAgOCArKysrLS0tCiBmcy9wb3NpeF9hY2wuYyAgICAgICAgICAgICAgICAgICAgfCAgMiArLQog ZnMvcmVpc2VyZnMveGF0dHJfc2VjdXJpdHkuYyAgICAgIHwgIDMgKystCiBmcy9yZWlzZXJmcy94 YXR0cl90cnVzdGVkLmMgICAgICAgfCAgMyArKy0KIGZzL3JlaXNlcmZzL3hhdHRyX3VzZXIuYyAg ICAgICAgICB8ICAzICsrLQogZnMvc3F1YXNoZnMveGF0dHIuYyAgICAgICAgICAgICAgIHwgIDIg Ky0KIGZzL3hhdHRyLmMgICAgICAgICAgICAgICAgICAgICAgICB8IDM2ICsrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tLS0KIGZzL3hmcy94ZnNfeGF0dHIuYyAgICAgICAgICAgICAgICB8ICAz ICsrLQogaW5jbHVkZS9saW51eC94YXR0ci5oICAgICAgICAgICAgIHwgIDkgKysrKy0tLS0KIGlu Y2x1ZGUvdWFwaS9saW51eC94YXR0ci5oICAgICAgICB8ICA1ICsrKy0tCiBtbS9zaG1lbS5jICAg ICAgICAgICAgICAgICAgICAgICAgfCAgMyArKy0KIG5ldC9zb2NrZXQuYyAgICAgICAgICAgICAg ICAgICAgICB8ICAzICsrLQogc2VjdXJpdHkvY29tbW9uY2FwLmMgICAgICAgICAgICAgIHwgIDYg KysrKy0tCiBzZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMgfCAgMyArKy0KIHNlY3Vy aXR5L3NlbGludXgvaG9va3MuYyAgICAgICAgICB8IDExICsrKysrKy0tLS0KIHNlY3VyaXR5L3Nt YWNrL3NtYWNrX2xzbS5jICAgICAgICB8ICA1ICsrKy0tCiA0NCBmaWxlcyBjaGFuZ2VkLCAxMTkg aW5zZXJ0aW9ucygrKSwgODEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZnMvOXAvYWNsLmMg Yi9mcy85cC9hY2wuYwppbmRleCA2MjYxNzE5ZjZmMmEuLmNiMTRlOGIzMTJiYyAxMDA2NDQKLS0t IGEvZnMvOXAvYWNsLmMKKysrIGIvZnMvOXAvYWNsLmMKQEAgLTIxNCw3ICsyMTQsOCBAQCBpbnQg djlmc19hY2xfbW9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCAqbW9kZXAsCiAKIHN0YXRp YyBpbnQgdjlmc194YXR0cl9nZXRfYWNsKGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5k bGVyLAogCQkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2Rl LAotCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkK KwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisJ CQkgICAgICBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsK IAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CmRpZmYgLS1naXQgYS9mcy85cC94YXR0ci5jIGIvZnMv OXAveGF0dHIuYwppbmRleCBhYzhmZjhjYTRjMTEuLjVjZmE3NzI0NTJmZCAxMDA2NDQKLS0tIGEv ZnMvOXAveGF0dHIuYworKysgYi9mcy85cC94YXR0ci5jCkBAIC0xMzksNyArMTM5LDggQEAgc3Np emVfdCB2OWZzX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwg c2l6ZV90IGJ1ZmZlcl9zaXplKQogCiBzdGF0aWMgaW50IHY5ZnNfeGF0dHJfaGFuZGxlcl9nZXQo Y29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkJICBzdHJ1Y3QgZGVudHJ5 ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICBjb25zdCBjaGFyICpuYW1lLCB2 b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorCQkJCSAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAq YnVmZmVyLCBzaXplX3Qgc2l6ZSwKKwkJCQkgIGludCBmbGFncykKIHsKIAljb25zdCBjaGFyICpm dWxsX25hbWUgPSB4YXR0cl9mdWxsX25hbWUoaGFuZGxlciwgbmFtZSk7CiAKZGlmZiAtLWdpdCBh L2ZzL2Fmcy94YXR0ci5jIGIvZnMvYWZzL3hhdHRyLmMKaW5kZXggNTU1MmQwMzQwOTBhLi5lNjUw OWMyMWYwOGEgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy94YXR0ci5jCisrKyBiL2ZzL2Fmcy94YXR0ci5j CkBAIC0zMzQsNyArMzM0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGFm c194YXR0cl95ZnNfaGFuZGxlciA9IHsKIHN0YXRpYyBpbnQgYWZzX3hhdHRyX2dldF9jZWxsKGNv bnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJICAgICAgc3RydWN0IGRlbnRy eSAqZGVudHJ5LAogCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFt ZSwKLQkJCSAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCisJCQkgICAgICB2b2lkICpi dWZmZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGFmc192bm9kZSAqdm5v ZGUgPSBBRlNfRlNfSShpbm9kZSk7CiAJc3RydWN0IGFmc19jZWxsICpjZWxsID0gdm5vZGUtPnZv bHVtZS0+Y2VsbDsKQEAgLTM2MSw3ICszNjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHhhdHRy X2hhbmRsZXIgYWZzX3hhdHRyX2Fmc19jZWxsX2hhbmRsZXIgPSB7CiBzdGF0aWMgaW50IGFmc194 YXR0cl9nZXRfZmlkKGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJICAg ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNv bnN0IGNoYXIgKm5hbWUsCi0JCQkgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCisJCQkg ICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgYWZz X3Zub2RlICp2bm9kZSA9IEFGU19GU19JKGlub2RlKTsKIAljaGFyIHRleHRbMTYgKyAxICsgMjQg KyAxICsgOCArIDFdOwpAQCAtMzk3LDcgKzM5Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeGF0 dHJfaGFuZGxlciBhZnNfeGF0dHJfYWZzX2ZpZF9oYW5kbGVyID0gewogc3RhdGljIGludCBhZnNf eGF0dHJfZ2V0X3ZvbHVtZShjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwKIAkJ CSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5v ZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXpl KQorCQkJICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCXN0 cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koaW5vZGUpOwogCWNvbnN0IGNoYXIgKnZv bG5hbWUgPSB2bm9kZS0+dm9sdW1lLT5uYW1lOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMveGF0dHIu YyBiL2ZzL2J0cmZzL3hhdHRyLmMKaW5kZXggOTVkOWFlYmZmMmM0Li4xZTUyMmUxNDUzNDQgMTAw NjQ0Ci0tLSBhL2ZzL2J0cmZzL3hhdHRyLmMKKysrIGIvZnMvYnRyZnMveGF0dHIuYwpAQCAtMzUz LDcgKzM1Myw4IEBAIHNzaXplX3QgYnRyZnNfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRy eSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKIAogc3RhdGljIGludCBidHJmc194YXR0cl9o YW5kbGVyX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwKIAkJCQkgICBz dHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgY29uc3Qg Y2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJCQkgICBjb25zdCBjaGFy ICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJCSAgIGludCBmbGFncykKIHsK IAluYW1lID0geGF0dHJfZnVsbF9uYW1lKGhhbmRsZXIsIG5hbWUpOwogCXJldHVybiBidHJmc19n ZXR4YXR0cihpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgv eGF0dHIuYyBiL2ZzL2NlcGgveGF0dHIuYwppbmRleCAzN2I0NThhOWFmM2EuLmVkYjdlYjlhZTgz ZSAxMDA2NDQKLS0tIGEvZnMvY2VwaC94YXR0ci5jCisrKyBiL2ZzL2NlcGgveGF0dHIuYwpAQCAt MTE3MSw3ICsxMTcxLDggQEAgaW50IF9fY2VwaF9zZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2Rl LCBjb25zdCBjaGFyICpuYW1lLAogCiBzdGF0aWMgaW50IGNlcGhfZ2V0X3hhdHRyX2hhbmRsZXIo Y29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkJICBzdHJ1Y3QgZGVudHJ5 ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICBjb25zdCBjaGFyICpuYW1lLCB2 b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpCisJCQkJICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2 YWx1ZSwgc2l6ZV90IHNpemUsCisJCQkJICBpbnQgZmxhZ3MpCiB7CiAJaWYgKCFjZXBoX2lzX3Zh bGlkX3hhdHRyKG5hbWUpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYgLS1naXQgYS9mcy9j aWZzL3hhdHRyLmMgYi9mcy9jaWZzL3hhdHRyLmMKaW5kZXggOTA3NjE1MDc1OGQ4Li43ZjcxYzA2 Y2U2MzEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMveGF0dHIuYworKysgYi9mcy9jaWZzL3hhdHRyLmMK QEAgLTE5OSw3ICsxOTksNyBAQCBzdGF0aWMgaW50IGNpZnNfY3JlYXRpb25fdGltZV9nZXQoc3Ry dWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCiBzdGF0aWMgaW50IGNp ZnNfeGF0dHJfZ2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJICBz dHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgIGNvbnN0IGNo YXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKKwkJCSAgY29uc3QgY2hhciAqbmFt ZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJc3NpemVfdCByYyA9 IC1FT1BOT1RTVVBQOwogCXVuc2lnbmVkIGludCB4aWQ7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRm cy9pbm9kZS5jIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwppbmRleCAxODQyNmY0ODU1ZjEuLmM3MTBj NzUzMzcyOSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvaW5vZGUuYworKysgYi9mcy9lY3J5cHRm cy9pbm9kZS5jCkBAIC0xMDE4LDcgKzEwMTgsOCBAQCBlY3J5cHRmc19nZXR4YXR0cl9sb3dlcihz dHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnksIHN0cnVjdCBpbm9kZSAqbG93ZXJfaW5vZGUsCiAJ CWdvdG8gb3V0OwogCX0KIAlpbm9kZV9sb2NrKGxvd2VyX2lub2RlKTsKLQlyYyA9IF9fdmZzX2dl dHhhdHRyKGxvd2VyX2RlbnRyeSwgbG93ZXJfaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplKTsKKwly YyA9IF9fdmZzX2dldHhhdHRyKGxvd2VyX2RlbnRyeSwgbG93ZXJfaW5vZGUsIG5hbWUsIHZhbHVl LCBzaXplLAorCQkJICAgIFhBVFRSX05PU0VDVVJJVFkpOwogCWlub2RlX3VubG9jayhsb3dlcl9p bm9kZSk7CiBvdXQ6CiAJcmV0dXJuIHJjOwpAQCAtMTEwMyw3ICsxMTA0LDggQEAgY29uc3Qgc3Ry dWN0IGlub2RlX29wZXJhdGlvbnMgZWNyeXB0ZnNfbWFpbl9pb3BzID0gewogCiBzdGF0aWMgaW50 IGVjcnlwdGZzX3hhdHRyX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwK IAkJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJ CSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCisJCQkg ICAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJICAg ICAgaW50IGZsYWdzKQogewogCXJldHVybiBlY3J5cHRmc19nZXR4YXR0cihkZW50cnksIGlub2Rl LCBuYW1lLCBidWZmZXIsIHNpemUpOwogfQpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvbW1hcC5j IGIvZnMvZWNyeXB0ZnMvbW1hcC5jCmluZGV4IGNmZmEwYzFlYzgyOS4uMjM2MmJlM2UzYjRkIDEw MDY0NAotLS0gYS9mcy9lY3J5cHRmcy9tbWFwLmMKKysrIGIvZnMvZWNyeXB0ZnMvbW1hcC5jCkBA IC00MjIsNyArNDIyLDcgQEAgc3RhdGljIGludCBlY3J5cHRmc193cml0ZV9pbm9kZV9zaXplX3Rv X3hhdHRyKHN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfaW5vZGUpCiAJfQogCWlub2RlX2xvY2sobG93 ZXJfaW5vZGUpOwogCXNpemUgPSBfX3Zmc19nZXR4YXR0cihsb3dlcl9kZW50cnksIGxvd2VyX2lu b2RlLCBFQ1JZUFRGU19YQVRUUl9OQU1FLAotCQkJICAgICAgeGF0dHJfdmlydCwgUEFHRV9TSVpF KTsKKwkJCSAgICAgIHhhdHRyX3ZpcnQsIFBBR0VfU0laRSwgWEFUVFJfTk9TRUNVUklUWSk7CiAJ aWYgKHNpemUgPCAwKQogCQlzaXplID0gODsKIAlwdXRfdW5hbGlnbmVkX2JlNjQoaV9zaXplX3Jl YWQoZWNyeXB0ZnNfaW5vZGUpLCB4YXR0cl92aXJ0KTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIveGF0 dHJfdHJ1c3RlZC5jIGIvZnMvZXh0Mi94YXR0cl90cnVzdGVkLmMKaW5kZXggNDlhZGQxMTA3ODUw Li44ZDMxMzY2NGYwZmEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIveGF0dHJfdHJ1c3RlZC5jCisrKyBi L2ZzL2V4dDIveGF0dHJfdHJ1c3RlZC5jCkBAIC0xOCw3ICsxOCw3IEBAIGV4dDJfeGF0dHJfdHJ1 c3RlZF9saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHN0YXRpYyBpbnQKIGV4dDJfeGF0dHJf dHJ1c3RlZF9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCSAgICAg ICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCSAgICAgICBj b25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorCQkgICAgICAgY29u c3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewog CXJldHVybiBleHQyX3hhdHRyX2dldChpbm9kZSwgRVhUMl9YQVRUUl9JTkRFWF9UUlVTVEVELCBu YW1lLAogCQkJICAgICAgYnVmZmVyLCBzaXplKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIveGF0dHJf dXNlci5jIGIvZnMvZXh0Mi94YXR0cl91c2VyLmMKaW5kZXggYzI0M2EzYjRkNjlkLi43MTJiN2M5 NWNjNjQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIveGF0dHJfdXNlci5jCisrKyBiL2ZzL2V4dDIveGF0 dHJfdXNlci5jCkBAIC0yMCw3ICsyMCw3IEBAIGV4dDJfeGF0dHJfdXNlcl9saXN0KHN0cnVjdCBk ZW50cnkgKmRlbnRyeSkKIHN0YXRpYyBpbnQKIGV4dDJfeGF0dHJfdXNlcl9nZXQoY29uc3Qgc3Ry dWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCSAgICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQs IHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCSAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZm ZXIsIHNpemVfdCBzaXplKQorCQkgICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBz aXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCWlmICghdGVzdF9vcHQoaW5vZGUtPmlfc2IsIFhB VFRSX1VTRVIpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3hh dHRyX3NlY3VyaXR5LmMgYi9mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMKaW5kZXggMTk3YTlkOGEx NWVmLi41MGZiNzEzOTNmYjYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYwor KysgYi9mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMKQEAgLTE1LDcgKzE1LDcgQEAKIHN0YXRpYyBp bnQKIGV4dDRfeGF0dHJfc2VjdXJpdHlfZ2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpo YW5kbGVyLAogCQkJc3RydWN0IGRlbnRyeSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAot CQkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJCWNvbnN0 IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKIAly ZXR1cm4gZXh0NF94YXR0cl9nZXQoaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfU0VDVVJJVFksCiAJ CQkgICAgICBuYW1lLCBidWZmZXIsIHNpemUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0cl90 cnVzdGVkLmMgYi9mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYwppbmRleCBlOTM4OWU1ZDc1YzMuLjY0 YmQ4Zjg2YzFmMSAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0cl90cnVzdGVkLmMKKysrIGIvZnMv ZXh0NC94YXR0cl90cnVzdGVkLmMKQEAgLTIyLDcgKzIyLDcgQEAgZXh0NF94YXR0cl90cnVzdGVk X2xpc3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogc3RhdGljIGludAogZXh0NF94YXR0cl90cnVz dGVkX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwKIAkJICAgICAgIHN0 cnVjdCBkZW50cnkgKnVudXNlZCwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJICAgICAgIGNvbnN0 IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCisJCSAgICAgICBjb25zdCBj aGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJcmV0 dXJuIGV4dDRfeGF0dHJfZ2V0KGlub2RlLCBFWFQ0X1hBVFRSX0lOREVYX1RSVVNURUQsCiAJCQkg ICAgICBuYW1lLCBidWZmZXIsIHNpemUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0cl91c2Vy LmMgYi9mcy9leHQ0L3hhdHRyX3VzZXIuYwppbmRleCBkNDU0NjE4NGIzNGIuLmI3MzAxMzczODIw ZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0cl91c2VyLmMKKysrIGIvZnMvZXh0NC94YXR0cl91 c2VyLmMKQEAgLTIxLDcgKzIxLDcgQEAgZXh0NF94YXR0cl91c2VyX2xpc3Qoc3RydWN0IGRlbnRy eSAqZGVudHJ5KQogc3RhdGljIGludAogZXh0NF94YXR0cl91c2VyX2dldChjb25zdCBzdHJ1Y3Qg eGF0dHJfaGFuZGxlciAqaGFuZGxlciwKIAkJICAgIHN0cnVjdCBkZW50cnkgKnVudXNlZCwgc3Ry dWN0IGlub2RlICppbm9kZSwKLQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwg c2l6ZV90IHNpemUpCisJCSAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVf dCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJaWYgKCF0ZXN0X29wdChpbm9kZS0+aV9zYiwgWEFUVFJf VVNFUikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2ZzL2YyZnMveGF0dHIu YyBiL2ZzL2YyZnMveGF0dHIuYwppbmRleCBiMzJjNDU2MjE2NzkuLjc2NTU5ZGE4ZGZiYSAxMDA2 NDQKLS0tIGEvZnMvZjJmcy94YXR0ci5jCisrKyBiL2ZzL2YyZnMveGF0dHIuYwpAQCAtMjQsNyAr MjQsNyBAQAogCiBzdGF0aWMgaW50IGYyZnNfeGF0dHJfZ2VuZXJpY19nZXQoY29uc3Qgc3RydWN0 IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCXN0cnVjdCBkZW50cnkgKnVudXNlZCwgc3RydWN0 IGlub2RlICppbm9kZSwKLQkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qg c2l6ZSkKKwkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50 IGZsYWdzKQogewogCXN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSA9IEYyRlNfU0IoaW5vZGUtPmlf c2IpOwogCkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBib29sIGYyZnNfeGF0dHJfdHJ1c3RlZF9s aXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAogc3RhdGljIGludCBmMmZzX3hhdHRyX2Fkdmlz ZV9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCXN0cnVjdCBkZW50 cnkgKnVudXNlZCwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJY29uc3QgY2hhciAqbmFtZSwgdm9p ZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVy LCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCWlmIChidWZmZXIpCiAJCSooKGNoYXIgKili dWZmZXIpID0gRjJGU19JKGlub2RlKS0+aV9hZHZpc2U7CmRpZmYgLS1naXQgYS9mcy9mdXNlL3hh dHRyLmMgYi9mcy9mdXNlL3hhdHRyLmMKaW5kZXggNDMzNzE3NjQwZjc4Li5kMWVmNzgwODMwNGUg MTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UveGF0dHIuYworKysgYi9mcy9mdXNlL3hhdHRyLmMKQEAgLTE3 Niw3ICsxNzYsNyBAQCBpbnQgZnVzZV9yZW1vdmV4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBj b25zdCBjaGFyICpuYW1lKQogCiBzdGF0aWMgaW50IGZ1c2VfeGF0dHJfZ2V0KGNvbnN0IHN0cnVj dCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3Ry dWN0IGlub2RlICppbm9kZSwKLQkJCSBjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwgc2l6 ZV90IHNpemUpCisJCQkgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXpl LCBpbnQgZmxhZ3MpCiB7CiAJcmV0dXJuIGZ1c2VfZ2V0eGF0dHIoaW5vZGUsIG5hbWUsIHZhbHVl LCBzaXplKTsKIH0KQEAgLTE5OSw3ICsxOTksNyBAQCBzdGF0aWMgYm9vbCBub194YXR0cl9saXN0 KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAogc3RhdGljIGludCBub194YXR0cl9nZXQoY29uc3Qg c3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnks IHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQljb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwg c2l6ZV90IHNpemUpCisJCQljb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNp emUsIGludCBmbGFncykKIHsKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CmRpZmYgLS1naXQgYS9m cy9nZnMyL3hhdHRyLmMgYi9mcy9nZnMyL3hhdHRyLmMKaW5kZXggYmJlNTkzZDE2YmVhLi5hOWRi MDY3YTk5YzEgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIveGF0dHIuYworKysgYi9mcy9nZnMyL3hhdHRy LmMKQEAgLTU4OCw3ICs1ODgsOCBAQCBzdGF0aWMgaW50IF9fZ2ZzMl94YXR0cl9nZXQoc3RydWN0 IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKIAogc3RhdGljIGludCBnZnMyX3hhdHRy X2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwKIAkJCSAgc3RydWN0IGRl bnRyeSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICBjb25zdCBjaGFyICpuYW1l LCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorCQkJICBjb25zdCBjaGFyICpuYW1lLCB2b2lk ICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJICBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGdmczJf aW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7CmRpZmYg LS1naXQgYS9mcy9oZnMvYXR0ci5jIGIvZnMvaGZzL2F0dHIuYwppbmRleCA3NGZhNjI2NDMxMzYu LjA4MjIyYTljNWQzMSAxMDA2NDQKLS0tIGEvZnMvaGZzL2F0dHIuYworKysgYi9mcy9oZnMvYXR0 ci5jCkBAIC0xMTUsNyArMTE1LDcgQEAgc3RhdGljIHNzaXplX3QgX19oZnNfZ2V0eGF0dHIoc3Ry dWN0IGlub2RlICppbm9kZSwgZW51bSBoZnNfeGF0dHJfdHlwZSB0eXBlLAogCiBzdGF0aWMgaW50 IGhmc194YXR0cl9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkg c3RydWN0IGRlbnRyeSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJIGNvbnN0IGNo YXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKKwkJCSBjb25zdCBjaGFyICpuYW1l LCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKIAlyZXR1cm4gX19oZnNf Z2V0eGF0dHIoaW5vZGUsIGhhbmRsZXItPmZsYWdzLCB2YWx1ZSwgc2l6ZSk7CiB9CmRpZmYgLS1n aXQgYS9mcy9oZnNwbHVzL3hhdHRyLmMgYi9mcy9oZnNwbHVzL3hhdHRyLmMKaW5kZXggYmIwYjI3 ZDg4ZTUwLi4zODFjMmFhZWRiYzggMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMveGF0dHIuYworKysg Yi9mcy9oZnNwbHVzL3hhdHRyLmMKQEAgLTgzOSw3ICs4MzksOCBAQCBzdGF0aWMgaW50IGhmc3Bs dXNfcmVtb3ZleGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSkKIAog c3RhdGljIGludCBoZnNwbHVzX29zeF9nZXR4YXR0cihjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxl ciAqaGFuZGxlciwKIAkJCQlzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5v ZGUsCi0JCQkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJ CQljb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJCWludCBm bGFncykKIHsKIAkvKgogCSAqIERvbid0IGFsbG93IHJldHJpZXZpbmcgcHJvcGVybHkgcHJlZml4 ZWQgYXR0cmlidXRlcwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy94YXR0cl90cnVzdGVkLmMgYi9m cy9oZnNwbHVzL3hhdHRyX3RydXN0ZWQuYwppbmRleCBmYmFkOTFlMWRhZGEuLjU0ZDkyNjMxNGY4 YyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy94YXR0cl90cnVzdGVkLmMKKysrIGIvZnMvaGZzcGx1 cy94YXR0cl90cnVzdGVkLmMKQEAgLTE0LDcgKzE0LDggQEAKIAogc3RhdGljIGludCBoZnNwbHVz X3RydXN0ZWRfZ2V0eGF0dHIoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJ CQkJICAgIHN0cnVjdCBkZW50cnkgKnVudXNlZCwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkg ICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJCQkgICAg Y29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAorCQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50 IGZsYWdzKQogewogCXJldHVybiBoZnNwbHVzX2dldHhhdHRyKGlub2RlLCBuYW1lLCBidWZmZXIs IHNpemUsCiAJCQkJWEFUVFJfVFJVU1RFRF9QUkVGSVgsCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVz L3hhdHRyX3VzZXIuYyBiL2ZzL2hmc3BsdXMveGF0dHJfdXNlci5jCmluZGV4IDc0ZDE5ZmFmMjU1 ZS4uNGQyYjFmZmZmODg3IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL3hhdHRyX3VzZXIuYworKysg Yi9mcy9oZnNwbHVzL3hhdHRyX3VzZXIuYwpAQCAtMTQsNyArMTQsOCBAQAogCiBzdGF0aWMgaW50 IGhmc3BsdXNfdXNlcl9nZXR4YXR0cihjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxl ciwKIAkJCQkgc3RydWN0IGRlbnRyeSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJ CSBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorCQkJCSBjb25z dCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJCSBpbnQgZmxhZ3Mp CiB7CiAKIAlyZXR1cm4gaGZzcGx1c19nZXR4YXR0cihpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXpl LApkaWZmIC0tZ2l0IGEvZnMvamZmczIvc2VjdXJpdHkuYyBiL2ZzL2pmZnMyL3NlY3VyaXR5LmMK aW5kZXggYzIzMzJlMzBmMjE4Li5lNmY0MmZlNDM1YWYgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3Nl Y3VyaXR5LmMKKysrIGIvZnMvamZmczIvc2VjdXJpdHkuYwpAQCAtNTAsNyArNTAsOCBAQCBpbnQg amZmczJfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRp ciwKIC8qIC0tLS0gWEFUVFIgSGFuZGxlciBmb3IgInNlY3VyaXR5LioiIC0tLS0tLS0tLS0tLS0t LS0tICovCiBzdGF0aWMgaW50IGpmZnMyX3NlY3VyaXR5X2dldHhhdHRyKGNvbnN0IHN0cnVjdCB4 YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJCSAgIHN0cnVjdCBkZW50cnkgKnVudXNlZCwgc3Ry dWN0IGlub2RlICppbm9kZSwKLQkJCQkgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIs IHNpemVfdCBzaXplKQorCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6 ZV90IHNpemUsCisJCQkJICAgaW50IGZsYWdzKQogewogCXJldHVybiBkb19qZmZzMl9nZXR4YXR0 cihpbm9kZSwgSkZGUzJfWFBSRUZJWF9TRUNVUklUWSwKIAkJCQkgbmFtZSwgYnVmZmVyLCBzaXpl KTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3hhdHRyX3RydXN0ZWQuYyBiL2ZzL2pmZnMyL3hhdHRy X3RydXN0ZWQuYwppbmRleCA1ZDYwMzA4MjZjNTIuLjlkY2NhYWU1NDlmNSAxMDA2NDQKLS0tIGEv ZnMvamZmczIveGF0dHJfdHJ1c3RlZC5jCisrKyBiL2ZzL2pmZnMyL3hhdHRyX3RydXN0ZWQuYwpA QCAtMTgsNyArMTgsOCBAQAogCiBzdGF0aWMgaW50IGpmZnMyX3RydXN0ZWRfZ2V0eGF0dHIoY29u c3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkJICBzdHJ1Y3QgZGVudHJ5ICp1 bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICBjb25zdCBjaGFyICpuYW1lLCB2b2lk ICpidWZmZXIsIHNpemVfdCBzaXplKQorCQkJCSAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVm ZmVyLCBzaXplX3Qgc2l6ZSwKKwkJCQkgIGludCBmbGFncykKIHsKIAlyZXR1cm4gZG9famZmczJf Z2V0eGF0dHIoaW5vZGUsIEpGRlMyX1hQUkVGSVhfVFJVU1RFRCwKIAkJCQkgbmFtZSwgYnVmZmVy LCBzaXplKTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3hhdHRyX3VzZXIuYyBiL2ZzL2pmZnMyL3hh dHRyX3VzZXIuYwppbmRleCA5ZDAyN2I0YWJjZjkuLmMwOTgzYTNlODEwYiAxMDA2NDQKLS0tIGEv ZnMvamZmczIveGF0dHJfdXNlci5jCisrKyBiL2ZzL2pmZnMyL3hhdHRyX3VzZXIuYwpAQCAtMTgs NyArMTgsOCBAQAogCiBzdGF0aWMgaW50IGpmZnMyX3VzZXJfZ2V0eGF0dHIoY29uc3Qgc3RydWN0 IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqdW51c2Vk LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQg KmJ1ZmZlciwgc2l6ZV90IHNpemUpCisJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAq YnVmZmVyLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgICBpbnQgZmxhZ3MpCiB7CiAJcmV0dXJuIGRv X2pmZnMyX2dldHhhdHRyKGlub2RlLCBKRkZTMl9YUFJFRklYX1VTRVIsCiAJCQkJIG5hbWUsIGJ1 ZmZlciwgc2l6ZSk7CmRpZmYgLS1naXQgYS9mcy9qZnMveGF0dHIuYyBiL2ZzL2pmcy94YXR0ci5j CmluZGV4IGRiNDFlNzgwMzE2My4uNWM3OWEzNWJmNjJmIDEwMDY0NAotLS0gYS9mcy9qZnMveGF0 dHIuYworKysgYi9mcy9qZnMveGF0dHIuYwpAQCAtOTI1LDcgKzkyNSw3IEBAIHN0YXRpYyBpbnQg X19qZnNfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCiAK IHN0YXRpYyBpbnQgamZzX3hhdHRyX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFu ZGxlciwKIAkJCSBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0J CQkgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQorCQkJIGNvbnN0 IGNoYXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCW5h bWUgPSB4YXR0cl9mdWxsX25hbWUoaGFuZGxlciwgbmFtZSk7CiAJcmV0dXJuIF9famZzX2dldHhh dHRyKGlub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSk7CkBAIC05NDIsNyArOTQyLDggQEAgc3RhdGlj IGludCBqZnNfeGF0dHJfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAog CiBzdGF0aWMgaW50IGpmc194YXR0cl9nZXRfb3MyKGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVy ICpoYW5kbGVyLAogCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAq aW5vZGUsCi0JCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6 ZSkKKwkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLAor CQkJICAgICBpbnQgZmxhZ3MpCiB7CiAJaWYgKGlzX2tub3duX25hbWVzcGFjZShuYW1lKSkKIAkJ cmV0dXJuIC1FT1BOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvZnMva2VybmZzL2lub2RlLmMgYi9mcy9r ZXJuZnMvaW5vZGUuYwppbmRleCBmM2YzOTg0Y2NlODAuLjg5ZGIyNGNlNjQ0ZSAxMDA2NDQKLS0t IGEvZnMva2VybmZzL2lub2RlLmMKKysrIGIvZnMva2VybmZzL2lub2RlLmMKQEAgLTMwOSw3ICsz MDksOCBAQCBpbnQga2VybmZzX3hhdHRyX3NldChzdHJ1Y3Qga2VybmZzX25vZGUgKmtuLCBjb25z dCBjaGFyICpuYW1lLAogCiBzdGF0aWMgaW50IGtlcm5mc192ZnNfeGF0dHJfZ2V0KGNvbnN0IHN0 cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJCXN0cnVjdCBkZW50cnkgKnVudXNlZCwg c3RydWN0IGlub2RlICppbm9kZSwKLQkJCQljb25zdCBjaGFyICpzdWZmaXgsIHZvaWQgKnZhbHVl LCBzaXplX3Qgc2l6ZSkKKwkJCQljb25zdCBjaGFyICpzdWZmaXgsIHZvaWQgKnZhbHVlLCBzaXpl X3Qgc2l6ZSwKKwkJCQlpbnQgZmxhZ3MpCiB7CiAJY29uc3QgY2hhciAqbmFtZSA9IHhhdHRyX2Z1 bGxfbmFtZShoYW5kbGVyLCBzdWZmaXgpOwogCXN0cnVjdCBrZXJuZnNfbm9kZSAqa24gPSBpbm9k ZS0+aV9wcml2YXRlOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZz NHByb2MuYwppbmRleCAzOTg5NmFmYzZlZGYuLjVlNmE1ODY4NWNkMCAxMDA2NDQKLS0tIGEvZnMv bmZzL25mczRwcm9jLmMKKysrIGIvZnMvbmZzL25mczRwcm9jLmMKQEAgLTcyMDMsNyArNzIwMyw4 IEBAIHN0YXRpYyBpbnQgbmZzNF94YXR0cl9zZXRfbmZzNF9hY2woY29uc3Qgc3RydWN0IHhhdHRy X2hhbmRsZXIgKmhhbmRsZXIsCiAKIHN0YXRpYyBpbnQgbmZzNF94YXR0cl9nZXRfbmZzNF9hY2wo Y29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkJICAgc3RydWN0IGRlbnRy eSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgIGNvbnN0IGNoYXIgKmtleSwg dm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuKQorCQkJCSAgIGNvbnN0IGNoYXIgKmtleSwgdm9pZCAq YnVmLCBzaXplX3QgYnVmbGVuLAorCQkJCSAgIGludCBmbGFncykKIHsKIAlyZXR1cm4gbmZzNF9w cm9jX2dldF9hY2woaW5vZGUsIGJ1ZiwgYnVmbGVuKTsKIH0KQEAgLTcyMjgsNyArNzIyOSw4IEBA IHN0YXRpYyBpbnQgbmZzNF94YXR0cl9zZXRfbmZzNF9sYWJlbChjb25zdCBzdHJ1Y3QgeGF0dHJf aGFuZGxlciAqaGFuZGxlciwKIAogc3RhdGljIGludCBuZnM0X3hhdHRyX2dldF9uZnM0X2xhYmVs KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJCSAgICAgc3RydWN0IGRl bnRyeSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICAgY29uc3QgY2hhciAq a2V5LCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4pCisJCQkJICAgICBjb25zdCBjaGFyICprZXks IHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKKwkJCQkgICAgIGludCBmbGFncykKIHsKIAlpZiAo c2VjdXJpdHlfaXNtYWNsYWJlbChrZXkpKQogCQlyZXR1cm4gbmZzNF9nZXRfc2VjdXJpdHlfbGFi ZWwoaW5vZGUsIGJ1ZiwgYnVmbGVuKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9m cy9vY2ZzMi94YXR0ci5jCmluZGV4IDM4NWYzYWFhMjQ0OC4uMDZlNjE1NjQyNDIyIDEwMDY0NAot LS0gYS9mcy9vY2ZzMi94YXR0ci5jCisrKyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTcyNDUsNyAr NzI0NSw4IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpk aXIsCiAgKi8KIHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2VjdXJpdHlfZ2V0KGNvbnN0IHN0cnVj dCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJCSAgICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQs IHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1 ZmZlciwgc2l6ZV90IHNpemUpCisJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZl ciwgc2l6ZV90IHNpemUsCisJCQkJICAgIGludCBmbGFncykKIHsKIAlyZXR1cm4gb2NmczJfeGF0 dHJfZ2V0KGlub2RlLCBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSwKIAkJCSAgICAgICBuYW1l LCBidWZmZXIsIHNpemUpOwpAQCAtNzMxNyw3ICs3MzE4LDggQEAgY29uc3Qgc3RydWN0IHhhdHRy X2hhbmRsZXIgb2NmczJfeGF0dHJfc2VjdXJpdHlfaGFuZGxlciA9IHsKICAqLwogc3RhdGljIGlu dCBvY2ZzMl94YXR0cl90cnVzdGVkX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFu ZGxlciwKIAkJCQkgICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUs Ci0JCQkJICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJ CQkgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJCSAg IGludCBmbGFncykKIHsKIAlyZXR1cm4gb2NmczJfeGF0dHJfZ2V0KGlub2RlLCBPQ0ZTMl9YQVRU Ul9JTkRFWF9UUlVTVEVELAogCQkJICAgICAgIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7CkBAIC03MzQz LDcgKzczNDUsOCBAQCBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBvY2ZzMl94YXR0cl90cnVz dGVkX2hhbmRsZXIgPSB7CiAgKi8KIHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfdXNlcl9nZXQoY29u c3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkJc3RydWN0IGRlbnRyeSAqdW51 c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCWNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1 ZmZlciwgc2l6ZV90IHNpemUpCisJCQkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBz aXplX3Qgc2l6ZSwKKwkJCQlpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2Ig PSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CiAKZGlmZiAtLWdpdCBhL2ZzL29yYW5nZWZzL3hhdHRy LmMgYi9mcy9vcmFuZ2Vmcy94YXR0ci5jCmluZGV4IGJkYzI4NWFlYTM2MC4uZWY0MTgwYmZmN2Ji IDEwMDY0NAotLS0gYS9mcy9vcmFuZ2Vmcy94YXR0ci5jCisrKyBiL2ZzL29yYW5nZWZzL3hhdHRy LmMKQEAgLTU0MSw3ICs1NDEsOCBAQCBzdGF0aWMgaW50IG9yYW5nZWZzX3hhdHRyX2dldF9kZWZh dWx0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJCSAgICAgIHN0cnVj dCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwKIAkJCQkgICAgICB2 b2lkICpidWZmZXIsCi0JCQkJICAgICAgc2l6ZV90IHNpemUpCisJCQkJICAgICAgc2l6ZV90IHNp emUsCisJCQkJICAgICAgaW50IGZsYWdzKQogewogCXJldHVybiBvcmFuZ2Vmc19pbm9kZV9nZXR4 YXR0cihpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKIApkaWZmIC0tZ2l0IGEvZnMvb3Zlcmxh eWZzL3N1cGVyLmMgYi9mcy9vdmVybGF5ZnMvc3VwZXIuYwppbmRleCBiMzY4ZTJlMTAyZmEuLmE3 YjIxZjJlYTJkZCAxMDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL3N1cGVyLmMKKysrIGIvZnMvb3Zl cmxheWZzL3N1cGVyLmMKQEAgLTg1NCw3ICs4NTQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG92 bF9zcGxpdF9sb3dlcmRpcnMoY2hhciAqc3RyKQogc3RhdGljIGludCBfX21heWJlX3VudXNlZAog b3ZsX3Bvc2l4X2FjbF94YXR0cl9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRs ZXIsCiAJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQlj b25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorCQkJY29uc3QgY2hh ciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCXJldHVy biBvdmxfeGF0dHJfZ2V0KGRlbnRyeSwgaW5vZGUsIGhhbmRsZXItPm5hbWUsIGJ1ZmZlciwgc2l6 ZSk7CiB9CkBAIC05MTksNyArOTE5LDggQEAgb3ZsX3Bvc2l4X2FjbF94YXR0cl9zZXQoY29uc3Qg c3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAKIHN0YXRpYyBpbnQgb3ZsX293bl94YXR0 cl9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkgICAgIHN0cnVj dCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgY29uc3QgY2hh ciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJCSAgICAgY29uc3QgY2hhciAq bmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgaW50IGZsYWdzKQogewog CXJldHVybiAtRU9QTk9UU1VQUDsKIH0KQEAgLTkzNCw3ICs5MzUsOCBAQCBzdGF0aWMgaW50IG92 bF9vd25feGF0dHJfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCiBz dGF0aWMgaW50IG92bF9vdGhlcl94YXR0cl9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIg KmhhbmRsZXIsCiAJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUg Kmlub2RlLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90 IHNpemUpCisJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qg c2l6ZSwKKwkJCSAgICAgICBpbnQgZmxhZ3MpCiB7CiAJcmV0dXJuIG92bF94YXR0cl9nZXQoZGVu dHJ5LCBpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3Bvc2l4 X2FjbC5jIGIvZnMvcG9zaXhfYWNsLmMKaW5kZXggODRhZDFjOTBkNTM1Li5jZDU1NjIxZTU3MGIg MTAwNjQ0Ci0tLSBhL2ZzL3Bvc2l4X2FjbC5jCisrKyBiL2ZzL3Bvc2l4X2FjbC5jCkBAIC04MzIs NyArODMyLDcgQEAgRVhQT1JUX1NZTUJPTCAocG9zaXhfYWNsX3RvX3hhdHRyKTsKIHN0YXRpYyBp bnQKIHBvc2l4X2FjbF94YXR0cl9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRs ZXIsCiAJCSAgICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0J CSAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpCisJCSAgICBj b25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsK IAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAJaW50IGVycm9yOwpkaWZmIC0tZ2l0IGEvZnMvcmVp c2VyZnMveGF0dHJfc2VjdXJpdHkuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyX3NlY3VyaXR5LmMKaW5k ZXggMjBiZTlhMGU1ODcwLi5lZWRmYTA3YTRmZDAgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hh dHRyX3NlY3VyaXR5LmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHJfc2VjdXJpdHkuYwpAQCAtMTEs NyArMTEsOCBAQAogCiBzdGF0aWMgaW50CiBzZWN1cml0eV9nZXQoY29uc3Qgc3RydWN0IHhhdHRy X2hhbmRsZXIgKmhhbmRsZXIsIHN0cnVjdCBkZW50cnkgKnVudXNlZCwKLQkgICAgIHN0cnVjdCBp bm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUp CisJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZm ZXIsIHNpemVfdCBzaXplLAorCSAgICAgaW50IGZsYWdzKQogewogCWlmIChJU19QUklWQVRFKGlu b2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyX3Ry dXN0ZWQuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyX3RydXN0ZWQuYwppbmRleCA1ZWQ0OGRhM2QwMmIu LjJkMTFkOTg2MDVkZCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMveGF0dHJfdHJ1c3RlZC5jCisr KyBiL2ZzL3JlaXNlcmZzL3hhdHRyX3RydXN0ZWQuYwpAQCAtMTAsNyArMTAsOCBAQAogCiBzdGF0 aWMgaW50CiB0cnVzdGVkX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwg c3RydWN0IGRlbnRyeSAqdW51c2VkLAotCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBj aGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorCSAgICBzdHJ1Y3QgaW5vZGUg Kmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCSAg ICBpbnQgZmxhZ3MpCiB7CiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8IElTX1BSSVZB VEUoaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0 dHJfdXNlci5jIGIvZnMvcmVpc2VyZnMveGF0dHJfdXNlci5jCmluZGV4IGE1NzNjYTQ1YmFjYy4u MmE1OWQ4NWM2OWM5IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy94YXR0cl91c2VyLmMKKysrIGIv ZnMvcmVpc2VyZnMveGF0dHJfdXNlci5jCkBAIC05LDcgKzksOCBAQAogCiBzdGF0aWMgaW50CiB1 c2VyX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwgc3RydWN0IGRlbnRy eSAqdW51c2VkLAotCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lk ICpidWZmZXIsIHNpemVfdCBzaXplKQorCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFy ICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCSBpbnQgZmxhZ3MpCiB7CiAJaWYg KCFyZWlzZXJmc194YXR0cnNfdXNlcihpbm9kZS0+aV9zYikpCiAJCXJldHVybiAtRU9QTk9UU1VQ UDsKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL3hhdHRyLmMgYi9mcy9zcXVhc2hmcy94YXR0ci5j CmluZGV4IGUxZTNmM2RkNWEwNi4uZDhkNThjOTkwNjUyIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hm cy94YXR0ci5jCisrKyBiL2ZzL3NxdWFzaGZzL3hhdHRyLmMKQEAgLTIwNCw3ICsyMDQsNyBAQCBz dGF0aWMgaW50IHNxdWFzaGZzX3hhdHRyX2hhbmRsZXJfZ2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9o YW5kbGVyICpoYW5kbGVyLAogCQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKnVudXNlZCwKIAkJCQkg ICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCi0J CQkJICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJCQkgICAgICB2b2lkICpidWZm ZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJcmV0dXJuIHNxdWFzaGZzX3hhdHRyX2dl dChpbm9kZSwgaGFuZGxlci0+ZmxhZ3MsIG5hbWUsCiAJCWJ1ZmZlciwgc2l6ZSk7CmRpZmYgLS1n aXQgYS9mcy94YXR0ci5jIGIvZnMveGF0dHIuYwppbmRleCA5MGRkNzhmMGViMjcuLjcxZjg4NzUx OGQ2ZiAxMDA2NDQKLS0tIGEvZnMveGF0dHIuYworKysgYi9mcy94YXR0ci5jCkBAIC0yODEsNyAr MjgxLDcgQEAgdmZzX2dldHhhdHRyX2FsbG9jKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qg Y2hhciAqbmFtZSwgY2hhciAqKnhhdHRyX3ZhbHVlLAogCQlyZXR1cm4gUFRSX0VSUihoYW5kbGVy KTsKIAlpZiAoIWhhbmRsZXItPmdldCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCWVycm9yID0g aGFuZGxlci0+Z2V0KGhhbmRsZXIsIGRlbnRyeSwgaW5vZGUsIG5hbWUsIE5VTEwsIDApOworCWVy cm9yID0gaGFuZGxlci0+Z2V0KGhhbmRsZXIsIGRlbnRyeSwgaW5vZGUsIG5hbWUsIE5VTEwsIDAs IDApOwogCWlmIChlcnJvciA8IDApCiAJCXJldHVybiBlcnJvcjsKIApAQCAtMjkyLDMyICsyOTIs MjAgQEAgdmZzX2dldHhhdHRyX2FsbG9jKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hh ciAqbmFtZSwgY2hhciAqKnhhdHRyX3ZhbHVlLAogCQltZW1zZXQodmFsdWUsIDAsIGVycm9yICsg MSk7CiAJfQogCi0JZXJyb3IgPSBoYW5kbGVyLT5nZXQoaGFuZGxlciwgZGVudHJ5LCBpbm9kZSwg bmFtZSwgdmFsdWUsIGVycm9yKTsKKwllcnJvciA9IGhhbmRsZXItPmdldChoYW5kbGVyLCBkZW50 cnksIGlub2RlLCBuYW1lLCB2YWx1ZSwgZXJyb3IsIDApOwogCSp4YXR0cl92YWx1ZSA9IHZhbHVl OwogCXJldHVybiBlcnJvcjsKIH0KIAogc3NpemVfdAogX192ZnNfZ2V0eGF0dHIoc3RydWN0IGRl bnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCSAg ICAgICB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpCisJICAgICAgIHZvaWQgKnZhbHVlLCBzaXpl X3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCWNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5k bGVyOwotCi0JaGFuZGxlciA9IHhhdHRyX3Jlc29sdmVfbmFtZShpbm9kZSwgJm5hbWUpOwotCWlm IChJU19FUlIoaGFuZGxlcikpCi0JCXJldHVybiBQVFJfRVJSKGhhbmRsZXIpOwotCWlmICghaGFu ZGxlci0+Z2V0KQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JcmV0dXJuIGhhbmRsZXItPmdldCho YW5kbGVyLCBkZW50cnksIGlub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSk7Ci19Ci1FWFBPUlRfU1lN Qk9MKF9fdmZzX2dldHhhdHRyKTsKLQotc3NpemVfdAotdmZzX2dldHhhdHRyKHN0cnVjdCBkZW50 cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQot ewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJaW50IGVycm9yOwog CisJaWYgKGZsYWdzICYgWEFUVFJfTk9TRUNVUklUWSkKKwkJZ290byBub2xzbTsKIAllcnJvciA9 IHhhdHRyX3Blcm1pc3Npb24oaW5vZGUsIG5hbWUsIE1BWV9SRUFEKTsKIAlpZiAoZXJyb3IpCiAJ CXJldHVybiBlcnJvcjsKQEAgLTMzOSw3ICszMjcsMTkgQEAgdmZzX2dldHhhdHRyKHN0cnVjdCBk ZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXpl KQogCQlyZXR1cm4gcmV0OwogCX0KIG5vbHNtOgotCXJldHVybiBfX3Zmc19nZXR4YXR0cihkZW50 cnksIGlub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSk7CisJaGFuZGxlciA9IHhhdHRyX3Jlc29sdmVf bmFtZShpbm9kZSwgJm5hbWUpOworCWlmIChJU19FUlIoaGFuZGxlcikpCisJCXJldHVybiBQVFJf RVJSKGhhbmRsZXIpOworCWlmICghaGFuZGxlci0+Z2V0KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7 CisJcmV0dXJuIGhhbmRsZXItPmdldChoYW5kbGVyLCBkZW50cnksIGlub2RlLCBuYW1lLCB2YWx1 ZSwgc2l6ZSwgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChfX3Zmc19nZXR4YXR0cik7CisKK3Nz aXplX3QKK3Zmc19nZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5h bWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gX192ZnNfZ2V0eGF0dHIo ZGVudHJ5LCBkZW50cnktPmRfaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCAwKTsKIH0KIEVYUE9S VF9TWU1CT0xfR1BMKHZmc19nZXR4YXR0cik7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfeGF0 dHIuYyBiL2ZzL3hmcy94ZnNfeGF0dHIuYwppbmRleCAzMTIzYjVhYWFkMmEuLmNhZmM5OWM0OGUy MCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc194YXR0ci5jCisrKyBiL2ZzL3hmcy94ZnNfeGF0dHIu YwpAQCAtMTgsNyArMTgsOCBAQAogCiBzdGF0aWMgaW50CiB4ZnNfeGF0dHJfZ2V0KGNvbnN0IHN0 cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLCBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsCi0JCXN0 cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qg c2l6ZSkKKwkJc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFs dWUsIHNpemVfdCBzaXplLAorCQlpbnQgZmxhZ3MpCiB7CiAJaW50IHhmbGFncyA9IGhhbmRsZXIt PmZsYWdzOwogCXN0cnVjdCB4ZnNfaW5vZGUgKmlwID0gWEZTX0koaW5vZGUpOwpkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9saW51eC94YXR0ci5oIGIvaW5jbHVkZS9saW51eC94YXR0ci5oCmluZGV4IDZk YWQwMzFiZTNjMi4uZTVjMTkxYjMwODE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3hhdHRy LmgKKysrIGIvaW5jbHVkZS9saW51eC94YXR0ci5oCkBAIC0zMCwxMCArMzAsMTAgQEAgc3RydWN0 IHhhdHRyX2hhbmRsZXIgewogCWNvbnN0IGNoYXIgKnByZWZpeDsKIAlpbnQgZmxhZ3M7ICAgICAg LyogZnMgcHJpdmF0ZSBmbGFncyAqLwogCWJvb2wgKCpsaXN0KShzdHJ1Y3QgZGVudHJ5ICpkZW50 cnkpOwotCWludCAoKmdldCkoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiwgc3RydWN0IGRl bnRyeSAqZGVudHJ5LAorCWludCAoKmdldCkoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhh bmRsZXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJICAgc3RydWN0IGlub2RlICppbm9kZSwg Y29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAotCQkgICBzaXplX3Qgc2l6ZSk7Ci0JaW50 ICgqc2V0KShjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqLCBzdHJ1Y3QgZGVudHJ5ICpkZW50 cnksCisJCSAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworCWludCAoKnNldCkoY29uc3Qgc3Ry dWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJICAg c3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqYnVmZmVy LAogCQkgICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKIH07CkBAIC00Niw3ICs0Niw4IEBAIHN0 cnVjdCB4YXR0ciB7CiAJc2l6ZV90IHZhbHVlX2xlbjsKIH07CiAKLXNzaXplX3QgX192ZnNfZ2V0 eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgY2hhciAqLCB2b2lk ICosIHNpemVfdCk7Citzc2l6ZV90IF9fdmZzX2dldHhhdHRyKHN0cnVjdCBkZW50cnkgKiwgc3Ry dWN0IGlub2RlICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLAorCQkgICAgICAgc2l6ZV90LCBpbnQp Owogc3NpemVfdCB2ZnNfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICosIHZv aWQgKiwgc2l6ZV90KTsKIHNzaXplX3QgdmZzX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkLCBj aGFyICpsaXN0LCBzaXplX3Qgc2l6ZSk7CiBpbnQgX192ZnNfc2V0eGF0dHIoc3RydWN0IGRlbnRy eSAqLCBzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosIHNpemVfdCwg aW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC94YXR0ci5oIGIvaW5jbHVkZS91 YXBpL2xpbnV4L3hhdHRyLmgKaW5kZXggYzEzOTViNWJkNDMyLi4xMjE2ZDc3N2QyMTAgMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC94YXR0ci5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51 eC94YXR0ci5oCkBAIC0xNyw4ICsxNyw5IEBACiAjaWYgX19VQVBJX0RFRl9YQVRUUgogI2RlZmlu ZSBfX1VTRV9LRVJORUxfWEFUVFJfREVGUwogCi0jZGVmaW5lIFhBVFRSX0NSRUFURQkweDEJLyog c2V0IHZhbHVlLCBmYWlsIGlmIGF0dHIgYWxyZWFkeSBleGlzdHMgKi8KLSNkZWZpbmUgWEFUVFJf UkVQTEFDRQkweDIJLyogc2V0IHZhbHVlLCBmYWlsIGlmIGF0dHIgZG9lcyBub3QgZXhpc3QgKi8K KyNkZWZpbmUgWEFUVFJfQ1JFQVRFCSAweDEJLyogc2V0IHZhbHVlLCBmYWlsIGlmIGF0dHIgYWxy ZWFkeSBleGlzdHMgKi8KKyNkZWZpbmUgWEFUVFJfUkVQTEFDRQkgMHgyCS8qIHNldCB2YWx1ZSwg ZmFpbCBpZiBhdHRyIGRvZXMgbm90IGV4aXN0ICovCisjZGVmaW5lIFhBVFRSX05PU0VDVVJJVFkg MHg0CS8qIGdldCB2YWx1ZSwgZG8gbm90IGludm9sdmUgc2VjdXJpdHkgY2hlY2sgKi8KICNlbmRp ZgogCiAvKiBOYW1lc3BhY2VzICovCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0u YwppbmRleCA2MjZkOGM3NGI5NzMuLjM0ZDM4MThiNDQyNCAxMDA2NDQKLS0tIGEvbW0vc2htZW0u YworKysgYi9tbS9zaG1lbS5jCkBAIC0zMjA2LDcgKzMyMDYsOCBAQCBzdGF0aWMgaW50IHNobWVt X2luaXR4YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwKIAogc3RhdGljIGludCBzaG1lbV94YXR0 cl9oYW5kbGVyX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwKIAkJCQkg ICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgY29u c3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJCQkgICBjb25zdCBj aGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJCSAgIGludCBmbGFncykK IHsKIAlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpOwogCmRp ZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggNmE5YWI3YThiMWQy Li42YjBmZWE5MmRkMDIgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0 LmMKQEAgLTMwMCw3ICszMDAsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRp b25zIHNvY2tmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAogc3RhdGljIGludCBzb2NrZnNfeGF0 dHJfZ2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJICAgIHN0cnVj dCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICBjb25zdCBjaGFy ICpzdWZmaXgsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKKwkJCSAgICBjb25zdCBjaGFyICpz dWZmaXgsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICBpbnQgZmxhZ3MpCiB7CiAJ aWYgKHZhbHVlKSB7CiAJCWlmIChkZW50cnktPmRfbmFtZS5sZW4gKyAxID4gc2l6ZSkKZGlmZiAt LWdpdCBhL3NlY3VyaXR5L2NvbW1vbmNhcC5jIGIvc2VjdXJpdHkvY29tbW9uY2FwLmMKaW5kZXgg ZjRlZTBhZTEwNmIyLi4zNzhhMmY2NmE3M2QgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2NvbW1vbmNh cC5jCisrKyBiL3NlY3VyaXR5L2NvbW1vbmNhcC5jCkBAIC0yOTcsNyArMjk3LDggQEAgaW50IGNh cF9pbm9kZV9uZWVkX2tpbGxwcml2KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAlzdHJ1Y3QgaW5v ZGUgKmlub2RlID0gZF9iYWNraW5nX2lub2RlKGRlbnRyeSk7CiAJaW50IGVycm9yOwogCi0JZXJy b3IgPSBfX3Zmc19nZXR4YXR0cihkZW50cnksIGlub2RlLCBYQVRUUl9OQU1FX0NBUFMsIE5VTEws IDApOworCWVycm9yID0gX192ZnNfZ2V0eGF0dHIoZGVudHJ5LCBpbm9kZSwgWEFUVFJfTkFNRV9D QVBTLCBOVUxMLCAwLAorCQkJICAgICAgIFhBVFRSX05PU0VDVVJJVFkpOwogCXJldHVybiBlcnJv ciA+IDA7CiB9CiAKQEAgLTU4Niw3ICs1ODcsOCBAQCBpbnQgZ2V0X3Zmc19jYXBzX2Zyb21fZGlz ayhjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBjcHVfdmZzX2NhcF9kYXRhCiAK IAlmc19ucyA9IGlub2RlLT5pX3NiLT5zX3VzZXJfbnM7CiAJc2l6ZSA9IF9fdmZzX2dldHhhdHRy KChzdHJ1Y3QgZGVudHJ5ICopZGVudHJ5LCBpbm9kZSwKLQkJCSAgICAgIFhBVFRSX05BTUVfQ0FQ UywgJmRhdGEsIFhBVFRSX0NBUFNfU1opOworCQkJICAgICAgWEFUVFJfTkFNRV9DQVBTLCAmZGF0 YSwgWEFUVFJfQ0FQU19TWiwKKwkJCSAgICAgIFhBVFRSX05PU0VDVVJJVFkpOwogCWlmIChzaXpl ID09IC1FTk9EQVRBIHx8IHNpemUgPT0gLUVPUE5PVFNVUFApCiAJCS8qIG5vIGRhdGEsIHRoYXQn cyBvayAqLwogCQlyZXR1cm4gLUVOT0RBVEE7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3Jp dHkvZXZtL2V2bV9tYWluLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMKaW5k ZXggZjlhODFiMTg3ZmFlLi45MjFjOGYyYWZjYWYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2ludGVn cml0eS9ldm0vZXZtX21haW4uYworKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWlu LmMKQEAgLTEwMCw3ICsxMDAsOCBAQCBzdGF0aWMgaW50IGV2bV9maW5kX3Byb3RlY3RlZF94YXR0 cnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlsaXN0 X2Zvcl9lYWNoX2VudHJ5X3JjdSh4YXR0ciwgJmV2bV9jb25maWdfeGF0dHJuYW1lcywgbGlzdCkg ewotCQllcnJvciA9IF9fdmZzX2dldHhhdHRyKGRlbnRyeSwgaW5vZGUsIHhhdHRyLT5uYW1lLCBO VUxMLCAwKTsKKwkJZXJyb3IgPSBfX3Zmc19nZXR4YXR0cihkZW50cnksIGlub2RlLCB4YXR0ci0+ bmFtZSwgTlVMTCwgMCwKKwkJCQkgICAgICAgWEFUVFJfTk9TRUNVUklUWSk7CiAJCWlmIChlcnJv ciA8IDApIHsKIAkJCWlmIChlcnJvciA9PSAtRU5PREFUQSkKIAkJCQljb250aW51ZTsKZGlmZiAt LWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3Mu YwppbmRleCA3NGRkNDZkZTAxYjYuLmIwODIyZGEwNjU4ZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkv c2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtNTUyLDcg KzU1Miw4IEBAIHN0YXRpYyBpbnQgc2JfZmluaXNoX3NldF9vcHRzKHN0cnVjdCBzdXBlcl9ibG9j ayAqc2IpCiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXJjID0gX192ZnNfZ2V0eGF0dHIocm9vdCwg cm9vdF9pbm9kZSwgWEFUVFJfTkFNRV9TRUxJTlVYLCBOVUxMLCAwKTsKKwkJcmMgPSBfX3Zmc19n ZXR4YXR0cihyb290LCByb290X2lub2RlLCBYQVRUUl9OQU1FX1NFTElOVVgsIE5VTEwsCisJCQkJ ICAgIDAsIFhBVFRSX05PU0VDVVJJVFkpOwogCQlpZiAocmMgPCAwICYmIHJjICE9IC1FTk9EQVRB KSB7CiAJCQlpZiAocmMgPT0gLUVPUE5PVFNVUFApCiAJCQkJcHJfd2FybigiU0VMaW51eDogKGRl diAlcywgdHlwZSAiCkBAIC0xMzc4LDEyICsxMzc5LDE0IEBAIHN0YXRpYyBpbnQgaW5vZGVfZG9p bml0X3VzZV94YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnks CiAJCXJldHVybiAtRU5PTUVNOwogCiAJY29udGV4dFtsZW5dID0gJ1wwJzsKLQlyYyA9IF9fdmZz X2dldHhhdHRyKGRlbnRyeSwgaW5vZGUsIFhBVFRSX05BTUVfU0VMSU5VWCwgY29udGV4dCwgbGVu KTsKKwlyYyA9IF9fdmZzX2dldHhhdHRyKGRlbnRyeSwgaW5vZGUsIFhBVFRSX05BTUVfU0VMSU5V WCwgY29udGV4dCwgbGVuLAorCQkJICAgIFhBVFRSX05PU0VDVVJJVFkpOwogCWlmIChyYyA9PSAt RVJBTkdFKSB7CiAJCWtmcmVlKGNvbnRleHQpOwogCiAJCS8qIE5lZWQgYSBsYXJnZXIgYnVmZmVy LiAgUXVlcnkgZm9yIHRoZSByaWdodCBzaXplLiAqLwotCQlyYyA9IF9fdmZzX2dldHhhdHRyKGRl bnRyeSwgaW5vZGUsIFhBVFRSX05BTUVfU0VMSU5VWCwgTlVMTCwgMCk7CisJCXJjID0gX192ZnNf Z2V0eGF0dHIoZGVudHJ5LCBpbm9kZSwgWEFUVFJfTkFNRV9TRUxJTlVYLCBOVUxMLCAwLAorCQkJ CSAgICBYQVRUUl9OT1NFQ1VSSVRZKTsKIAkJaWYgKHJjIDwgMCkKIAkJCXJldHVybiByYzsKIApA QCAtMTM5NCw3ICsxMzk3LDcgQEAgc3RhdGljIGludCBpbm9kZV9kb2luaXRfdXNlX3hhdHRyKHN0 cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAogCQljb250ZXh0W2xl bl0gPSAnXDAnOwogCQlyYyA9IF9fdmZzX2dldHhhdHRyKGRlbnRyeSwgaW5vZGUsIFhBVFRSX05B TUVfU0VMSU5VWCwKLQkJCQkgICAgY29udGV4dCwgbGVuKTsKKwkJCQkgICAgY29udGV4dCwgbGVu LCBYQVRUUl9OT1NFQ1VSSVRZKTsKIAl9CiAJaWYgKHJjIDwgMCkgewogCQlrZnJlZShjb250ZXh0 KTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21h Y2svc21hY2tfbHNtLmMKaW5kZXggNGM1ZTVhNDM4ZjhiLi4xNThiMzU3NzJiZTEgMTAwNjQ0Ci0t LSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNr X2xzbS5jCkBAIC0yOTIsNyArMjkyLDggQEAgc3RhdGljIHN0cnVjdCBzbWFja19rbm93biAqc21r X2ZldGNoKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBpbm9kZSAqaXAsCiAJaWYgKGJ1ZmZlciA9 PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCXJjID0gX192ZnNfZ2V0eGF0 dHIoZHAsIGlwLCBuYW1lLCBidWZmZXIsIFNNS19MT05HTEFCRUwpOworCXJjID0gX192ZnNfZ2V0 eGF0dHIoZHAsIGlwLCBuYW1lLCBidWZmZXIsIFNNS19MT05HTEFCRUwsCisJCQkgICAgWEFUVFJf Tk9TRUNVUklUWSk7CiAJaWYgKHJjIDwgMCkKIAkJc2twID0gRVJSX1BUUihyYyk7CiAJZWxzZSBp ZiAocmMgPT0gMCkKQEAgLTM0NDIsNyArMzQ0Myw3IEBAIHN0YXRpYyB2b2lkIHNtYWNrX2RfaW5z dGFudGlhdGUoc3RydWN0IGRlbnRyeSAqb3B0X2RlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkK IAkJCX0gZWxzZSB7CiAJCQkJcmMgPSBfX3Zmc19nZXR4YXR0cihkcCwgaW5vZGUsCiAJCQkJCVhB VFRSX05BTUVfU01BQ0tUUkFOU01VVEUsIHRyYXR0ciwKLQkJCQkJVFJBTlNfVFJVRV9TSVpFKTsK KwkJCQkJVFJBTlNfVFJVRV9TSVpFLCBYQVRUUl9OT1NFQ1VSSVRZKTsKIAkJCQlpZiAocmMgPj0g MCAmJiBzdHJuY21wKHRyYXR0ciwgVFJBTlNfVFJVRSwKIAkJCQkJCSAgICAgICBUUkFOU19UUlVF X1NJWkUpICE9IDApCiAJCQkJCXJjID0gLUVJTlZBTDsKLS0gCjIuMjIuMC43NzAuZzBmMmM0YTM3 ZmQtZ29vZwoK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.9 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E6C65C32751 for ; Wed, 31 Jul 2019 17:26:19 +0000 (UTC) Received: from lists.sourceforge.net (lists.sourceforge.net [216.105.38.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id ABE5C20679; Wed, 31 Jul 2019 17:26:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=lists.sourceforge.net header.i=@lists.sourceforge.net header.b="g4JKqVza"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=sourceforge.net header.i=@sourceforge.net header.b="akSMDWGW"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=sf.net header.i=@sf.net header.b="SNL6dRZw"; dkim=neutral (0-bit key) header.d=android.com header.i=@android.com header.b="N898lsCa" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org ABE5C20679 Authentication-Results: mail.kernel.org; dmarc=pass (p=none dis=none) header.from=lists.sourceforge.net Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=linux-f2fs-devel-bounces@lists.sourceforge.net DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.sourceforge.net; s=beta; h=Content-Transfer-Encoding:Content-Type:Cc: Reply-To:From:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Subject:MIME-Version:References:In-Reply-To: Message-Id:Date:To:Sender:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=6k2TlNnOvPZ7lHRHFQPyMJFnVQY3ei+gbaoiZPZP9cQ=; b=g4JKqVzalHXnUu3JLvbq5n/ik GYATSvl/ZFfTYGGN0u36Y5WlL48V+lS+n9b5dy9wUqMbQl3ECyOGpkOBLxM3gb35S5nuxgjzFQCoR VsmWwrUXAmCZOCcJqsK5Ur+9uBGXm9T8ek0jo5QiEiDKXFwRY3vk5j52qZ7EGNVGTeX4I=; Received: from [127.0.0.1] (helo=sfs-ml-2.v29.lw.sourceforge.com) by sfs-ml-2.v29.lw.sourceforge.com with esmtp (Exim 4.90_1) (envelope-from ) id 1hssMl-0005MN-5y; Wed, 31 Jul 2019 17:26:19 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-2.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1hssMj-0005MC-Qg for linux-f2fs-devel@lists.sourceforge.net; Wed, 31 Jul 2019 17:26:17 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:Content-Type:MIME-Version :References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=LHxn7iZ54JoT2ZxEph2N5G+LSVSPJ2zLnE9ei0hDpM8=; b=akSMDWGWWhpqyQpuIb6ifolQT7 Em9q5Y8W7Cv2J9rWBT5GBrOEQaL21pRdxmJfbIFG0zo4BhlwFHraGqpSNlVHp0QjL+r1GANYobhDX fINzNUZsGJeuGh8DsTNEl92UKqVpaTQRYl8Od9of9a5h2ENU2fI6NRo4WW20MZyfanN8=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=LHxn7iZ54JoT2ZxEph2N5G+LSVSPJ2zLnE9ei0hDpM8=; b=SNL6dRZwYiKX/6s02gV6OCyWMR IeVi48odS995jctpG9H785A+zl+YMKyOdZsDVKqaHTUxLW97VbzXTkaOxtHcZTIWNLqGryjE+rH6B mVUhpRmYHVCEtjxZX1dTttK+sIbiq+1vSqviuqj9IURC+V3xRacy6A8kpUCjSur4r51U=; Received: from mail-pl1-f195.google.com ([209.85.214.195]) by sfi-mx-4.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.90_1) id 1hssMa-005U0t-Cw for linux-f2fs-devel@lists.sourceforge.net; Wed, 31 Jul 2019 17:26:17 +0000 Received: by mail-pl1-f195.google.com with SMTP id w24so30781551plp.2 for ; Wed, 31 Jul 2019 10:26:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=android.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LHxn7iZ54JoT2ZxEph2N5G+LSVSPJ2zLnE9ei0hDpM8=; b=N898lsCa/SMfpKAqCPq47pOgSHdR6hxDgScZ6DEoLg+etiPY12DFx7gWZd5LUwyobd f0hzCmtUi+glbcABe7YwRp6ryC8rYfSFxrEfYv1rYv1mgglAHU4gBXZx15WYtZ4GZQaF oSaJNa2dt+AdMLgq6D1p/y7W7mbhLIv/MWNRl6rrKQWR6sxUclgCDzKV5x0tt9+jEDAH rGrAVM5SHyQ/LAvUT2qNOc9PHcGFlt4Q+cXus/8yF+k3pzsTSq23MXCP/7tun2NV92EY 17lrkHQkKQZZ7R9aam0Zl85YMjE3eIdxNYJ8ryjQtDfi6pO0AIrcPmYQhQsnzi50MNDC MT4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LHxn7iZ54JoT2ZxEph2N5G+LSVSPJ2zLnE9ei0hDpM8=; b=aleLLm00vveaEELb8ZY2D/sYqMicQBY2eLGv6dLOgB/WhXFNWfoiCsLfHQEbg0sLZK fmXvXRWirour6p+Qdd1NrCZee0L/I/Y+O7zfmPuJF9uiYL4eVMZWzRx2rRteybNFCMr/ n1dwVatYHWz2jS0UZgW85xhXPefMhZGXkvmUlm7PbOV4hrVlUO7oDa0Lb7FRtNdLpMqn F9NBmcxV+E235LTmvJb/OHw/E5SWEnoV/CXbjzWFp+40czsi2p4K8fz+uSasdmZFzV+1 ZO5IwhcVPRQFMk+IgkBuJsrzpigPxSRBGpW/e9vwjW/SKPIVFkIuzS15wv/jgG0cbQml Q51w== X-Gm-Message-State: APjAAAXMyDh97HHqVld2ddHDdQZYz/xvVl8h3IgIPidUuAlXz5cR+vYk sMCmBRg2UBVMGRYy+oPE0A4= X-Google-Smtp-Source: APXvYqxUm6lDNMAh3srh0DXzL1h01KxjYPmUk6tQtMIwfrpF/wjB4qpOdMv3g9x/m/rz7xhDVg2G6w== X-Received: by 2002:a17:902:e2:: with SMTP id a89mr122348622pla.210.1564592322315; Wed, 31 Jul 2019 09:58:42 -0700 (PDT) Received: from nebulus.mtv.corp.google.com ([2620:15c:211:200:5404:91ba:59dc:9400]) by smtp.gmail.com with ESMTPSA id f72sm2245954pjg.10.2019.07.31.09.58.39 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Wed, 31 Jul 2019 09:58:41 -0700 (PDT) To: linux-kernel@vger.kernel.org Date: Wed, 31 Jul 2019 09:57:57 -0700 Message-Id: <20190731165803.4755-3-salyzyn@android.com> X-Mailer: git-send-email 2.22.0.770.g0f2c4a37fd-goog In-Reply-To: <20190731165803.4755-1-salyzyn@android.com> References: <20190731165803.4755-1-salyzyn@android.com> MIME-Version: 1.0 X-Headers-End: 1hssMa-005U0t-Cw Subject: [f2fs-dev] [PATCH v13 2/5] Add flags option to get xattr method paired to __vfs_getxattr X-BeenThere: linux-f2fs-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Mark Salyzyn via Linux-f2fs-devel Reply-To: Mark Salyzyn Cc: Latchesar Ionkov , Dave Kleikamp , jfs-discussion@lists.sourceforge.net, Randy Dunlap , linux-integrity@vger.kernel.org, linux-doc@vger.kernel.org, Martin Brandenburg , samba-technical@lists.samba.org, Dominique Martinet , Amir Goldstein , Mimi Zohar , James Morris , David Howells , Chris Mason , "David S . Miller" , Andreas Dilger , ocfs2-devel@oss.oracle.com, Eric Paris , netdev@vger.kernel.org, Tyler Hicks , linux-afs@lists.infradead.org, Mike Marshall , linux-xfs@vger.kernel.org, Andreas Gruenbacher , Sage Weil , Jonathan Corbet , Richard Weinberger , Mark Fasheh , devel@lists.orangefs.org, Hugh Dickins , linux-security-module@vger.kernel.org, cluster-devel@redhat.com, selinux@vger.kernel.org, Vyacheslav Dubeyko , Casey Schaufler , v9fs-developer@lists.sourceforge.net, Ilya Dryomov , linux-ext4@vger.kernel.org, Stephen Smalley , linux-mm@kvack.org, Vivek Goyal , Serge Hallyn , linux-cifs@vger.kernel.org, Eric Van Hensbergen , ecryptfs@vger.kernel.org, Josef Bacik , "Darrick J . Wong" , reiserfs-devel@vger.kernel.org, Tejun Heo , Greg Kroah-Hartman , Joel Becker , linux-mtd@lists.infradead.org, David Sterba , Jaegeuk Kim , ceph-devel@vger.kernel.org, Trond Myklebust , Paul Moore , linux-nfs@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, Theodore Ts'o , linux-fsdevel@vger.kernel.org, Joseph Qi , Mathieu Malaterre , kernel-team@android.com, Miklos Szeredi , Jeff Layton , linux-unionfs@vger.kernel.org, stable@vger.kernel.org, Mark Salyzyn , Steve French , =?UTF-8?q?Ernesto=20A=20=2E=20Fern=C3=A1ndez?= , "Eric W . Biederman" , Jan Kara , Bob Peterson , Phillip Lougher , Andrew Morton , David Woodhouse , Anna Schumaker , linux-btrfs@vger.kernel.org, Alexander Viro Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net QWRkIGEgZmxhZyBvcHRpb24gdG8gZ2V0IHhhdHRyIG1ldGhvZCB0aGF0IGNvdWxkIGhhdmUgYSBi aXQgZmxhZyBvZgpYQVRUUl9OT1NFQ1VSSVRZIHBhc3NlZCB0byBpdC4gIFhBVFRSX05PU0VDVVJJ VFkgaXMgZ2VuZXJhbGx5IHRoZW4Kc2V0IGluIHRoZSBfX3Zmc19nZXR4YXR0ciBwYXRoLgoKVGhp cyBoYW5kbGVzIHRoZSBjYXNlIG9mIGEgdW5pb24gZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBpcyBi ZWluZwpyZXF1ZXN0ZWQgYnkgdGhlIHNlY3VyaXR5IGxheWVyIHRvIHJlcG9ydCBiYWNrIHRoZSBk YXRhIHRoYXQgaXMgdGhlCnRhcmdldCBsYWJlbCBvciBjb250ZXh0IGVtYmVkZGVkIGludG8gd3Jh cHBlZCBmaWxlc3lzdGVtJ3MgeGF0dHIuCgpGb3IgdGhlIHVzZSBjYXNlIHdoZXJlIGFjY2VzcyBp cyB0byBiZSBibG9ja2VkIGJ5IHRoZSBzZWN1cml0eSBsYXllci4KClRoZSBwYXRoIHRoZW4gY291 bGQgYmUgc2VjdXJpdHkoZGVudHJ5KSAtPgpfX3Zmc19nZXR4YXR0cihkZW50cnkuLi5YQVRUUl9O T1NFQ1VJUlRZKSAtPgpoYW5kbGVyLT5nZXQoZGVudHJ5Li4uWEFUVFJfTk9TRUNVUklUWSkgLT4K X192ZnNfZ2V0eGF0dHIobG93ZXJfZGVudHJ5Li4uWEFUVFJfTk9TRUNVSVJUWSkgLT4KbG93ZXJf aGFuZGxlci0+Z2V0KGxvd2VyX2RlbnRyeS4uLlhBVFRSX05PU0VDVUlSVFkpCndoaWNoIHdvdWxk IHJlcG9ydCBiYWNrIHRocm91Z2ggdGhlIGNoYWluIGRhdGEgYW5kIHN1Y2Nlc3MgYXMKZXhwZWN0 ZWQsIGJ1dCB0aGUgbG9nZ2luZyBzZWN1cml0eSBsYXllciBhdCB0aGUgdG9wIHdvdWxkIGhhdmUg dGhlCmRhdGEgdG8gZGV0ZXJtaW5lIHRoZSBhY2Nlc3MgcGVybWlzc2lvbnMgYW5kIHJlcG9ydCBi YWNrIHRoZSB0YXJnZXQKY29udGV4dCB0aGF0IHdhcyBibG9ja2VkLgoKV2l0aG91dCB0aGUgZ2V0 IGhhbmRsZXIgZmxhZywgdGhlIHBhdGggb24gYSB1bmlvbiBmaWxlc3lzdGVtIHdvdWxkIGJlCnRo ZSBlcnJhbnQgc2VjdXJpdHkoZGVudHJ5KSAtPiBfX3Zmc19nZXR4YXR0cihkZW50cnkpIC0+Cmhh bmRsZXItPmdldChkZW50cnkpIC0+IHZmc19nZXR4YXR0cihsb3dlcl9kZW50cnkpIC0+IG5lc3Rl ZCAtPgpzZWN1cml0eShsb3dlcl9kZW50cnksIGxvZyBvZmYpIC0+IGxvd2VyX2hhbmRsZXItPmdl dChsb3dlcl9kZW50cnkpCndoaWNoIHdvdWxkIHJlcG9ydCBiYWNrIHRocm91Z2ggdGhlIGNoYWlu IG5vIGRhdGEsIGFuZCAtRUFDQ0VTLgoKRm9yIHNlbGludXggZm9yIGJvdGggY2FzZXMsIHRoaXMg d291bGQgdHJhbnNsYXRlIHRvIGEgY29ycmVjdGx5CmRldGVybWluZWQgYmxvY2tlZCBhY2Nlc3Mu IEluIHRoZSBmaXJzdCBjb3JyZWN0ZWQgY2FzZSBhIGNvcnJlY3QgYXZjCmxvZyB3b3VsZCBiZSBy ZXBvcnRlZCwgaW4gdGhlIHNlY29uZCBsZWdhY3kgY2FzZSBhbiBpbmNvcnJlY3QgYXZjIGxvZwp3 b3VsZCBiZSByZXBvcnRlZCBhZ2FpbnN0IGFuIHVuaW5pdGlhbGl6ZWQgdTpvYmplY3Rfcjp1bmxh YmVsZWQ6czAKY29udGV4dCBtYWtpbmcgdGhlIGxvZ3MgY29zbWV0aWNhbGx5IHVzZWxlc3MgZm9y IGF1ZGl0MmFsbG93LgoKVGhpcyBwYXRjaCBzZXJpZXMgaXMgaW5lcnQgYW5kIGlzIHRoZSB3aWRl LXNwcmVhZCBhZGRpdGlvbiBvZiB0aGUKZmxhZ3Mgb3B0aW9uIGZvciB4YXR0ciBmdW5jdGlvbnMs IGFuZCBhIHJlcGxhY2VtZW50IG9mIF92ZnNfZ2V0eGF0dHIKd2l0aCBfX3Zmc19nZXR4YXR0cigu Li5YQVRUUl9OT1NFQ1VSSVRZKS4KClNpZ25lZC1vZmYtYnk6IE1hcmsgU2FseXp5biA8c2FseXp5 bkBhbmRyb2lkLmNvbT4KQ2M6IE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KQ2M6 IEpvbmF0aGFuIENvcmJldCA8Y29yYmV0QGx3bi5uZXQ+CkNjOiBWaXZlayBHb3lhbCA8dmdveWFs QHJlZGhhdC5jb20+CkNjOiBFcmljIFcuIEJpZWRlcm1hbiA8ZWJpZWRlcm1AeG1pc3Npb24uY29t PgpDYzogQW1pciBHb2xkc3RlaW4gPGFtaXI3M2lsQGdtYWlsLmNvbT4KQ2M6IFJhbmR5IER1bmxh cCA8cmR1bmxhcEBpbmZyYWRlYWQub3JnPgpDYzogU3RlcGhlbiBTbWFsbGV5IDxzZHNAdHljaG8u bnNhLmdvdj4KQ2M6IGxpbnV4LXVuaW9uZnNAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1kb2NA dmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCkNjOiBrZXJu ZWwtdGVhbUBhbmRyb2lkLmNvbQpDYzogRXJpYyBWYW4gSGVuc2JlcmdlbiA8ZXJpY3ZoQGdtYWls LmNvbT4KQ2M6IExhdGNoZXNhciBJb25rb3YgPGx1Y2hvQGlvbmtvdi5uZXQ+CkNjOiBEb21pbmlx dWUgTWFydGluZXQgPGFzbWFkZXVzQGNvZGV3cmVjay5vcmc+CkNjOiBEYXZpZCBIb3dlbGxzIDxk aG93ZWxsc0ByZWRoYXQuY29tPgpDYzogQ2hyaXMgTWFzb24gPGNsbUBmYi5jb20+CkNjOiBKb3Nl ZiBCYWNpayA8am9zZWZAdG94aWNwYW5kYS5jb20+CkNjOiBEYXZpZCBTdGVyYmEgPGRzdGVyYmFA c3VzZS5jb20+CkNjOiBKZWZmIExheXRvbiA8amxheXRvbkBrZXJuZWwub3JnPgpDYzogU2FnZSBX ZWlsIDxzYWdlQHJlZGhhdC5jb20+CkNjOiBJbHlhIERyeW9tb3YgPGlkcnlvbW92QGdtYWlsLmNv bT4KQ2M6IFN0ZXZlIEZyZW5jaCA8c2ZyZW5jaEBzYW1iYS5vcmc+CkNjOiBUeWxlciBIaWNrcyA8 dHloaWNrc0BjYW5vbmljYWwuY29tPgpDYzogSmFuIEthcmEgPGphY2tAc3VzZS5jb20+CkNjOiBU aGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgpDYzogQW5kcmVhcyBEaWxnZXIgPGFkaWxnZXIu a2VybmVsQGRpbGdlci5jYT4KQ2M6IEphZWdldWsgS2ltIDxqYWVnZXVrQGtlcm5lbC5vcmc+CkNj OiBDaGFvIFl1IDx5dWNoYW8wQGh1YXdlaS5jb20+CkNjOiBCb2IgUGV0ZXJzb24gPHJwZXRlcnNv QHJlZGhhdC5jb20+CkNjOiBBbmRyZWFzIEdydWVuYmFjaGVyIDxhZ3J1ZW5iYUByZWRoYXQuY29t PgpDYzogRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgpDYzogUmljaGFyZCBX ZWluYmVyZ2VyIDxyaWNoYXJkQG5vZC5hdD4KQ2M6IERhdmUgS2xlaWthbXAgPHNoYWdneUBrZXJu ZWwub3JnPgpDYzogR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9y Zz4KQ2M6IFRlanVuIEhlbyA8dGpAa2VybmVsLm9yZz4KQ2M6IFRyb25kIE15a2xlYnVzdCA8dHJv bmQubXlrbGVidXN0QGhhbW1lcnNwYWNlLmNvbT4KQ2M6IEFubmEgU2NodW1ha2VyIDxhbm5hLnNj aHVtYWtlckBuZXRhcHAuY29tPgpDYzogTWFyayBGYXNoZWggPG1hcmtAZmFzaGVoLmNvbT4KQ2M6 IEpvZWwgQmVja2VyIDxqbGJlY0BldmlscGxhbi5vcmc+CkNjOiBKb3NlcGggUWkgPGpvc2VwaC5x aUBsaW51eC5hbGliYWJhLmNvbT4KQ2M6IE1pa2UgTWFyc2hhbGwgPGh1YmNhcEBvbW5pYm9uZC5j b20+CkNjOiBNYXJ0aW4gQnJhbmRlbmJ1cmcgPG1hcnRpbkBvbW5pYm9uZC5jb20+CkNjOiBBbGV4 YW5kZXIgVmlybyA8dmlyb0B6ZW5pdi5saW51eC5vcmcudWs+CkNjOiBQaGlsbGlwIExvdWdoZXIg PHBoaWxsaXBAc3F1YXNoZnMub3JnLnVrPgpDYzogRGFycmljayBKLiBXb25nIDxkYXJyaWNrLndv bmdAb3JhY2xlLmNvbT4KQ2M6IGxpbnV4LXhmc0B2Z2VyLmtlcm5lbC5vcmcKQ2M6IEh1Z2ggRGlj a2lucyA8aHVnaGRAZ29vZ2xlLmNvbT4KQ2M6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1s b2Z0Lm5ldD4KQ2M6IEFuZHJldyBNb3J0b24gPGFrcG1AbGludXgtZm91bmRhdGlvbi5vcmc+CkNj OiBNYXRoaWV1IE1hbGF0ZXJyZSA8bWFsYXRAZGViaWFuLm9yZz4KQ2M6IEVybmVzdG8gQS4gRmVy bsOhbmRleiA8ZXJuZXN0by5tbmQuZmVybmFuZGV6QGdtYWlsLmNvbT4KQ2M6IFZ5YWNoZXNsYXYg RHViZXlrbyA8c2xhdmFAZHViZXlrby5jb20+CkNjOiB2OWZzLWRldmVsb3BlckBsaXN0cy5zb3Vy Y2Vmb3JnZS5uZXQKQ2M6IGxpbnV4LWFmc0BsaXN0cy5pbmZyYWRlYWQub3JnCkNjOiBsaW51eC1i dHJmc0B2Z2VyLmtlcm5lbC5vcmcKQ2M6IGNlcGgtZGV2ZWxAdmdlci5rZXJuZWwub3JnCkNjOiBs aW51eC1jaWZzQHZnZXIua2VybmVsLm9yZwpDYzogc2FtYmEtdGVjaG5pY2FsQGxpc3RzLnNhbWJh Lm9yZwpDYzogZWNyeXB0ZnNAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1leHQ0QHZnZXIua2Vy bmVsLm9yZwpDYzogbGludXgtZjJmcy1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKQ2M6IGxp bnV4LWZzZGV2ZWxAdmdlci5rZXJuZWwub3JnCkNjOiBjbHVzdGVyLWRldmVsQHJlZGhhdC5jb20K Q2M6IGxpbnV4LW10ZEBsaXN0cy5pbmZyYWRlYWQub3JnCkNjOiBqZnMtZGlzY3Vzc2lvbkBsaXN0 cy5zb3VyY2Vmb3JnZS5uZXQKQ2M6IGxpbnV4LW5mc0B2Z2VyLmtlcm5lbC5vcmcKQ2M6IG9jZnMy LWRldmVsQG9zcy5vcmFjbGUuY29tCkNjOiBkZXZlbEBsaXN0cy5vcmFuZ2Vmcy5vcmcKQ2M6IHJl aXNlcmZzLWRldmVsQHZnZXIua2VybmVsLm9yZwpDYzogbGludXgtbW1Aa3ZhY2sub3JnCkNjOiBu ZXRkZXZAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1zZWN1cml0eS1tb2R1bGVAdmdlci5rZXJu ZWwub3JnCkNjOiBzdGFibGVAdmdlci5rZXJuZWwub3JnICMgNC40LCA0LjksIDQuMTQgJiA0LjE5 Ci0tLQp2MTMgLSBhZGRlZCBmbGFncyB0byBfX3Zmc19nZXR4YXR0ciBjYWxsLCBhbmQgbW92ZWQg YWxsIHRoZSBzZWN1cml0eQogICAgICBjb2RlIGZyb20gdmZzX2dldHhhdHRyIGludG8gaXQuCgp2 MTIgLSBBZGRlZCBiYWNrIHRvIHBhdGNoIHNlcmllcyBhcyBnZXQgeGF0dHIgd2l0aCBmbGFnIG9w dGlvbi4KCnYxMSAtIFNxdWFzaGVkIG91dCBvZiBwYXRjaCBzZXJpZXMgYW5kIHJlcGxhY2VkIHdp dGggcGVyLXRocmVhZCBmbGFnCiAgICAgIHNvbHV0aW9uLgoKdjEwIC0gQWRkZWQgdG8gcGF0Y2gg c2VyaWVzIGFzIF9fZ2V0IHhhdHRyIG1ldGhvZC4KLS0tCiBmcy85cC9hY2wuYyAgICAgICAgICAg ICAgICAgICAgICAgfCAgMyArKy0KIGZzLzlwL3hhdHRyLmMgICAgICAgICAgICAgICAgICAgICB8 ICAzICsrLQogZnMvYWZzL3hhdHRyLmMgICAgICAgICAgICAgICAgICAgIHwgIDYgKysrLS0tCiBm cy9idHJmcy94YXR0ci5jICAgICAgICAgICAgICAgICAgfCAgMyArKy0KIGZzL2NlcGgveGF0dHIu YyAgICAgICAgICAgICAgICAgICB8ICAzICsrLQogZnMvY2lmcy94YXR0ci5jICAgICAgICAgICAg ICAgICAgIHwgIDIgKy0KIGZzL2VjcnlwdGZzL2lub2RlLmMgICAgICAgICAgICAgICB8ICA2ICsr KystLQogZnMvZWNyeXB0ZnMvbW1hcC5jICAgICAgICAgICAgICAgIHwgIDIgKy0KIGZzL2V4dDIv eGF0dHJfdHJ1c3RlZC5jICAgICAgICAgICB8ICAyICstCiBmcy9leHQyL3hhdHRyX3VzZXIuYyAg ICAgICAgICAgICAgfCAgMiArLQogZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jICAgICAgICAgIHwg IDIgKy0KIGZzL2V4dDQveGF0dHJfdHJ1c3RlZC5jICAgICAgICAgICB8ICAyICstCiBmcy9leHQ0 L3hhdHRyX3VzZXIuYyAgICAgICAgICAgICAgfCAgMiArLQogZnMvZjJmcy94YXR0ci5jICAgICAg ICAgICAgICAgICAgIHwgIDQgKystLQogZnMvZnVzZS94YXR0ci5jICAgICAgICAgICAgICAgICAg IHwgIDQgKystLQogZnMvZ2ZzMi94YXR0ci5jICAgICAgICAgICAgICAgICAgIHwgIDMgKystCiBm cy9oZnMvYXR0ci5jICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQogZnMvaGZzcGx1cy94YXR0 ci5jICAgICAgICAgICAgICAgIHwgIDMgKystCiBmcy9oZnNwbHVzL3hhdHRyX3RydXN0ZWQuYyAg ICAgICAgfCAgMyArKy0KIGZzL2hmc3BsdXMveGF0dHJfdXNlci5jICAgICAgICAgICB8ICAzICsr LQogZnMvamZmczIvc2VjdXJpdHkuYyAgICAgICAgICAgICAgIHwgIDMgKystCiBmcy9qZmZzMi94 YXR0cl90cnVzdGVkLmMgICAgICAgICAgfCAgMyArKy0KIGZzL2pmZnMyL3hhdHRyX3VzZXIuYyAg ICAgICAgICAgICB8ICAzICsrLQogZnMvamZzL3hhdHRyLmMgICAgICAgICAgICAgICAgICAgIHwg IDUgKysrLS0KIGZzL2tlcm5mcy9pbm9kZS5jICAgICAgICAgICAgICAgICB8ICAzICsrLQogZnMv bmZzL25mczRwcm9jLmMgICAgICAgICAgICAgICAgIHwgIDYgKysrKy0tCiBmcy9vY2ZzMi94YXR0 ci5jICAgICAgICAgICAgICAgICAgfCAgOSArKysrKy0tLQogZnMvb3JhbmdlZnMveGF0dHIuYyAg ICAgICAgICAgICAgIHwgIDMgKystCiBmcy9vdmVybGF5ZnMvc3VwZXIuYyAgICAgICAgICAgICAg fCAgOCArKysrLS0tCiBmcy9wb3NpeF9hY2wuYyAgICAgICAgICAgICAgICAgICAgfCAgMiArLQog ZnMvcmVpc2VyZnMveGF0dHJfc2VjdXJpdHkuYyAgICAgIHwgIDMgKystCiBmcy9yZWlzZXJmcy94 YXR0cl90cnVzdGVkLmMgICAgICAgfCAgMyArKy0KIGZzL3JlaXNlcmZzL3hhdHRyX3VzZXIuYyAg ICAgICAgICB8ICAzICsrLQogZnMvc3F1YXNoZnMveGF0dHIuYyAgICAgICAgICAgICAgIHwgIDIg Ky0KIGZzL3hhdHRyLmMgICAgICAgICAgICAgICAgICAgICAgICB8IDM2ICsrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tLS0KIGZzL3hmcy94ZnNfeGF0dHIuYyAgICAgICAgICAgICAgICB8ICAz ICsrLQogaW5jbHVkZS9saW51eC94YXR0ci5oICAgICAgICAgICAgIHwgIDkgKysrKy0tLS0KIGlu Y2x1ZGUvdWFwaS9saW51eC94YXR0ci5oICAgICAgICB8ICA1ICsrKy0tCiBtbS9zaG1lbS5jICAg ICAgICAgICAgICAgICAgICAgICAgfCAgMyArKy0KIG5ldC9zb2NrZXQuYyAgICAgICAgICAgICAg ICAgICAgICB8ICAzICsrLQogc2VjdXJpdHkvY29tbW9uY2FwLmMgICAgICAgICAgICAgIHwgIDYg KysrKy0tCiBzZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMgfCAgMyArKy0KIHNlY3Vy aXR5L3NlbGludXgvaG9va3MuYyAgICAgICAgICB8IDExICsrKysrKy0tLS0KIHNlY3VyaXR5L3Nt YWNrL3NtYWNrX2xzbS5jICAgICAgICB8ICA1ICsrKy0tCiA0NCBmaWxlcyBjaGFuZ2VkLCAxMTkg aW5zZXJ0aW9ucygrKSwgODEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZnMvOXAvYWNsLmMg Yi9mcy85cC9hY2wuYwppbmRleCA2MjYxNzE5ZjZmMmEuLmNiMTRlOGIzMTJiYyAxMDA2NDQKLS0t IGEvZnMvOXAvYWNsLmMKKysrIGIvZnMvOXAvYWNsLmMKQEAgLTIxNCw3ICsyMTQsOCBAQCBpbnQg djlmc19hY2xfbW9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCAqbW9kZXAsCiAKIHN0YXRp YyBpbnQgdjlmc194YXR0cl9nZXRfYWNsKGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5k bGVyLAogCQkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2Rl LAotCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkK KwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisJ CQkgICAgICBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsK IAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CmRpZmYgLS1naXQgYS9mcy85cC94YXR0ci5jIGIvZnMv OXAveGF0dHIuYwppbmRleCBhYzhmZjhjYTRjMTEuLjVjZmE3NzI0NTJmZCAxMDA2NDQKLS0tIGEv ZnMvOXAveGF0dHIuYworKysgYi9mcy85cC94YXR0ci5jCkBAIC0xMzksNyArMTM5LDggQEAgc3Np emVfdCB2OWZzX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwg c2l6ZV90IGJ1ZmZlcl9zaXplKQogCiBzdGF0aWMgaW50IHY5ZnNfeGF0dHJfaGFuZGxlcl9nZXQo Y29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkJICBzdHJ1Y3QgZGVudHJ5 ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICBjb25zdCBjaGFyICpuYW1lLCB2 b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorCQkJCSAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAq YnVmZmVyLCBzaXplX3Qgc2l6ZSwKKwkJCQkgIGludCBmbGFncykKIHsKIAljb25zdCBjaGFyICpm dWxsX25hbWUgPSB4YXR0cl9mdWxsX25hbWUoaGFuZGxlciwgbmFtZSk7CiAKZGlmZiAtLWdpdCBh L2ZzL2Fmcy94YXR0ci5jIGIvZnMvYWZzL3hhdHRyLmMKaW5kZXggNTU1MmQwMzQwOTBhLi5lNjUw OWMyMWYwOGEgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy94YXR0ci5jCisrKyBiL2ZzL2Fmcy94YXR0ci5j CkBAIC0zMzQsNyArMzM0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGFm c194YXR0cl95ZnNfaGFuZGxlciA9IHsKIHN0YXRpYyBpbnQgYWZzX3hhdHRyX2dldF9jZWxsKGNv bnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJICAgICAgc3RydWN0IGRlbnRy eSAqZGVudHJ5LAogCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFt ZSwKLQkJCSAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCisJCQkgICAgICB2b2lkICpi dWZmZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGFmc192bm9kZSAqdm5v ZGUgPSBBRlNfRlNfSShpbm9kZSk7CiAJc3RydWN0IGFmc19jZWxsICpjZWxsID0gdm5vZGUtPnZv bHVtZS0+Y2VsbDsKQEAgLTM2MSw3ICszNjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHhhdHRy X2hhbmRsZXIgYWZzX3hhdHRyX2Fmc19jZWxsX2hhbmRsZXIgPSB7CiBzdGF0aWMgaW50IGFmc194 YXR0cl9nZXRfZmlkKGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJICAg ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNv bnN0IGNoYXIgKm5hbWUsCi0JCQkgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCisJCQkg ICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgYWZz X3Zub2RlICp2bm9kZSA9IEFGU19GU19JKGlub2RlKTsKIAljaGFyIHRleHRbMTYgKyAxICsgMjQg KyAxICsgOCArIDFdOwpAQCAtMzk3LDcgKzM5Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeGF0 dHJfaGFuZGxlciBhZnNfeGF0dHJfYWZzX2ZpZF9oYW5kbGVyID0gewogc3RhdGljIGludCBhZnNf eGF0dHJfZ2V0X3ZvbHVtZShjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwKIAkJ CSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5v ZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXpl KQorCQkJICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCXN0 cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koaW5vZGUpOwogCWNvbnN0IGNoYXIgKnZv bG5hbWUgPSB2bm9kZS0+dm9sdW1lLT5uYW1lOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMveGF0dHIu YyBiL2ZzL2J0cmZzL3hhdHRyLmMKaW5kZXggOTVkOWFlYmZmMmM0Li4xZTUyMmUxNDUzNDQgMTAw NjQ0Ci0tLSBhL2ZzL2J0cmZzL3hhdHRyLmMKKysrIGIvZnMvYnRyZnMveGF0dHIuYwpAQCAtMzUz LDcgKzM1Myw4IEBAIHNzaXplX3QgYnRyZnNfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRy eSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKIAogc3RhdGljIGludCBidHJmc194YXR0cl9o YW5kbGVyX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwKIAkJCQkgICBz dHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgY29uc3Qg Y2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJCQkgICBjb25zdCBjaGFy ICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJCSAgIGludCBmbGFncykKIHsK IAluYW1lID0geGF0dHJfZnVsbF9uYW1lKGhhbmRsZXIsIG5hbWUpOwogCXJldHVybiBidHJmc19n ZXR4YXR0cihpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgv eGF0dHIuYyBiL2ZzL2NlcGgveGF0dHIuYwppbmRleCAzN2I0NThhOWFmM2EuLmVkYjdlYjlhZTgz ZSAxMDA2NDQKLS0tIGEvZnMvY2VwaC94YXR0ci5jCisrKyBiL2ZzL2NlcGgveGF0dHIuYwpAQCAt MTE3MSw3ICsxMTcxLDggQEAgaW50IF9fY2VwaF9zZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2Rl LCBjb25zdCBjaGFyICpuYW1lLAogCiBzdGF0aWMgaW50IGNlcGhfZ2V0X3hhdHRyX2hhbmRsZXIo Y29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkJICBzdHJ1Y3QgZGVudHJ5 ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICBjb25zdCBjaGFyICpuYW1lLCB2 b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpCisJCQkJICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2 YWx1ZSwgc2l6ZV90IHNpemUsCisJCQkJICBpbnQgZmxhZ3MpCiB7CiAJaWYgKCFjZXBoX2lzX3Zh bGlkX3hhdHRyKG5hbWUpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYgLS1naXQgYS9mcy9j aWZzL3hhdHRyLmMgYi9mcy9jaWZzL3hhdHRyLmMKaW5kZXggOTA3NjE1MDc1OGQ4Li43ZjcxYzA2 Y2U2MzEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMveGF0dHIuYworKysgYi9mcy9jaWZzL3hhdHRyLmMK QEAgLTE5OSw3ICsxOTksNyBAQCBzdGF0aWMgaW50IGNpZnNfY3JlYXRpb25fdGltZV9nZXQoc3Ry dWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCiBzdGF0aWMgaW50IGNp ZnNfeGF0dHJfZ2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJICBz dHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgIGNvbnN0IGNo YXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKKwkJCSAgY29uc3QgY2hhciAqbmFt ZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJc3NpemVfdCByYyA9 IC1FT1BOT1RTVVBQOwogCXVuc2lnbmVkIGludCB4aWQ7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRm cy9pbm9kZS5jIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwppbmRleCAxODQyNmY0ODU1ZjEuLmM3MTBj NzUzMzcyOSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvaW5vZGUuYworKysgYi9mcy9lY3J5cHRm cy9pbm9kZS5jCkBAIC0xMDE4LDcgKzEwMTgsOCBAQCBlY3J5cHRmc19nZXR4YXR0cl9sb3dlcihz dHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnksIHN0cnVjdCBpbm9kZSAqbG93ZXJfaW5vZGUsCiAJ CWdvdG8gb3V0OwogCX0KIAlpbm9kZV9sb2NrKGxvd2VyX2lub2RlKTsKLQlyYyA9IF9fdmZzX2dl dHhhdHRyKGxvd2VyX2RlbnRyeSwgbG93ZXJfaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplKTsKKwly YyA9IF9fdmZzX2dldHhhdHRyKGxvd2VyX2RlbnRyeSwgbG93ZXJfaW5vZGUsIG5hbWUsIHZhbHVl LCBzaXplLAorCQkJICAgIFhBVFRSX05PU0VDVVJJVFkpOwogCWlub2RlX3VubG9jayhsb3dlcl9p bm9kZSk7CiBvdXQ6CiAJcmV0dXJuIHJjOwpAQCAtMTEwMyw3ICsxMTA0LDggQEAgY29uc3Qgc3Ry dWN0IGlub2RlX29wZXJhdGlvbnMgZWNyeXB0ZnNfbWFpbl9pb3BzID0gewogCiBzdGF0aWMgaW50 IGVjcnlwdGZzX3hhdHRyX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwK IAkJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJ CSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCisJCQkg ICAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJICAg ICAgaW50IGZsYWdzKQogewogCXJldHVybiBlY3J5cHRmc19nZXR4YXR0cihkZW50cnksIGlub2Rl LCBuYW1lLCBidWZmZXIsIHNpemUpOwogfQpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvbW1hcC5j IGIvZnMvZWNyeXB0ZnMvbW1hcC5jCmluZGV4IGNmZmEwYzFlYzgyOS4uMjM2MmJlM2UzYjRkIDEw MDY0NAotLS0gYS9mcy9lY3J5cHRmcy9tbWFwLmMKKysrIGIvZnMvZWNyeXB0ZnMvbW1hcC5jCkBA IC00MjIsNyArNDIyLDcgQEAgc3RhdGljIGludCBlY3J5cHRmc193cml0ZV9pbm9kZV9zaXplX3Rv X3hhdHRyKHN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfaW5vZGUpCiAJfQogCWlub2RlX2xvY2sobG93 ZXJfaW5vZGUpOwogCXNpemUgPSBfX3Zmc19nZXR4YXR0cihsb3dlcl9kZW50cnksIGxvd2VyX2lu b2RlLCBFQ1JZUFRGU19YQVRUUl9OQU1FLAotCQkJICAgICAgeGF0dHJfdmlydCwgUEFHRV9TSVpF KTsKKwkJCSAgICAgIHhhdHRyX3ZpcnQsIFBBR0VfU0laRSwgWEFUVFJfTk9TRUNVUklUWSk7CiAJ aWYgKHNpemUgPCAwKQogCQlzaXplID0gODsKIAlwdXRfdW5hbGlnbmVkX2JlNjQoaV9zaXplX3Jl YWQoZWNyeXB0ZnNfaW5vZGUpLCB4YXR0cl92aXJ0KTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIveGF0 dHJfdHJ1c3RlZC5jIGIvZnMvZXh0Mi94YXR0cl90cnVzdGVkLmMKaW5kZXggNDlhZGQxMTA3ODUw Li44ZDMxMzY2NGYwZmEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIveGF0dHJfdHJ1c3RlZC5jCisrKyBi L2ZzL2V4dDIveGF0dHJfdHJ1c3RlZC5jCkBAIC0xOCw3ICsxOCw3IEBAIGV4dDJfeGF0dHJfdHJ1 c3RlZF9saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHN0YXRpYyBpbnQKIGV4dDJfeGF0dHJf dHJ1c3RlZF9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCSAgICAg ICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCSAgICAgICBj b25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorCQkgICAgICAgY29u c3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewog CXJldHVybiBleHQyX3hhdHRyX2dldChpbm9kZSwgRVhUMl9YQVRUUl9JTkRFWF9UUlVTVEVELCBu YW1lLAogCQkJICAgICAgYnVmZmVyLCBzaXplKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIveGF0dHJf dXNlci5jIGIvZnMvZXh0Mi94YXR0cl91c2VyLmMKaW5kZXggYzI0M2EzYjRkNjlkLi43MTJiN2M5 NWNjNjQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIveGF0dHJfdXNlci5jCisrKyBiL2ZzL2V4dDIveGF0 dHJfdXNlci5jCkBAIC0yMCw3ICsyMCw3IEBAIGV4dDJfeGF0dHJfdXNlcl9saXN0KHN0cnVjdCBk ZW50cnkgKmRlbnRyeSkKIHN0YXRpYyBpbnQKIGV4dDJfeGF0dHJfdXNlcl9nZXQoY29uc3Qgc3Ry dWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCSAgICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQs IHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCSAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZm ZXIsIHNpemVfdCBzaXplKQorCQkgICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBz aXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCWlmICghdGVzdF9vcHQoaW5vZGUtPmlfc2IsIFhB VFRSX1VTRVIpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3hh dHRyX3NlY3VyaXR5LmMgYi9mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMKaW5kZXggMTk3YTlkOGEx NWVmLi41MGZiNzEzOTNmYjYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYwor KysgYi9mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMKQEAgLTE1LDcgKzE1LDcgQEAKIHN0YXRpYyBp bnQKIGV4dDRfeGF0dHJfc2VjdXJpdHlfZ2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpo YW5kbGVyLAogCQkJc3RydWN0IGRlbnRyeSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAot CQkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJCWNvbnN0 IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKIAly ZXR1cm4gZXh0NF94YXR0cl9nZXQoaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfU0VDVVJJVFksCiAJ CQkgICAgICBuYW1lLCBidWZmZXIsIHNpemUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0cl90 cnVzdGVkLmMgYi9mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYwppbmRleCBlOTM4OWU1ZDc1YzMuLjY0 YmQ4Zjg2YzFmMSAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0cl90cnVzdGVkLmMKKysrIGIvZnMv ZXh0NC94YXR0cl90cnVzdGVkLmMKQEAgLTIyLDcgKzIyLDcgQEAgZXh0NF94YXR0cl90cnVzdGVk X2xpc3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogc3RhdGljIGludAogZXh0NF94YXR0cl90cnVz dGVkX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwKIAkJICAgICAgIHN0 cnVjdCBkZW50cnkgKnVudXNlZCwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJICAgICAgIGNvbnN0 IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCisJCSAgICAgICBjb25zdCBj aGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJcmV0 dXJuIGV4dDRfeGF0dHJfZ2V0KGlub2RlLCBFWFQ0X1hBVFRSX0lOREVYX1RSVVNURUQsCiAJCQkg ICAgICBuYW1lLCBidWZmZXIsIHNpemUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0cl91c2Vy LmMgYi9mcy9leHQ0L3hhdHRyX3VzZXIuYwppbmRleCBkNDU0NjE4NGIzNGIuLmI3MzAxMzczODIw ZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0cl91c2VyLmMKKysrIGIvZnMvZXh0NC94YXR0cl91 c2VyLmMKQEAgLTIxLDcgKzIxLDcgQEAgZXh0NF94YXR0cl91c2VyX2xpc3Qoc3RydWN0IGRlbnRy eSAqZGVudHJ5KQogc3RhdGljIGludAogZXh0NF94YXR0cl91c2VyX2dldChjb25zdCBzdHJ1Y3Qg eGF0dHJfaGFuZGxlciAqaGFuZGxlciwKIAkJICAgIHN0cnVjdCBkZW50cnkgKnVudXNlZCwgc3Ry dWN0IGlub2RlICppbm9kZSwKLQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwg c2l6ZV90IHNpemUpCisJCSAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVf dCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJaWYgKCF0ZXN0X29wdChpbm9kZS0+aV9zYiwgWEFUVFJf VVNFUikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2ZzL2YyZnMveGF0dHIu YyBiL2ZzL2YyZnMveGF0dHIuYwppbmRleCBiMzJjNDU2MjE2NzkuLjc2NTU5ZGE4ZGZiYSAxMDA2 NDQKLS0tIGEvZnMvZjJmcy94YXR0ci5jCisrKyBiL2ZzL2YyZnMveGF0dHIuYwpAQCAtMjQsNyAr MjQsNyBAQAogCiBzdGF0aWMgaW50IGYyZnNfeGF0dHJfZ2VuZXJpY19nZXQoY29uc3Qgc3RydWN0 IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCXN0cnVjdCBkZW50cnkgKnVudXNlZCwgc3RydWN0 IGlub2RlICppbm9kZSwKLQkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qg c2l6ZSkKKwkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50 IGZsYWdzKQogewogCXN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSA9IEYyRlNfU0IoaW5vZGUtPmlf c2IpOwogCkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBib29sIGYyZnNfeGF0dHJfdHJ1c3RlZF9s aXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAogc3RhdGljIGludCBmMmZzX3hhdHRyX2Fkdmlz ZV9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCXN0cnVjdCBkZW50 cnkgKnVudXNlZCwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJY29uc3QgY2hhciAqbmFtZSwgdm9p ZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVy LCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCWlmIChidWZmZXIpCiAJCSooKGNoYXIgKili dWZmZXIpID0gRjJGU19JKGlub2RlKS0+aV9hZHZpc2U7CmRpZmYgLS1naXQgYS9mcy9mdXNlL3hh dHRyLmMgYi9mcy9mdXNlL3hhdHRyLmMKaW5kZXggNDMzNzE3NjQwZjc4Li5kMWVmNzgwODMwNGUg MTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UveGF0dHIuYworKysgYi9mcy9mdXNlL3hhdHRyLmMKQEAgLTE3 Niw3ICsxNzYsNyBAQCBpbnQgZnVzZV9yZW1vdmV4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBj b25zdCBjaGFyICpuYW1lKQogCiBzdGF0aWMgaW50IGZ1c2VfeGF0dHJfZ2V0KGNvbnN0IHN0cnVj dCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3Ry dWN0IGlub2RlICppbm9kZSwKLQkJCSBjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwgc2l6 ZV90IHNpemUpCisJCQkgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXpl LCBpbnQgZmxhZ3MpCiB7CiAJcmV0dXJuIGZ1c2VfZ2V0eGF0dHIoaW5vZGUsIG5hbWUsIHZhbHVl LCBzaXplKTsKIH0KQEAgLTE5OSw3ICsxOTksNyBAQCBzdGF0aWMgYm9vbCBub194YXR0cl9saXN0 KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAogc3RhdGljIGludCBub194YXR0cl9nZXQoY29uc3Qg c3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnks IHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQljb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwg c2l6ZV90IHNpemUpCisJCQljb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNp emUsIGludCBmbGFncykKIHsKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CmRpZmYgLS1naXQgYS9m cy9nZnMyL3hhdHRyLmMgYi9mcy9nZnMyL3hhdHRyLmMKaW5kZXggYmJlNTkzZDE2YmVhLi5hOWRi MDY3YTk5YzEgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIveGF0dHIuYworKysgYi9mcy9nZnMyL3hhdHRy LmMKQEAgLTU4OCw3ICs1ODgsOCBAQCBzdGF0aWMgaW50IF9fZ2ZzMl94YXR0cl9nZXQoc3RydWN0 IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKIAogc3RhdGljIGludCBnZnMyX3hhdHRy X2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwKIAkJCSAgc3RydWN0IGRl bnRyeSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICBjb25zdCBjaGFyICpuYW1l LCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorCQkJICBjb25zdCBjaGFyICpuYW1lLCB2b2lk ICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJICBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGdmczJf aW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7CmRpZmYg LS1naXQgYS9mcy9oZnMvYXR0ci5jIGIvZnMvaGZzL2F0dHIuYwppbmRleCA3NGZhNjI2NDMxMzYu LjA4MjIyYTljNWQzMSAxMDA2NDQKLS0tIGEvZnMvaGZzL2F0dHIuYworKysgYi9mcy9oZnMvYXR0 ci5jCkBAIC0xMTUsNyArMTE1LDcgQEAgc3RhdGljIHNzaXplX3QgX19oZnNfZ2V0eGF0dHIoc3Ry dWN0IGlub2RlICppbm9kZSwgZW51bSBoZnNfeGF0dHJfdHlwZSB0eXBlLAogCiBzdGF0aWMgaW50 IGhmc194YXR0cl9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkg c3RydWN0IGRlbnRyeSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJIGNvbnN0IGNo YXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKKwkJCSBjb25zdCBjaGFyICpuYW1l LCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKIAlyZXR1cm4gX19oZnNf Z2V0eGF0dHIoaW5vZGUsIGhhbmRsZXItPmZsYWdzLCB2YWx1ZSwgc2l6ZSk7CiB9CmRpZmYgLS1n aXQgYS9mcy9oZnNwbHVzL3hhdHRyLmMgYi9mcy9oZnNwbHVzL3hhdHRyLmMKaW5kZXggYmIwYjI3 ZDg4ZTUwLi4zODFjMmFhZWRiYzggMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMveGF0dHIuYworKysg Yi9mcy9oZnNwbHVzL3hhdHRyLmMKQEAgLTgzOSw3ICs4MzksOCBAQCBzdGF0aWMgaW50IGhmc3Bs dXNfcmVtb3ZleGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSkKIAog c3RhdGljIGludCBoZnNwbHVzX29zeF9nZXR4YXR0cihjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxl ciAqaGFuZGxlciwKIAkJCQlzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5v ZGUsCi0JCQkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJ CQljb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJCWludCBm bGFncykKIHsKIAkvKgogCSAqIERvbid0IGFsbG93IHJldHJpZXZpbmcgcHJvcGVybHkgcHJlZml4 ZWQgYXR0cmlidXRlcwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy94YXR0cl90cnVzdGVkLmMgYi9m cy9oZnNwbHVzL3hhdHRyX3RydXN0ZWQuYwppbmRleCBmYmFkOTFlMWRhZGEuLjU0ZDkyNjMxNGY4 YyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy94YXR0cl90cnVzdGVkLmMKKysrIGIvZnMvaGZzcGx1 cy94YXR0cl90cnVzdGVkLmMKQEAgLTE0LDcgKzE0LDggQEAKIAogc3RhdGljIGludCBoZnNwbHVz X3RydXN0ZWRfZ2V0eGF0dHIoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJ CQkJICAgIHN0cnVjdCBkZW50cnkgKnVudXNlZCwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkg ICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJCQkgICAg Y29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAorCQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50 IGZsYWdzKQogewogCXJldHVybiBoZnNwbHVzX2dldHhhdHRyKGlub2RlLCBuYW1lLCBidWZmZXIs IHNpemUsCiAJCQkJWEFUVFJfVFJVU1RFRF9QUkVGSVgsCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVz L3hhdHRyX3VzZXIuYyBiL2ZzL2hmc3BsdXMveGF0dHJfdXNlci5jCmluZGV4IDc0ZDE5ZmFmMjU1 ZS4uNGQyYjFmZmZmODg3IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL3hhdHRyX3VzZXIuYworKysg Yi9mcy9oZnNwbHVzL3hhdHRyX3VzZXIuYwpAQCAtMTQsNyArMTQsOCBAQAogCiBzdGF0aWMgaW50 IGhmc3BsdXNfdXNlcl9nZXR4YXR0cihjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxl ciwKIAkJCQkgc3RydWN0IGRlbnRyeSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJ CSBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorCQkJCSBjb25z dCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJCSBpbnQgZmxhZ3Mp CiB7CiAKIAlyZXR1cm4gaGZzcGx1c19nZXR4YXR0cihpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXpl LApkaWZmIC0tZ2l0IGEvZnMvamZmczIvc2VjdXJpdHkuYyBiL2ZzL2pmZnMyL3NlY3VyaXR5LmMK aW5kZXggYzIzMzJlMzBmMjE4Li5lNmY0MmZlNDM1YWYgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3Nl Y3VyaXR5LmMKKysrIGIvZnMvamZmczIvc2VjdXJpdHkuYwpAQCAtNTAsNyArNTAsOCBAQCBpbnQg amZmczJfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRp ciwKIC8qIC0tLS0gWEFUVFIgSGFuZGxlciBmb3IgInNlY3VyaXR5LioiIC0tLS0tLS0tLS0tLS0t LS0tICovCiBzdGF0aWMgaW50IGpmZnMyX3NlY3VyaXR5X2dldHhhdHRyKGNvbnN0IHN0cnVjdCB4 YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJCSAgIHN0cnVjdCBkZW50cnkgKnVudXNlZCwgc3Ry dWN0IGlub2RlICppbm9kZSwKLQkJCQkgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIs IHNpemVfdCBzaXplKQorCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6 ZV90IHNpemUsCisJCQkJICAgaW50IGZsYWdzKQogewogCXJldHVybiBkb19qZmZzMl9nZXR4YXR0 cihpbm9kZSwgSkZGUzJfWFBSRUZJWF9TRUNVUklUWSwKIAkJCQkgbmFtZSwgYnVmZmVyLCBzaXpl KTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3hhdHRyX3RydXN0ZWQuYyBiL2ZzL2pmZnMyL3hhdHRy X3RydXN0ZWQuYwppbmRleCA1ZDYwMzA4MjZjNTIuLjlkY2NhYWU1NDlmNSAxMDA2NDQKLS0tIGEv ZnMvamZmczIveGF0dHJfdHJ1c3RlZC5jCisrKyBiL2ZzL2pmZnMyL3hhdHRyX3RydXN0ZWQuYwpA QCAtMTgsNyArMTgsOCBAQAogCiBzdGF0aWMgaW50IGpmZnMyX3RydXN0ZWRfZ2V0eGF0dHIoY29u c3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkJICBzdHJ1Y3QgZGVudHJ5ICp1 bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICBjb25zdCBjaGFyICpuYW1lLCB2b2lk ICpidWZmZXIsIHNpemVfdCBzaXplKQorCQkJCSAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVm ZmVyLCBzaXplX3Qgc2l6ZSwKKwkJCQkgIGludCBmbGFncykKIHsKIAlyZXR1cm4gZG9famZmczJf Z2V0eGF0dHIoaW5vZGUsIEpGRlMyX1hQUkVGSVhfVFJVU1RFRCwKIAkJCQkgbmFtZSwgYnVmZmVy LCBzaXplKTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3hhdHRyX3VzZXIuYyBiL2ZzL2pmZnMyL3hh dHRyX3VzZXIuYwppbmRleCA5ZDAyN2I0YWJjZjkuLmMwOTgzYTNlODEwYiAxMDA2NDQKLS0tIGEv ZnMvamZmczIveGF0dHJfdXNlci5jCisrKyBiL2ZzL2pmZnMyL3hhdHRyX3VzZXIuYwpAQCAtMTgs NyArMTgsOCBAQAogCiBzdGF0aWMgaW50IGpmZnMyX3VzZXJfZ2V0eGF0dHIoY29uc3Qgc3RydWN0 IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqdW51c2Vk LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQg KmJ1ZmZlciwgc2l6ZV90IHNpemUpCisJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAq YnVmZmVyLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgICBpbnQgZmxhZ3MpCiB7CiAJcmV0dXJuIGRv X2pmZnMyX2dldHhhdHRyKGlub2RlLCBKRkZTMl9YUFJFRklYX1VTRVIsCiAJCQkJIG5hbWUsIGJ1 ZmZlciwgc2l6ZSk7CmRpZmYgLS1naXQgYS9mcy9qZnMveGF0dHIuYyBiL2ZzL2pmcy94YXR0ci5j CmluZGV4IGRiNDFlNzgwMzE2My4uNWM3OWEzNWJmNjJmIDEwMDY0NAotLS0gYS9mcy9qZnMveGF0 dHIuYworKysgYi9mcy9qZnMveGF0dHIuYwpAQCAtOTI1LDcgKzkyNSw3IEBAIHN0YXRpYyBpbnQg X19qZnNfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCiAK IHN0YXRpYyBpbnQgamZzX3hhdHRyX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFu ZGxlciwKIAkJCSBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0J CQkgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQorCQkJIGNvbnN0 IGNoYXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCW5h bWUgPSB4YXR0cl9mdWxsX25hbWUoaGFuZGxlciwgbmFtZSk7CiAJcmV0dXJuIF9famZzX2dldHhh dHRyKGlub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSk7CkBAIC05NDIsNyArOTQyLDggQEAgc3RhdGlj IGludCBqZnNfeGF0dHJfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAog CiBzdGF0aWMgaW50IGpmc194YXR0cl9nZXRfb3MyKGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVy ICpoYW5kbGVyLAogCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAq aW5vZGUsCi0JCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6 ZSkKKwkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLAor CQkJICAgICBpbnQgZmxhZ3MpCiB7CiAJaWYgKGlzX2tub3duX25hbWVzcGFjZShuYW1lKSkKIAkJ cmV0dXJuIC1FT1BOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvZnMva2VybmZzL2lub2RlLmMgYi9mcy9r ZXJuZnMvaW5vZGUuYwppbmRleCBmM2YzOTg0Y2NlODAuLjg5ZGIyNGNlNjQ0ZSAxMDA2NDQKLS0t IGEvZnMva2VybmZzL2lub2RlLmMKKysrIGIvZnMva2VybmZzL2lub2RlLmMKQEAgLTMwOSw3ICsz MDksOCBAQCBpbnQga2VybmZzX3hhdHRyX3NldChzdHJ1Y3Qga2VybmZzX25vZGUgKmtuLCBjb25z dCBjaGFyICpuYW1lLAogCiBzdGF0aWMgaW50IGtlcm5mc192ZnNfeGF0dHJfZ2V0KGNvbnN0IHN0 cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJCXN0cnVjdCBkZW50cnkgKnVudXNlZCwg c3RydWN0IGlub2RlICppbm9kZSwKLQkJCQljb25zdCBjaGFyICpzdWZmaXgsIHZvaWQgKnZhbHVl LCBzaXplX3Qgc2l6ZSkKKwkJCQljb25zdCBjaGFyICpzdWZmaXgsIHZvaWQgKnZhbHVlLCBzaXpl X3Qgc2l6ZSwKKwkJCQlpbnQgZmxhZ3MpCiB7CiAJY29uc3QgY2hhciAqbmFtZSA9IHhhdHRyX2Z1 bGxfbmFtZShoYW5kbGVyLCBzdWZmaXgpOwogCXN0cnVjdCBrZXJuZnNfbm9kZSAqa24gPSBpbm9k ZS0+aV9wcml2YXRlOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZz NHByb2MuYwppbmRleCAzOTg5NmFmYzZlZGYuLjVlNmE1ODY4NWNkMCAxMDA2NDQKLS0tIGEvZnMv bmZzL25mczRwcm9jLmMKKysrIGIvZnMvbmZzL25mczRwcm9jLmMKQEAgLTcyMDMsNyArNzIwMyw4 IEBAIHN0YXRpYyBpbnQgbmZzNF94YXR0cl9zZXRfbmZzNF9hY2woY29uc3Qgc3RydWN0IHhhdHRy X2hhbmRsZXIgKmhhbmRsZXIsCiAKIHN0YXRpYyBpbnQgbmZzNF94YXR0cl9nZXRfbmZzNF9hY2wo Y29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkJICAgc3RydWN0IGRlbnRy eSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgIGNvbnN0IGNoYXIgKmtleSwg dm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuKQorCQkJCSAgIGNvbnN0IGNoYXIgKmtleSwgdm9pZCAq YnVmLCBzaXplX3QgYnVmbGVuLAorCQkJCSAgIGludCBmbGFncykKIHsKIAlyZXR1cm4gbmZzNF9w cm9jX2dldF9hY2woaW5vZGUsIGJ1ZiwgYnVmbGVuKTsKIH0KQEAgLTcyMjgsNyArNzIyOSw4IEBA IHN0YXRpYyBpbnQgbmZzNF94YXR0cl9zZXRfbmZzNF9sYWJlbChjb25zdCBzdHJ1Y3QgeGF0dHJf aGFuZGxlciAqaGFuZGxlciwKIAogc3RhdGljIGludCBuZnM0X3hhdHRyX2dldF9uZnM0X2xhYmVs KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJCSAgICAgc3RydWN0IGRl bnRyeSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICAgY29uc3QgY2hhciAq a2V5LCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4pCisJCQkJICAgICBjb25zdCBjaGFyICprZXks IHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKKwkJCQkgICAgIGludCBmbGFncykKIHsKIAlpZiAo c2VjdXJpdHlfaXNtYWNsYWJlbChrZXkpKQogCQlyZXR1cm4gbmZzNF9nZXRfc2VjdXJpdHlfbGFi ZWwoaW5vZGUsIGJ1ZiwgYnVmbGVuKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9m cy9vY2ZzMi94YXR0ci5jCmluZGV4IDM4NWYzYWFhMjQ0OC4uMDZlNjE1NjQyNDIyIDEwMDY0NAot LS0gYS9mcy9vY2ZzMi94YXR0ci5jCisrKyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTcyNDUsNyAr NzI0NSw4IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpk aXIsCiAgKi8KIHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2VjdXJpdHlfZ2V0KGNvbnN0IHN0cnVj dCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJCSAgICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQs IHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1 ZmZlciwgc2l6ZV90IHNpemUpCisJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZl ciwgc2l6ZV90IHNpemUsCisJCQkJICAgIGludCBmbGFncykKIHsKIAlyZXR1cm4gb2NmczJfeGF0 dHJfZ2V0KGlub2RlLCBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSwKIAkJCSAgICAgICBuYW1l LCBidWZmZXIsIHNpemUpOwpAQCAtNzMxNyw3ICs3MzE4LDggQEAgY29uc3Qgc3RydWN0IHhhdHRy X2hhbmRsZXIgb2NmczJfeGF0dHJfc2VjdXJpdHlfaGFuZGxlciA9IHsKICAqLwogc3RhdGljIGlu dCBvY2ZzMl94YXR0cl90cnVzdGVkX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFu ZGxlciwKIAkJCQkgICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUs Ci0JCQkJICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJ CQkgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJCSAg IGludCBmbGFncykKIHsKIAlyZXR1cm4gb2NmczJfeGF0dHJfZ2V0KGlub2RlLCBPQ0ZTMl9YQVRU Ul9JTkRFWF9UUlVTVEVELAogCQkJICAgICAgIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7CkBAIC03MzQz LDcgKzczNDUsOCBAQCBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBvY2ZzMl94YXR0cl90cnVz dGVkX2hhbmRsZXIgPSB7CiAgKi8KIHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfdXNlcl9nZXQoY29u c3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkJc3RydWN0IGRlbnRyeSAqdW51 c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCWNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1 ZmZlciwgc2l6ZV90IHNpemUpCisJCQkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBz aXplX3Qgc2l6ZSwKKwkJCQlpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2Ig PSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CiAKZGlmZiAtLWdpdCBhL2ZzL29yYW5nZWZzL3hhdHRy LmMgYi9mcy9vcmFuZ2Vmcy94YXR0ci5jCmluZGV4IGJkYzI4NWFlYTM2MC4uZWY0MTgwYmZmN2Ji IDEwMDY0NAotLS0gYS9mcy9vcmFuZ2Vmcy94YXR0ci5jCisrKyBiL2ZzL29yYW5nZWZzL3hhdHRy LmMKQEAgLTU0MSw3ICs1NDEsOCBAQCBzdGF0aWMgaW50IG9yYW5nZWZzX3hhdHRyX2dldF9kZWZh dWx0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJCSAgICAgIHN0cnVj dCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwKIAkJCQkgICAgICB2 b2lkICpidWZmZXIsCi0JCQkJICAgICAgc2l6ZV90IHNpemUpCisJCQkJICAgICAgc2l6ZV90IHNp emUsCisJCQkJICAgICAgaW50IGZsYWdzKQogewogCXJldHVybiBvcmFuZ2Vmc19pbm9kZV9nZXR4 YXR0cihpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKIApkaWZmIC0tZ2l0IGEvZnMvb3Zlcmxh eWZzL3N1cGVyLmMgYi9mcy9vdmVybGF5ZnMvc3VwZXIuYwppbmRleCBiMzY4ZTJlMTAyZmEuLmE3 YjIxZjJlYTJkZCAxMDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL3N1cGVyLmMKKysrIGIvZnMvb3Zl cmxheWZzL3N1cGVyLmMKQEAgLTg1NCw3ICs4NTQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG92 bF9zcGxpdF9sb3dlcmRpcnMoY2hhciAqc3RyKQogc3RhdGljIGludCBfX21heWJlX3VudXNlZAog b3ZsX3Bvc2l4X2FjbF94YXR0cl9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRs ZXIsCiAJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQlj b25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorCQkJY29uc3QgY2hh ciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCXJldHVy biBvdmxfeGF0dHJfZ2V0KGRlbnRyeSwgaW5vZGUsIGhhbmRsZXItPm5hbWUsIGJ1ZmZlciwgc2l6 ZSk7CiB9CkBAIC05MTksNyArOTE5LDggQEAgb3ZsX3Bvc2l4X2FjbF94YXR0cl9zZXQoY29uc3Qg c3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAKIHN0YXRpYyBpbnQgb3ZsX293bl94YXR0 cl9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkgICAgIHN0cnVj dCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgY29uc3QgY2hh ciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJCSAgICAgY29uc3QgY2hhciAq bmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgaW50IGZsYWdzKQogewog CXJldHVybiAtRU9QTk9UU1VQUDsKIH0KQEAgLTkzNCw3ICs5MzUsOCBAQCBzdGF0aWMgaW50IG92 bF9vd25feGF0dHJfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCiBz dGF0aWMgaW50IG92bF9vdGhlcl94YXR0cl9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIg KmhhbmRsZXIsCiAJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUg Kmlub2RlLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90 IHNpemUpCisJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qg c2l6ZSwKKwkJCSAgICAgICBpbnQgZmxhZ3MpCiB7CiAJcmV0dXJuIG92bF94YXR0cl9nZXQoZGVu dHJ5LCBpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3Bvc2l4 X2FjbC5jIGIvZnMvcG9zaXhfYWNsLmMKaW5kZXggODRhZDFjOTBkNTM1Li5jZDU1NjIxZTU3MGIg MTAwNjQ0Ci0tLSBhL2ZzL3Bvc2l4X2FjbC5jCisrKyBiL2ZzL3Bvc2l4X2FjbC5jCkBAIC04MzIs NyArODMyLDcgQEAgRVhQT1JUX1NZTUJPTCAocG9zaXhfYWNsX3RvX3hhdHRyKTsKIHN0YXRpYyBp bnQKIHBvc2l4X2FjbF94YXR0cl9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRs ZXIsCiAJCSAgICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0J CSAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpCisJCSAgICBj b25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsK IAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAJaW50IGVycm9yOwpkaWZmIC0tZ2l0IGEvZnMvcmVp c2VyZnMveGF0dHJfc2VjdXJpdHkuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyX3NlY3VyaXR5LmMKaW5k ZXggMjBiZTlhMGU1ODcwLi5lZWRmYTA3YTRmZDAgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hh dHRyX3NlY3VyaXR5LmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHJfc2VjdXJpdHkuYwpAQCAtMTEs NyArMTEsOCBAQAogCiBzdGF0aWMgaW50CiBzZWN1cml0eV9nZXQoY29uc3Qgc3RydWN0IHhhdHRy X2hhbmRsZXIgKmhhbmRsZXIsIHN0cnVjdCBkZW50cnkgKnVudXNlZCwKLQkgICAgIHN0cnVjdCBp bm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUp CisJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZm ZXIsIHNpemVfdCBzaXplLAorCSAgICAgaW50IGZsYWdzKQogewogCWlmIChJU19QUklWQVRFKGlu b2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyX3Ry dXN0ZWQuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyX3RydXN0ZWQuYwppbmRleCA1ZWQ0OGRhM2QwMmIu LjJkMTFkOTg2MDVkZCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMveGF0dHJfdHJ1c3RlZC5jCisr KyBiL2ZzL3JlaXNlcmZzL3hhdHRyX3RydXN0ZWQuYwpAQCAtMTAsNyArMTAsOCBAQAogCiBzdGF0 aWMgaW50CiB0cnVzdGVkX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwg c3RydWN0IGRlbnRyeSAqdW51c2VkLAotCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBj aGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorCSAgICBzdHJ1Y3QgaW5vZGUg Kmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCSAg ICBpbnQgZmxhZ3MpCiB7CiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8IElTX1BSSVZB VEUoaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0 dHJfdXNlci5jIGIvZnMvcmVpc2VyZnMveGF0dHJfdXNlci5jCmluZGV4IGE1NzNjYTQ1YmFjYy4u MmE1OWQ4NWM2OWM5IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy94YXR0cl91c2VyLmMKKysrIGIv ZnMvcmVpc2VyZnMveGF0dHJfdXNlci5jCkBAIC05LDcgKzksOCBAQAogCiBzdGF0aWMgaW50CiB1 c2VyX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwgc3RydWN0IGRlbnRy eSAqdW51c2VkLAotCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lk ICpidWZmZXIsIHNpemVfdCBzaXplKQorCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFy ICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCSBpbnQgZmxhZ3MpCiB7CiAJaWYg KCFyZWlzZXJmc194YXR0cnNfdXNlcihpbm9kZS0+aV9zYikpCiAJCXJldHVybiAtRU9QTk9UU1VQ UDsKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL3hhdHRyLmMgYi9mcy9zcXVhc2hmcy94YXR0ci5j CmluZGV4IGUxZTNmM2RkNWEwNi4uZDhkNThjOTkwNjUyIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hm cy94YXR0ci5jCisrKyBiL2ZzL3NxdWFzaGZzL3hhdHRyLmMKQEAgLTIwNCw3ICsyMDQsNyBAQCBz dGF0aWMgaW50IHNxdWFzaGZzX3hhdHRyX2hhbmRsZXJfZ2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9o YW5kbGVyICpoYW5kbGVyLAogCQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKnVudXNlZCwKIAkJCQkg ICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCi0J CQkJICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJCQkgICAgICB2b2lkICpidWZm ZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJcmV0dXJuIHNxdWFzaGZzX3hhdHRyX2dl dChpbm9kZSwgaGFuZGxlci0+ZmxhZ3MsIG5hbWUsCiAJCWJ1ZmZlciwgc2l6ZSk7CmRpZmYgLS1n aXQgYS9mcy94YXR0ci5jIGIvZnMveGF0dHIuYwppbmRleCA5MGRkNzhmMGViMjcuLjcxZjg4NzUx OGQ2ZiAxMDA2NDQKLS0tIGEvZnMveGF0dHIuYworKysgYi9mcy94YXR0ci5jCkBAIC0yODEsNyAr MjgxLDcgQEAgdmZzX2dldHhhdHRyX2FsbG9jKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qg Y2hhciAqbmFtZSwgY2hhciAqKnhhdHRyX3ZhbHVlLAogCQlyZXR1cm4gUFRSX0VSUihoYW5kbGVy KTsKIAlpZiAoIWhhbmRsZXItPmdldCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCWVycm9yID0g aGFuZGxlci0+Z2V0KGhhbmRsZXIsIGRlbnRyeSwgaW5vZGUsIG5hbWUsIE5VTEwsIDApOworCWVy cm9yID0gaGFuZGxlci0+Z2V0KGhhbmRsZXIsIGRlbnRyeSwgaW5vZGUsIG5hbWUsIE5VTEwsIDAs IDApOwogCWlmIChlcnJvciA8IDApCiAJCXJldHVybiBlcnJvcjsKIApAQCAtMjkyLDMyICsyOTIs MjAgQEAgdmZzX2dldHhhdHRyX2FsbG9jKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hh ciAqbmFtZSwgY2hhciAqKnhhdHRyX3ZhbHVlLAogCQltZW1zZXQodmFsdWUsIDAsIGVycm9yICsg MSk7CiAJfQogCi0JZXJyb3IgPSBoYW5kbGVyLT5nZXQoaGFuZGxlciwgZGVudHJ5LCBpbm9kZSwg bmFtZSwgdmFsdWUsIGVycm9yKTsKKwllcnJvciA9IGhhbmRsZXItPmdldChoYW5kbGVyLCBkZW50 cnksIGlub2RlLCBuYW1lLCB2YWx1ZSwgZXJyb3IsIDApOwogCSp4YXR0cl92YWx1ZSA9IHZhbHVl OwogCXJldHVybiBlcnJvcjsKIH0KIAogc3NpemVfdAogX192ZnNfZ2V0eGF0dHIoc3RydWN0IGRl bnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCSAg ICAgICB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpCisJICAgICAgIHZvaWQgKnZhbHVlLCBzaXpl X3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCWNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5k bGVyOwotCi0JaGFuZGxlciA9IHhhdHRyX3Jlc29sdmVfbmFtZShpbm9kZSwgJm5hbWUpOwotCWlm IChJU19FUlIoaGFuZGxlcikpCi0JCXJldHVybiBQVFJfRVJSKGhhbmRsZXIpOwotCWlmICghaGFu ZGxlci0+Z2V0KQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JcmV0dXJuIGhhbmRsZXItPmdldCho YW5kbGVyLCBkZW50cnksIGlub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSk7Ci19Ci1FWFBPUlRfU1lN Qk9MKF9fdmZzX2dldHhhdHRyKTsKLQotc3NpemVfdAotdmZzX2dldHhhdHRyKHN0cnVjdCBkZW50 cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQot ewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJaW50IGVycm9yOwog CisJaWYgKGZsYWdzICYgWEFUVFJfTk9TRUNVUklUWSkKKwkJZ290byBub2xzbTsKIAllcnJvciA9 IHhhdHRyX3Blcm1pc3Npb24oaW5vZGUsIG5hbWUsIE1BWV9SRUFEKTsKIAlpZiAoZXJyb3IpCiAJ CXJldHVybiBlcnJvcjsKQEAgLTMzOSw3ICszMjcsMTkgQEAgdmZzX2dldHhhdHRyKHN0cnVjdCBk ZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXpl KQogCQlyZXR1cm4gcmV0OwogCX0KIG5vbHNtOgotCXJldHVybiBfX3Zmc19nZXR4YXR0cihkZW50 cnksIGlub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSk7CisJaGFuZGxlciA9IHhhdHRyX3Jlc29sdmVf bmFtZShpbm9kZSwgJm5hbWUpOworCWlmIChJU19FUlIoaGFuZGxlcikpCisJCXJldHVybiBQVFJf RVJSKGhhbmRsZXIpOworCWlmICghaGFuZGxlci0+Z2V0KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7 CisJcmV0dXJuIGhhbmRsZXItPmdldChoYW5kbGVyLCBkZW50cnksIGlub2RlLCBuYW1lLCB2YWx1 ZSwgc2l6ZSwgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChfX3Zmc19nZXR4YXR0cik7CisKK3Nz aXplX3QKK3Zmc19nZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5h bWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gX192ZnNfZ2V0eGF0dHIo ZGVudHJ5LCBkZW50cnktPmRfaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCAwKTsKIH0KIEVYUE9S VF9TWU1CT0xfR1BMKHZmc19nZXR4YXR0cik7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfeGF0 dHIuYyBiL2ZzL3hmcy94ZnNfeGF0dHIuYwppbmRleCAzMTIzYjVhYWFkMmEuLmNhZmM5OWM0OGUy MCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc194YXR0ci5jCisrKyBiL2ZzL3hmcy94ZnNfeGF0dHIu YwpAQCAtMTgsNyArMTgsOCBAQAogCiBzdGF0aWMgaW50CiB4ZnNfeGF0dHJfZ2V0KGNvbnN0IHN0 cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLCBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsCi0JCXN0 cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qg c2l6ZSkKKwkJc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFs dWUsIHNpemVfdCBzaXplLAorCQlpbnQgZmxhZ3MpCiB7CiAJaW50IHhmbGFncyA9IGhhbmRsZXIt PmZsYWdzOwogCXN0cnVjdCB4ZnNfaW5vZGUgKmlwID0gWEZTX0koaW5vZGUpOwpkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9saW51eC94YXR0ci5oIGIvaW5jbHVkZS9saW51eC94YXR0ci5oCmluZGV4IDZk YWQwMzFiZTNjMi4uZTVjMTkxYjMwODE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3hhdHRy LmgKKysrIGIvaW5jbHVkZS9saW51eC94YXR0ci5oCkBAIC0zMCwxMCArMzAsMTAgQEAgc3RydWN0 IHhhdHRyX2hhbmRsZXIgewogCWNvbnN0IGNoYXIgKnByZWZpeDsKIAlpbnQgZmxhZ3M7ICAgICAg LyogZnMgcHJpdmF0ZSBmbGFncyAqLwogCWJvb2wgKCpsaXN0KShzdHJ1Y3QgZGVudHJ5ICpkZW50 cnkpOwotCWludCAoKmdldCkoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiwgc3RydWN0IGRl bnRyeSAqZGVudHJ5LAorCWludCAoKmdldCkoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhh bmRsZXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJICAgc3RydWN0IGlub2RlICppbm9kZSwg Y29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAotCQkgICBzaXplX3Qgc2l6ZSk7Ci0JaW50 ICgqc2V0KShjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqLCBzdHJ1Y3QgZGVudHJ5ICpkZW50 cnksCisJCSAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworCWludCAoKnNldCkoY29uc3Qgc3Ry dWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJICAg c3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqYnVmZmVy LAogCQkgICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKIH07CkBAIC00Niw3ICs0Niw4IEBAIHN0 cnVjdCB4YXR0ciB7CiAJc2l6ZV90IHZhbHVlX2xlbjsKIH07CiAKLXNzaXplX3QgX192ZnNfZ2V0 eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgY2hhciAqLCB2b2lk ICosIHNpemVfdCk7Citzc2l6ZV90IF9fdmZzX2dldHhhdHRyKHN0cnVjdCBkZW50cnkgKiwgc3Ry dWN0IGlub2RlICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLAorCQkgICAgICAgc2l6ZV90LCBpbnQp Owogc3NpemVfdCB2ZnNfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICosIHZv aWQgKiwgc2l6ZV90KTsKIHNzaXplX3QgdmZzX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkLCBj aGFyICpsaXN0LCBzaXplX3Qgc2l6ZSk7CiBpbnQgX192ZnNfc2V0eGF0dHIoc3RydWN0IGRlbnRy eSAqLCBzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosIHNpemVfdCwg aW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC94YXR0ci5oIGIvaW5jbHVkZS91 YXBpL2xpbnV4L3hhdHRyLmgKaW5kZXggYzEzOTViNWJkNDMyLi4xMjE2ZDc3N2QyMTAgMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC94YXR0ci5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51 eC94YXR0ci5oCkBAIC0xNyw4ICsxNyw5IEBACiAjaWYgX19VQVBJX0RFRl9YQVRUUgogI2RlZmlu ZSBfX1VTRV9LRVJORUxfWEFUVFJfREVGUwogCi0jZGVmaW5lIFhBVFRSX0NSRUFURQkweDEJLyog c2V0IHZhbHVlLCBmYWlsIGlmIGF0dHIgYWxyZWFkeSBleGlzdHMgKi8KLSNkZWZpbmUgWEFUVFJf UkVQTEFDRQkweDIJLyogc2V0IHZhbHVlLCBmYWlsIGlmIGF0dHIgZG9lcyBub3QgZXhpc3QgKi8K KyNkZWZpbmUgWEFUVFJfQ1JFQVRFCSAweDEJLyogc2V0IHZhbHVlLCBmYWlsIGlmIGF0dHIgYWxy ZWFkeSBleGlzdHMgKi8KKyNkZWZpbmUgWEFUVFJfUkVQTEFDRQkgMHgyCS8qIHNldCB2YWx1ZSwg ZmFpbCBpZiBhdHRyIGRvZXMgbm90IGV4aXN0ICovCisjZGVmaW5lIFhBVFRSX05PU0VDVVJJVFkg MHg0CS8qIGdldCB2YWx1ZSwgZG8gbm90IGludm9sdmUgc2VjdXJpdHkgY2hlY2sgKi8KICNlbmRp ZgogCiAvKiBOYW1lc3BhY2VzICovCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0u YwppbmRleCA2MjZkOGM3NGI5NzMuLjM0ZDM4MThiNDQyNCAxMDA2NDQKLS0tIGEvbW0vc2htZW0u YworKysgYi9tbS9zaG1lbS5jCkBAIC0zMjA2LDcgKzMyMDYsOCBAQCBzdGF0aWMgaW50IHNobWVt X2luaXR4YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwKIAogc3RhdGljIGludCBzaG1lbV94YXR0 cl9oYW5kbGVyX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwKIAkJCQkg ICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgY29u c3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJCQkgICBjb25zdCBj aGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJCSAgIGludCBmbGFncykK IHsKIAlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpOwogCmRp ZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggNmE5YWI3YThiMWQy Li42YjBmZWE5MmRkMDIgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0 LmMKQEAgLTMwMCw3ICszMDAsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRp b25zIHNvY2tmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAogc3RhdGljIGludCBzb2NrZnNfeGF0 dHJfZ2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJICAgIHN0cnVj dCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICBjb25zdCBjaGFy ICpzdWZmaXgsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKKwkJCSAgICBjb25zdCBjaGFyICpz dWZmaXgsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICBpbnQgZmxhZ3MpCiB7CiAJ aWYgKHZhbHVlKSB7CiAJCWlmIChkZW50cnktPmRfbmFtZS5sZW4gKyAxID4gc2l6ZSkKZGlmZiAt LWdpdCBhL3NlY3VyaXR5L2NvbW1vbmNhcC5jIGIvc2VjdXJpdHkvY29tbW9uY2FwLmMKaW5kZXgg ZjRlZTBhZTEwNmIyLi4zNzhhMmY2NmE3M2QgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2NvbW1vbmNh cC5jCisrKyBiL3NlY3VyaXR5L2NvbW1vbmNhcC5jCkBAIC0yOTcsNyArMjk3LDggQEAgaW50IGNh cF9pbm9kZV9uZWVkX2tpbGxwcml2KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAlzdHJ1Y3QgaW5v ZGUgKmlub2RlID0gZF9iYWNraW5nX2lub2RlKGRlbnRyeSk7CiAJaW50IGVycm9yOwogCi0JZXJy b3IgPSBfX3Zmc19nZXR4YXR0cihkZW50cnksIGlub2RlLCBYQVRUUl9OQU1FX0NBUFMsIE5VTEws IDApOworCWVycm9yID0gX192ZnNfZ2V0eGF0dHIoZGVudHJ5LCBpbm9kZSwgWEFUVFJfTkFNRV9D QVBTLCBOVUxMLCAwLAorCQkJICAgICAgIFhBVFRSX05PU0VDVVJJVFkpOwogCXJldHVybiBlcnJv ciA+IDA7CiB9CiAKQEAgLTU4Niw3ICs1ODcsOCBAQCBpbnQgZ2V0X3Zmc19jYXBzX2Zyb21fZGlz ayhjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBjcHVfdmZzX2NhcF9kYXRhCiAK IAlmc19ucyA9IGlub2RlLT5pX3NiLT5zX3VzZXJfbnM7CiAJc2l6ZSA9IF9fdmZzX2dldHhhdHRy KChzdHJ1Y3QgZGVudHJ5ICopZGVudHJ5LCBpbm9kZSwKLQkJCSAgICAgIFhBVFRSX05BTUVfQ0FQ UywgJmRhdGEsIFhBVFRSX0NBUFNfU1opOworCQkJICAgICAgWEFUVFJfTkFNRV9DQVBTLCAmZGF0 YSwgWEFUVFJfQ0FQU19TWiwKKwkJCSAgICAgIFhBVFRSX05PU0VDVVJJVFkpOwogCWlmIChzaXpl ID09IC1FTk9EQVRBIHx8IHNpemUgPT0gLUVPUE5PVFNVUFApCiAJCS8qIG5vIGRhdGEsIHRoYXQn cyBvayAqLwogCQlyZXR1cm4gLUVOT0RBVEE7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3Jp dHkvZXZtL2V2bV9tYWluLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMKaW5k ZXggZjlhODFiMTg3ZmFlLi45MjFjOGYyYWZjYWYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2ludGVn cml0eS9ldm0vZXZtX21haW4uYworKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWlu LmMKQEAgLTEwMCw3ICsxMDAsOCBAQCBzdGF0aWMgaW50IGV2bV9maW5kX3Byb3RlY3RlZF94YXR0 cnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlsaXN0 X2Zvcl9lYWNoX2VudHJ5X3JjdSh4YXR0ciwgJmV2bV9jb25maWdfeGF0dHJuYW1lcywgbGlzdCkg ewotCQllcnJvciA9IF9fdmZzX2dldHhhdHRyKGRlbnRyeSwgaW5vZGUsIHhhdHRyLT5uYW1lLCBO VUxMLCAwKTsKKwkJZXJyb3IgPSBfX3Zmc19nZXR4YXR0cihkZW50cnksIGlub2RlLCB4YXR0ci0+ bmFtZSwgTlVMTCwgMCwKKwkJCQkgICAgICAgWEFUVFJfTk9TRUNVUklUWSk7CiAJCWlmIChlcnJv ciA8IDApIHsKIAkJCWlmIChlcnJvciA9PSAtRU5PREFUQSkKIAkJCQljb250aW51ZTsKZGlmZiAt LWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3Mu YwppbmRleCA3NGRkNDZkZTAxYjYuLmIwODIyZGEwNjU4ZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkv c2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtNTUyLDcg KzU1Miw4IEBAIHN0YXRpYyBpbnQgc2JfZmluaXNoX3NldF9vcHRzKHN0cnVjdCBzdXBlcl9ibG9j ayAqc2IpCiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXJjID0gX192ZnNfZ2V0eGF0dHIocm9vdCwg cm9vdF9pbm9kZSwgWEFUVFJfTkFNRV9TRUxJTlVYLCBOVUxMLCAwKTsKKwkJcmMgPSBfX3Zmc19n ZXR4YXR0cihyb290LCByb290X2lub2RlLCBYQVRUUl9OQU1FX1NFTElOVVgsIE5VTEwsCisJCQkJ ICAgIDAsIFhBVFRSX05PU0VDVVJJVFkpOwogCQlpZiAocmMgPCAwICYmIHJjICE9IC1FTk9EQVRB KSB7CiAJCQlpZiAocmMgPT0gLUVPUE5PVFNVUFApCiAJCQkJcHJfd2FybigiU0VMaW51eDogKGRl diAlcywgdHlwZSAiCkBAIC0xMzc4LDEyICsxMzc5LDE0IEBAIHN0YXRpYyBpbnQgaW5vZGVfZG9p bml0X3VzZV94YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnks CiAJCXJldHVybiAtRU5PTUVNOwogCiAJY29udGV4dFtsZW5dID0gJ1wwJzsKLQlyYyA9IF9fdmZz X2dldHhhdHRyKGRlbnRyeSwgaW5vZGUsIFhBVFRSX05BTUVfU0VMSU5VWCwgY29udGV4dCwgbGVu KTsKKwlyYyA9IF9fdmZzX2dldHhhdHRyKGRlbnRyeSwgaW5vZGUsIFhBVFRSX05BTUVfU0VMSU5V WCwgY29udGV4dCwgbGVuLAorCQkJICAgIFhBVFRSX05PU0VDVVJJVFkpOwogCWlmIChyYyA9PSAt RVJBTkdFKSB7CiAJCWtmcmVlKGNvbnRleHQpOwogCiAJCS8qIE5lZWQgYSBsYXJnZXIgYnVmZmVy LiAgUXVlcnkgZm9yIHRoZSByaWdodCBzaXplLiAqLwotCQlyYyA9IF9fdmZzX2dldHhhdHRyKGRl bnRyeSwgaW5vZGUsIFhBVFRSX05BTUVfU0VMSU5VWCwgTlVMTCwgMCk7CisJCXJjID0gX192ZnNf Z2V0eGF0dHIoZGVudHJ5LCBpbm9kZSwgWEFUVFJfTkFNRV9TRUxJTlVYLCBOVUxMLCAwLAorCQkJ CSAgICBYQVRUUl9OT1NFQ1VSSVRZKTsKIAkJaWYgKHJjIDwgMCkKIAkJCXJldHVybiByYzsKIApA QCAtMTM5NCw3ICsxMzk3LDcgQEAgc3RhdGljIGludCBpbm9kZV9kb2luaXRfdXNlX3hhdHRyKHN0 cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAogCQljb250ZXh0W2xl bl0gPSAnXDAnOwogCQlyYyA9IF9fdmZzX2dldHhhdHRyKGRlbnRyeSwgaW5vZGUsIFhBVFRSX05B TUVfU0VMSU5VWCwKLQkJCQkgICAgY29udGV4dCwgbGVuKTsKKwkJCQkgICAgY29udGV4dCwgbGVu LCBYQVRUUl9OT1NFQ1VSSVRZKTsKIAl9CiAJaWYgKHJjIDwgMCkgewogCQlrZnJlZShjb250ZXh0 KTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21h Y2svc21hY2tfbHNtLmMKaW5kZXggNGM1ZTVhNDM4ZjhiLi4xNThiMzU3NzJiZTEgMTAwNjQ0Ci0t LSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNr X2xzbS5jCkBAIC0yOTIsNyArMjkyLDggQEAgc3RhdGljIHN0cnVjdCBzbWFja19rbm93biAqc21r X2ZldGNoKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBpbm9kZSAqaXAsCiAJaWYgKGJ1ZmZlciA9 PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCXJjID0gX192ZnNfZ2V0eGF0 dHIoZHAsIGlwLCBuYW1lLCBidWZmZXIsIFNNS19MT05HTEFCRUwpOworCXJjID0gX192ZnNfZ2V0 eGF0dHIoZHAsIGlwLCBuYW1lLCBidWZmZXIsIFNNS19MT05HTEFCRUwsCisJCQkgICAgWEFUVFJf Tk9TRUNVUklUWSk7CiAJaWYgKHJjIDwgMCkKIAkJc2twID0gRVJSX1BUUihyYyk7CiAJZWxzZSBp ZiAocmMgPT0gMCkKQEAgLTM0NDIsNyArMzQ0Myw3IEBAIHN0YXRpYyB2b2lkIHNtYWNrX2RfaW5z dGFudGlhdGUoc3RydWN0IGRlbnRyeSAqb3B0X2RlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkK IAkJCX0gZWxzZSB7CiAJCQkJcmMgPSBfX3Zmc19nZXR4YXR0cihkcCwgaW5vZGUsCiAJCQkJCVhB VFRSX05BTUVfU01BQ0tUUkFOU01VVEUsIHRyYXR0ciwKLQkJCQkJVFJBTlNfVFJVRV9TSVpFKTsK KwkJCQkJVFJBTlNfVFJVRV9TSVpFLCBYQVRUUl9OT1NFQ1VSSVRZKTsKIAkJCQlpZiAocmMgPj0g MCAmJiBzdHJuY21wKHRyYXR0ciwgVFJBTlNfVFJVRSwKIAkJCQkJCSAgICAgICBUUkFOU19UUlVF X1NJWkUpICE9IDApCiAJCQkJCXJjID0gLUVJTlZBTDsKLS0gCjIuMjIuMC43NzAuZzBmMmM0YTM3 ZmQtZ29vZwoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpMaW51eC1mMmZzLWRldmVsIG1haWxpbmcgbGlzdApMaW51eC1mMmZzLWRldmVsQGxpc3RzLnNv dXJjZWZvcmdlLm5ldApodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5m by9saW51eC1mMmZzLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DB9D8C32751 for ; Wed, 31 Jul 2019 17:00:08 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 920762182B for ; Wed, 31 Jul 2019 17:00:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ltklOVOK"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=android.com header.i=@android.com header.b="N898lsCa" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 920762182B Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=android.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=V8b+HBF4efAEe5chYoKBzhgTI4fxilvdkw3f9lYHv3k=; b=ltklOVOKQ+lVG/ 7P4tt27KmSIRba9HJpguKMdodWZ8ZZOoTFatSYt/56WLQaUSEx0bHXGKIvCk3gqaSZPH+RKlxd6P2 iAYVBenhv/wNRGzTomzuKJnJ+zs/ffN0unfB9NDvzu2KPFhqX81WCnotHJ00LGK1YDXltNDXaXQF+ d/tAPeOxeOVdAx+ZLJHLKjeivK/1dGaEZakV7pRv4LrYH+pmFLkygJNl/7rDpoEm5T70iID4r/JDV wtCVjnktl8e02OQseKNIbru4IJA6W7nLm7Qy6gLQYFb+g9mHYNteyF876/lxAZcarbk+IPpbzvips UnIujvK2l3LO/rlWuViw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hsrx2-0000ES-Hy; Wed, 31 Jul 2019 16:59:44 +0000 Received: from mail-pl1-x641.google.com ([2607:f8b0:4864:20::641]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hsrw3-0007jC-T7 for linux-mtd@lists.infradead.org; Wed, 31 Jul 2019 16:59:02 +0000 Received: by mail-pl1-x641.google.com with SMTP id k8so30770501plt.3 for ; Wed, 31 Jul 2019 09:58:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=android.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LHxn7iZ54JoT2ZxEph2N5G+LSVSPJ2zLnE9ei0hDpM8=; b=N898lsCa/SMfpKAqCPq47pOgSHdR6hxDgScZ6DEoLg+etiPY12DFx7gWZd5LUwyobd f0hzCmtUi+glbcABe7YwRp6ryC8rYfSFxrEfYv1rYv1mgglAHU4gBXZx15WYtZ4GZQaF oSaJNa2dt+AdMLgq6D1p/y7W7mbhLIv/MWNRl6rrKQWR6sxUclgCDzKV5x0tt9+jEDAH rGrAVM5SHyQ/LAvUT2qNOc9PHcGFlt4Q+cXus/8yF+k3pzsTSq23MXCP/7tun2NV92EY 17lrkHQkKQZZ7R9aam0Zl85YMjE3eIdxNYJ8ryjQtDfi6pO0AIrcPmYQhQsnzi50MNDC MT4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LHxn7iZ54JoT2ZxEph2N5G+LSVSPJ2zLnE9ei0hDpM8=; b=DhlE4Q21cW241y4kZ/80FJQaBNSWeyijjSwaNMS8T4C/dmNegyDpCxjXkv7JsPoQlR t/UwlNEjCIkYi3HWnRbXj6zBuyU/kbhX6ykW0ZGKoNrggeQaMKR/gzQO8wyqgqZjj+/E 4SV4bPznC8QfyXZwv/RudYt5bVk8nC/zD7FhAxwPuHjAiPHfo3BZumj9/Q3A+sXy4oDr wEmQBamaFAcMgJbtQm++wLFDh+F1XCfrNDugR9w/1tINntpdf690EIgV0pcuGyMMfefO oDB7X07cIKOmMAsr3n4NvKklRibhenfVNJLAUZjp6T2Q8hPwFR94fOiQd4izH1+TK734 033w== X-Gm-Message-State: APjAAAUSQu3bXpT9prUhb/aLtQrwyR/FP5MwR9gKlVZtHUevD/XHGM0z doglck7smQq7lLERf9ar8Pw= X-Google-Smtp-Source: APXvYqxUm6lDNMAh3srh0DXzL1h01KxjYPmUk6tQtMIwfrpF/wjB4qpOdMv3g9x/m/rz7xhDVg2G6w== X-Received: by 2002:a17:902:e2:: with SMTP id a89mr122348622pla.210.1564592322315; Wed, 31 Jul 2019 09:58:42 -0700 (PDT) Received: from nebulus.mtv.corp.google.com ([2620:15c:211:200:5404:91ba:59dc:9400]) by smtp.gmail.com with ESMTPSA id f72sm2245954pjg.10.2019.07.31.09.58.39 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Wed, 31 Jul 2019 09:58:41 -0700 (PDT) From: Mark Salyzyn To: linux-kernel@vger.kernel.org Subject: [PATCH v13 2/5] Add flags option to get xattr method paired to __vfs_getxattr Date: Wed, 31 Jul 2019 09:57:57 -0700 Message-Id: <20190731165803.4755-3-salyzyn@android.com> X-Mailer: git-send-email 2.22.0.770.g0f2c4a37fd-goog In-Reply-To: <20190731165803.4755-1-salyzyn@android.com> References: <20190731165803.4755-1-salyzyn@android.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190731_095844_385687_C402B802 X-CRM114-Status: GOOD ( 22.55 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Latchesar Ionkov , Dave Kleikamp , jfs-discussion@lists.sourceforge.net, Randy Dunlap , linux-integrity@vger.kernel.org, linux-doc@vger.kernel.org, Martin Brandenburg , samba-technical@lists.samba.org, Dominique Martinet , Amir Goldstein , Mimi Zohar , James Morris , David Howells , Chris Mason , "David S . Miller" , Andreas Dilger , ocfs2-devel@oss.oracle.com, Eric Paris , netdev@vger.kernel.org, Tyler Hicks , linux-afs@lists.infradead.org, Mike Marshall , linux-xfs@vger.kernel.org, Andreas Gruenbacher , Sage Weil , Jonathan Corbet , Richard Weinberger , Mark Fasheh , devel@lists.orangefs.org, Hugh Dickins , linux-security-module@vger.kernel.org, cluster-devel@redhat.com, selinux@vger.kernel.org, Vyacheslav Dubeyko , Casey Schaufler , v9fs-developer@lists.sourceforge.net, Ilya Dryomov , linux-ext4@vger.kernel.org, Stephen Smalley , linux-mm@kvack.org, Vivek Goyal , Serge Hallyn , Chao Yu , linux-cifs@vger.kernel.org, Eric Van Hensbergen , ecryptfs@vger.kernel.org, Josef Bacik , "Darrick J . Wong" , reiserfs-devel@vger.kernel.org, Tejun Heo , Greg Kroah-Hartman , Joel Becker , linux-mtd@lists.infradead.org, David Sterba , Jaegeuk Kim , ceph-devel@vger.kernel.org, Trond Myklebust , Paul Moore , linux-nfs@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, Theodore Ts'o , linux-fsdevel@vger.kernel.org, Joseph Qi , Mathieu Malaterre , kernel-team@android.com, Miklos Szeredi , Jeff Layton , linux-unionfs@vger.kernel.org, stable@vger.kernel.org, Mark Salyzyn , Steve French , =?UTF-8?q?Ernesto=20A=20=2E=20Fern=C3=A1ndez?= , "Eric W . Biederman" , Jan Kara , Bob Peterson , Phillip Lougher , Andrew Morton , David Woodhouse , Anna Schumaker , linux-btrfs@vger.kernel.org, Alexander Viro Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org QWRkIGEgZmxhZyBvcHRpb24gdG8gZ2V0IHhhdHRyIG1ldGhvZCB0aGF0IGNvdWxkIGhhdmUgYSBi aXQgZmxhZyBvZgpYQVRUUl9OT1NFQ1VSSVRZIHBhc3NlZCB0byBpdC4gIFhBVFRSX05PU0VDVVJJ VFkgaXMgZ2VuZXJhbGx5IHRoZW4Kc2V0IGluIHRoZSBfX3Zmc19nZXR4YXR0ciBwYXRoLgoKVGhp cyBoYW5kbGVzIHRoZSBjYXNlIG9mIGEgdW5pb24gZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBpcyBi ZWluZwpyZXF1ZXN0ZWQgYnkgdGhlIHNlY3VyaXR5IGxheWVyIHRvIHJlcG9ydCBiYWNrIHRoZSBk YXRhIHRoYXQgaXMgdGhlCnRhcmdldCBsYWJlbCBvciBjb250ZXh0IGVtYmVkZGVkIGludG8gd3Jh cHBlZCBmaWxlc3lzdGVtJ3MgeGF0dHIuCgpGb3IgdGhlIHVzZSBjYXNlIHdoZXJlIGFjY2VzcyBp cyB0byBiZSBibG9ja2VkIGJ5IHRoZSBzZWN1cml0eSBsYXllci4KClRoZSBwYXRoIHRoZW4gY291 bGQgYmUgc2VjdXJpdHkoZGVudHJ5KSAtPgpfX3Zmc19nZXR4YXR0cihkZW50cnkuLi5YQVRUUl9O T1NFQ1VJUlRZKSAtPgpoYW5kbGVyLT5nZXQoZGVudHJ5Li4uWEFUVFJfTk9TRUNVUklUWSkgLT4K X192ZnNfZ2V0eGF0dHIobG93ZXJfZGVudHJ5Li4uWEFUVFJfTk9TRUNVSVJUWSkgLT4KbG93ZXJf aGFuZGxlci0+Z2V0KGxvd2VyX2RlbnRyeS4uLlhBVFRSX05PU0VDVUlSVFkpCndoaWNoIHdvdWxk IHJlcG9ydCBiYWNrIHRocm91Z2ggdGhlIGNoYWluIGRhdGEgYW5kIHN1Y2Nlc3MgYXMKZXhwZWN0 ZWQsIGJ1dCB0aGUgbG9nZ2luZyBzZWN1cml0eSBsYXllciBhdCB0aGUgdG9wIHdvdWxkIGhhdmUg dGhlCmRhdGEgdG8gZGV0ZXJtaW5lIHRoZSBhY2Nlc3MgcGVybWlzc2lvbnMgYW5kIHJlcG9ydCBi YWNrIHRoZSB0YXJnZXQKY29udGV4dCB0aGF0IHdhcyBibG9ja2VkLgoKV2l0aG91dCB0aGUgZ2V0 IGhhbmRsZXIgZmxhZywgdGhlIHBhdGggb24gYSB1bmlvbiBmaWxlc3lzdGVtIHdvdWxkIGJlCnRo ZSBlcnJhbnQgc2VjdXJpdHkoZGVudHJ5KSAtPiBfX3Zmc19nZXR4YXR0cihkZW50cnkpIC0+Cmhh bmRsZXItPmdldChkZW50cnkpIC0+IHZmc19nZXR4YXR0cihsb3dlcl9kZW50cnkpIC0+IG5lc3Rl ZCAtPgpzZWN1cml0eShsb3dlcl9kZW50cnksIGxvZyBvZmYpIC0+IGxvd2VyX2hhbmRsZXItPmdl dChsb3dlcl9kZW50cnkpCndoaWNoIHdvdWxkIHJlcG9ydCBiYWNrIHRocm91Z2ggdGhlIGNoYWlu IG5vIGRhdGEsIGFuZCAtRUFDQ0VTLgoKRm9yIHNlbGludXggZm9yIGJvdGggY2FzZXMsIHRoaXMg d291bGQgdHJhbnNsYXRlIHRvIGEgY29ycmVjdGx5CmRldGVybWluZWQgYmxvY2tlZCBhY2Nlc3Mu IEluIHRoZSBmaXJzdCBjb3JyZWN0ZWQgY2FzZSBhIGNvcnJlY3QgYXZjCmxvZyB3b3VsZCBiZSBy ZXBvcnRlZCwgaW4gdGhlIHNlY29uZCBsZWdhY3kgY2FzZSBhbiBpbmNvcnJlY3QgYXZjIGxvZwp3 b3VsZCBiZSByZXBvcnRlZCBhZ2FpbnN0IGFuIHVuaW5pdGlhbGl6ZWQgdTpvYmplY3Rfcjp1bmxh YmVsZWQ6czAKY29udGV4dCBtYWtpbmcgdGhlIGxvZ3MgY29zbWV0aWNhbGx5IHVzZWxlc3MgZm9y IGF1ZGl0MmFsbG93LgoKVGhpcyBwYXRjaCBzZXJpZXMgaXMgaW5lcnQgYW5kIGlzIHRoZSB3aWRl LXNwcmVhZCBhZGRpdGlvbiBvZiB0aGUKZmxhZ3Mgb3B0aW9uIGZvciB4YXR0ciBmdW5jdGlvbnMs IGFuZCBhIHJlcGxhY2VtZW50IG9mIF92ZnNfZ2V0eGF0dHIKd2l0aCBfX3Zmc19nZXR4YXR0cigu Li5YQVRUUl9OT1NFQ1VSSVRZKS4KClNpZ25lZC1vZmYtYnk6IE1hcmsgU2FseXp5biA8c2FseXp5 bkBhbmRyb2lkLmNvbT4KQ2M6IE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KQ2M6 IEpvbmF0aGFuIENvcmJldCA8Y29yYmV0QGx3bi5uZXQ+CkNjOiBWaXZlayBHb3lhbCA8dmdveWFs QHJlZGhhdC5jb20+CkNjOiBFcmljIFcuIEJpZWRlcm1hbiA8ZWJpZWRlcm1AeG1pc3Npb24uY29t PgpDYzogQW1pciBHb2xkc3RlaW4gPGFtaXI3M2lsQGdtYWlsLmNvbT4KQ2M6IFJhbmR5IER1bmxh cCA8cmR1bmxhcEBpbmZyYWRlYWQub3JnPgpDYzogU3RlcGhlbiBTbWFsbGV5IDxzZHNAdHljaG8u bnNhLmdvdj4KQ2M6IGxpbnV4LXVuaW9uZnNAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1kb2NA dmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCkNjOiBrZXJu ZWwtdGVhbUBhbmRyb2lkLmNvbQpDYzogRXJpYyBWYW4gSGVuc2JlcmdlbiA8ZXJpY3ZoQGdtYWls LmNvbT4KQ2M6IExhdGNoZXNhciBJb25rb3YgPGx1Y2hvQGlvbmtvdi5uZXQ+CkNjOiBEb21pbmlx dWUgTWFydGluZXQgPGFzbWFkZXVzQGNvZGV3cmVjay5vcmc+CkNjOiBEYXZpZCBIb3dlbGxzIDxk aG93ZWxsc0ByZWRoYXQuY29tPgpDYzogQ2hyaXMgTWFzb24gPGNsbUBmYi5jb20+CkNjOiBKb3Nl ZiBCYWNpayA8am9zZWZAdG94aWNwYW5kYS5jb20+CkNjOiBEYXZpZCBTdGVyYmEgPGRzdGVyYmFA c3VzZS5jb20+CkNjOiBKZWZmIExheXRvbiA8amxheXRvbkBrZXJuZWwub3JnPgpDYzogU2FnZSBX ZWlsIDxzYWdlQHJlZGhhdC5jb20+CkNjOiBJbHlhIERyeW9tb3YgPGlkcnlvbW92QGdtYWlsLmNv bT4KQ2M6IFN0ZXZlIEZyZW5jaCA8c2ZyZW5jaEBzYW1iYS5vcmc+CkNjOiBUeWxlciBIaWNrcyA8 dHloaWNrc0BjYW5vbmljYWwuY29tPgpDYzogSmFuIEthcmEgPGphY2tAc3VzZS5jb20+CkNjOiBU aGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgpDYzogQW5kcmVhcyBEaWxnZXIgPGFkaWxnZXIu a2VybmVsQGRpbGdlci5jYT4KQ2M6IEphZWdldWsgS2ltIDxqYWVnZXVrQGtlcm5lbC5vcmc+CkNj OiBDaGFvIFl1IDx5dWNoYW8wQGh1YXdlaS5jb20+CkNjOiBCb2IgUGV0ZXJzb24gPHJwZXRlcnNv QHJlZGhhdC5jb20+CkNjOiBBbmRyZWFzIEdydWVuYmFjaGVyIDxhZ3J1ZW5iYUByZWRoYXQuY29t PgpDYzogRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgpDYzogUmljaGFyZCBX ZWluYmVyZ2VyIDxyaWNoYXJkQG5vZC5hdD4KQ2M6IERhdmUgS2xlaWthbXAgPHNoYWdneUBrZXJu ZWwub3JnPgpDYzogR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9y Zz4KQ2M6IFRlanVuIEhlbyA8dGpAa2VybmVsLm9yZz4KQ2M6IFRyb25kIE15a2xlYnVzdCA8dHJv bmQubXlrbGVidXN0QGhhbW1lcnNwYWNlLmNvbT4KQ2M6IEFubmEgU2NodW1ha2VyIDxhbm5hLnNj aHVtYWtlckBuZXRhcHAuY29tPgpDYzogTWFyayBGYXNoZWggPG1hcmtAZmFzaGVoLmNvbT4KQ2M6 IEpvZWwgQmVja2VyIDxqbGJlY0BldmlscGxhbi5vcmc+CkNjOiBKb3NlcGggUWkgPGpvc2VwaC5x aUBsaW51eC5hbGliYWJhLmNvbT4KQ2M6IE1pa2UgTWFyc2hhbGwgPGh1YmNhcEBvbW5pYm9uZC5j b20+CkNjOiBNYXJ0aW4gQnJhbmRlbmJ1cmcgPG1hcnRpbkBvbW5pYm9uZC5jb20+CkNjOiBBbGV4 YW5kZXIgVmlybyA8dmlyb0B6ZW5pdi5saW51eC5vcmcudWs+CkNjOiBQaGlsbGlwIExvdWdoZXIg PHBoaWxsaXBAc3F1YXNoZnMub3JnLnVrPgpDYzogRGFycmljayBKLiBXb25nIDxkYXJyaWNrLndv bmdAb3JhY2xlLmNvbT4KQ2M6IGxpbnV4LXhmc0B2Z2VyLmtlcm5lbC5vcmcKQ2M6IEh1Z2ggRGlj a2lucyA8aHVnaGRAZ29vZ2xlLmNvbT4KQ2M6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1s b2Z0Lm5ldD4KQ2M6IEFuZHJldyBNb3J0b24gPGFrcG1AbGludXgtZm91bmRhdGlvbi5vcmc+CkNj OiBNYXRoaWV1IE1hbGF0ZXJyZSA8bWFsYXRAZGViaWFuLm9yZz4KQ2M6IEVybmVzdG8gQS4gRmVy bsOhbmRleiA8ZXJuZXN0by5tbmQuZmVybmFuZGV6QGdtYWlsLmNvbT4KQ2M6IFZ5YWNoZXNsYXYg RHViZXlrbyA8c2xhdmFAZHViZXlrby5jb20+CkNjOiB2OWZzLWRldmVsb3BlckBsaXN0cy5zb3Vy Y2Vmb3JnZS5uZXQKQ2M6IGxpbnV4LWFmc0BsaXN0cy5pbmZyYWRlYWQub3JnCkNjOiBsaW51eC1i dHJmc0B2Z2VyLmtlcm5lbC5vcmcKQ2M6IGNlcGgtZGV2ZWxAdmdlci5rZXJuZWwub3JnCkNjOiBs aW51eC1jaWZzQHZnZXIua2VybmVsLm9yZwpDYzogc2FtYmEtdGVjaG5pY2FsQGxpc3RzLnNhbWJh Lm9yZwpDYzogZWNyeXB0ZnNAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1leHQ0QHZnZXIua2Vy bmVsLm9yZwpDYzogbGludXgtZjJmcy1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKQ2M6IGxp bnV4LWZzZGV2ZWxAdmdlci5rZXJuZWwub3JnCkNjOiBjbHVzdGVyLWRldmVsQHJlZGhhdC5jb20K Q2M6IGxpbnV4LW10ZEBsaXN0cy5pbmZyYWRlYWQub3JnCkNjOiBqZnMtZGlzY3Vzc2lvbkBsaXN0 cy5zb3VyY2Vmb3JnZS5uZXQKQ2M6IGxpbnV4LW5mc0B2Z2VyLmtlcm5lbC5vcmcKQ2M6IG9jZnMy LWRldmVsQG9zcy5vcmFjbGUuY29tCkNjOiBkZXZlbEBsaXN0cy5vcmFuZ2Vmcy5vcmcKQ2M6IHJl aXNlcmZzLWRldmVsQHZnZXIua2VybmVsLm9yZwpDYzogbGludXgtbW1Aa3ZhY2sub3JnCkNjOiBu ZXRkZXZAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1zZWN1cml0eS1tb2R1bGVAdmdlci5rZXJu ZWwub3JnCkNjOiBzdGFibGVAdmdlci5rZXJuZWwub3JnICMgNC40LCA0LjksIDQuMTQgJiA0LjE5 Ci0tLQp2MTMgLSBhZGRlZCBmbGFncyB0byBfX3Zmc19nZXR4YXR0ciBjYWxsLCBhbmQgbW92ZWQg YWxsIHRoZSBzZWN1cml0eQogICAgICBjb2RlIGZyb20gdmZzX2dldHhhdHRyIGludG8gaXQuCgp2 MTIgLSBBZGRlZCBiYWNrIHRvIHBhdGNoIHNlcmllcyBhcyBnZXQgeGF0dHIgd2l0aCBmbGFnIG9w dGlvbi4KCnYxMSAtIFNxdWFzaGVkIG91dCBvZiBwYXRjaCBzZXJpZXMgYW5kIHJlcGxhY2VkIHdp dGggcGVyLXRocmVhZCBmbGFnCiAgICAgIHNvbHV0aW9uLgoKdjEwIC0gQWRkZWQgdG8gcGF0Y2gg c2VyaWVzIGFzIF9fZ2V0IHhhdHRyIG1ldGhvZC4KLS0tCiBmcy85cC9hY2wuYyAgICAgICAgICAg ICAgICAgICAgICAgfCAgMyArKy0KIGZzLzlwL3hhdHRyLmMgICAgICAgICAgICAgICAgICAgICB8 ICAzICsrLQogZnMvYWZzL3hhdHRyLmMgICAgICAgICAgICAgICAgICAgIHwgIDYgKysrLS0tCiBm cy9idHJmcy94YXR0ci5jICAgICAgICAgICAgICAgICAgfCAgMyArKy0KIGZzL2NlcGgveGF0dHIu YyAgICAgICAgICAgICAgICAgICB8ICAzICsrLQogZnMvY2lmcy94YXR0ci5jICAgICAgICAgICAg ICAgICAgIHwgIDIgKy0KIGZzL2VjcnlwdGZzL2lub2RlLmMgICAgICAgICAgICAgICB8ICA2ICsr KystLQogZnMvZWNyeXB0ZnMvbW1hcC5jICAgICAgICAgICAgICAgIHwgIDIgKy0KIGZzL2V4dDIv eGF0dHJfdHJ1c3RlZC5jICAgICAgICAgICB8ICAyICstCiBmcy9leHQyL3hhdHRyX3VzZXIuYyAg ICAgICAgICAgICAgfCAgMiArLQogZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jICAgICAgICAgIHwg IDIgKy0KIGZzL2V4dDQveGF0dHJfdHJ1c3RlZC5jICAgICAgICAgICB8ICAyICstCiBmcy9leHQ0 L3hhdHRyX3VzZXIuYyAgICAgICAgICAgICAgfCAgMiArLQogZnMvZjJmcy94YXR0ci5jICAgICAg ICAgICAgICAgICAgIHwgIDQgKystLQogZnMvZnVzZS94YXR0ci5jICAgICAgICAgICAgICAgICAg IHwgIDQgKystLQogZnMvZ2ZzMi94YXR0ci5jICAgICAgICAgICAgICAgICAgIHwgIDMgKystCiBm cy9oZnMvYXR0ci5jICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQogZnMvaGZzcGx1cy94YXR0 ci5jICAgICAgICAgICAgICAgIHwgIDMgKystCiBmcy9oZnNwbHVzL3hhdHRyX3RydXN0ZWQuYyAg ICAgICAgfCAgMyArKy0KIGZzL2hmc3BsdXMveGF0dHJfdXNlci5jICAgICAgICAgICB8ICAzICsr LQogZnMvamZmczIvc2VjdXJpdHkuYyAgICAgICAgICAgICAgIHwgIDMgKystCiBmcy9qZmZzMi94 YXR0cl90cnVzdGVkLmMgICAgICAgICAgfCAgMyArKy0KIGZzL2pmZnMyL3hhdHRyX3VzZXIuYyAg ICAgICAgICAgICB8ICAzICsrLQogZnMvamZzL3hhdHRyLmMgICAgICAgICAgICAgICAgICAgIHwg IDUgKysrLS0KIGZzL2tlcm5mcy9pbm9kZS5jICAgICAgICAgICAgICAgICB8ICAzICsrLQogZnMv bmZzL25mczRwcm9jLmMgICAgICAgICAgICAgICAgIHwgIDYgKysrKy0tCiBmcy9vY2ZzMi94YXR0 ci5jICAgICAgICAgICAgICAgICAgfCAgOSArKysrKy0tLQogZnMvb3JhbmdlZnMveGF0dHIuYyAg ICAgICAgICAgICAgIHwgIDMgKystCiBmcy9vdmVybGF5ZnMvc3VwZXIuYyAgICAgICAgICAgICAg fCAgOCArKysrLS0tCiBmcy9wb3NpeF9hY2wuYyAgICAgICAgICAgICAgICAgICAgfCAgMiArLQog ZnMvcmVpc2VyZnMveGF0dHJfc2VjdXJpdHkuYyAgICAgIHwgIDMgKystCiBmcy9yZWlzZXJmcy94 YXR0cl90cnVzdGVkLmMgICAgICAgfCAgMyArKy0KIGZzL3JlaXNlcmZzL3hhdHRyX3VzZXIuYyAg ICAgICAgICB8ICAzICsrLQogZnMvc3F1YXNoZnMveGF0dHIuYyAgICAgICAgICAgICAgIHwgIDIg Ky0KIGZzL3hhdHRyLmMgICAgICAgICAgICAgICAgICAgICAgICB8IDM2ICsrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tLS0KIGZzL3hmcy94ZnNfeGF0dHIuYyAgICAgICAgICAgICAgICB8ICAz ICsrLQogaW5jbHVkZS9saW51eC94YXR0ci5oICAgICAgICAgICAgIHwgIDkgKysrKy0tLS0KIGlu Y2x1ZGUvdWFwaS9saW51eC94YXR0ci5oICAgICAgICB8ICA1ICsrKy0tCiBtbS9zaG1lbS5jICAg ICAgICAgICAgICAgICAgICAgICAgfCAgMyArKy0KIG5ldC9zb2NrZXQuYyAgICAgICAgICAgICAg ICAgICAgICB8ICAzICsrLQogc2VjdXJpdHkvY29tbW9uY2FwLmMgICAgICAgICAgICAgIHwgIDYg KysrKy0tCiBzZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMgfCAgMyArKy0KIHNlY3Vy aXR5L3NlbGludXgvaG9va3MuYyAgICAgICAgICB8IDExICsrKysrKy0tLS0KIHNlY3VyaXR5L3Nt YWNrL3NtYWNrX2xzbS5jICAgICAgICB8ICA1ICsrKy0tCiA0NCBmaWxlcyBjaGFuZ2VkLCAxMTkg aW5zZXJ0aW9ucygrKSwgODEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZnMvOXAvYWNsLmMg Yi9mcy85cC9hY2wuYwppbmRleCA2MjYxNzE5ZjZmMmEuLmNiMTRlOGIzMTJiYyAxMDA2NDQKLS0t IGEvZnMvOXAvYWNsLmMKKysrIGIvZnMvOXAvYWNsLmMKQEAgLTIxNCw3ICsyMTQsOCBAQCBpbnQg djlmc19hY2xfbW9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCAqbW9kZXAsCiAKIHN0YXRp YyBpbnQgdjlmc194YXR0cl9nZXRfYWNsKGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5k bGVyLAogCQkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2Rl LAotCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkK KwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisJ CQkgICAgICBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsK IAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CmRpZmYgLS1naXQgYS9mcy85cC94YXR0ci5jIGIvZnMv OXAveGF0dHIuYwppbmRleCBhYzhmZjhjYTRjMTEuLjVjZmE3NzI0NTJmZCAxMDA2NDQKLS0tIGEv ZnMvOXAveGF0dHIuYworKysgYi9mcy85cC94YXR0ci5jCkBAIC0xMzksNyArMTM5LDggQEAgc3Np emVfdCB2OWZzX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwg c2l6ZV90IGJ1ZmZlcl9zaXplKQogCiBzdGF0aWMgaW50IHY5ZnNfeGF0dHJfaGFuZGxlcl9nZXQo Y29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkJICBzdHJ1Y3QgZGVudHJ5 ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICBjb25zdCBjaGFyICpuYW1lLCB2 b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorCQkJCSAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAq YnVmZmVyLCBzaXplX3Qgc2l6ZSwKKwkJCQkgIGludCBmbGFncykKIHsKIAljb25zdCBjaGFyICpm dWxsX25hbWUgPSB4YXR0cl9mdWxsX25hbWUoaGFuZGxlciwgbmFtZSk7CiAKZGlmZiAtLWdpdCBh L2ZzL2Fmcy94YXR0ci5jIGIvZnMvYWZzL3hhdHRyLmMKaW5kZXggNTU1MmQwMzQwOTBhLi5lNjUw OWMyMWYwOGEgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy94YXR0ci5jCisrKyBiL2ZzL2Fmcy94YXR0ci5j CkBAIC0zMzQsNyArMzM0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGFm c194YXR0cl95ZnNfaGFuZGxlciA9IHsKIHN0YXRpYyBpbnQgYWZzX3hhdHRyX2dldF9jZWxsKGNv bnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJICAgICAgc3RydWN0IGRlbnRy eSAqZGVudHJ5LAogCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFt ZSwKLQkJCSAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCisJCQkgICAgICB2b2lkICpi dWZmZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGFmc192bm9kZSAqdm5v ZGUgPSBBRlNfRlNfSShpbm9kZSk7CiAJc3RydWN0IGFmc19jZWxsICpjZWxsID0gdm5vZGUtPnZv bHVtZS0+Y2VsbDsKQEAgLTM2MSw3ICszNjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHhhdHRy X2hhbmRsZXIgYWZzX3hhdHRyX2Fmc19jZWxsX2hhbmRsZXIgPSB7CiBzdGF0aWMgaW50IGFmc194 YXR0cl9nZXRfZmlkKGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJICAg ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNv bnN0IGNoYXIgKm5hbWUsCi0JCQkgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCisJCQkg ICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgYWZz X3Zub2RlICp2bm9kZSA9IEFGU19GU19JKGlub2RlKTsKIAljaGFyIHRleHRbMTYgKyAxICsgMjQg KyAxICsgOCArIDFdOwpAQCAtMzk3LDcgKzM5Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeGF0 dHJfaGFuZGxlciBhZnNfeGF0dHJfYWZzX2ZpZF9oYW5kbGVyID0gewogc3RhdGljIGludCBhZnNf eGF0dHJfZ2V0X3ZvbHVtZShjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwKIAkJ CSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5v ZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXpl KQorCQkJICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCXN0 cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koaW5vZGUpOwogCWNvbnN0IGNoYXIgKnZv bG5hbWUgPSB2bm9kZS0+dm9sdW1lLT5uYW1lOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMveGF0dHIu YyBiL2ZzL2J0cmZzL3hhdHRyLmMKaW5kZXggOTVkOWFlYmZmMmM0Li4xZTUyMmUxNDUzNDQgMTAw NjQ0Ci0tLSBhL2ZzL2J0cmZzL3hhdHRyLmMKKysrIGIvZnMvYnRyZnMveGF0dHIuYwpAQCAtMzUz LDcgKzM1Myw4IEBAIHNzaXplX3QgYnRyZnNfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRy eSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKIAogc3RhdGljIGludCBidHJmc194YXR0cl9o YW5kbGVyX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwKIAkJCQkgICBz dHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgY29uc3Qg Y2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJCQkgICBjb25zdCBjaGFy ICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJCSAgIGludCBmbGFncykKIHsK IAluYW1lID0geGF0dHJfZnVsbF9uYW1lKGhhbmRsZXIsIG5hbWUpOwogCXJldHVybiBidHJmc19n ZXR4YXR0cihpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgv eGF0dHIuYyBiL2ZzL2NlcGgveGF0dHIuYwppbmRleCAzN2I0NThhOWFmM2EuLmVkYjdlYjlhZTgz ZSAxMDA2NDQKLS0tIGEvZnMvY2VwaC94YXR0ci5jCisrKyBiL2ZzL2NlcGgveGF0dHIuYwpAQCAt MTE3MSw3ICsxMTcxLDggQEAgaW50IF9fY2VwaF9zZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2Rl LCBjb25zdCBjaGFyICpuYW1lLAogCiBzdGF0aWMgaW50IGNlcGhfZ2V0X3hhdHRyX2hhbmRsZXIo Y29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkJICBzdHJ1Y3QgZGVudHJ5 ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICBjb25zdCBjaGFyICpuYW1lLCB2 b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpCisJCQkJICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2 YWx1ZSwgc2l6ZV90IHNpemUsCisJCQkJICBpbnQgZmxhZ3MpCiB7CiAJaWYgKCFjZXBoX2lzX3Zh bGlkX3hhdHRyKG5hbWUpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYgLS1naXQgYS9mcy9j aWZzL3hhdHRyLmMgYi9mcy9jaWZzL3hhdHRyLmMKaW5kZXggOTA3NjE1MDc1OGQ4Li43ZjcxYzA2 Y2U2MzEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMveGF0dHIuYworKysgYi9mcy9jaWZzL3hhdHRyLmMK QEAgLTE5OSw3ICsxOTksNyBAQCBzdGF0aWMgaW50IGNpZnNfY3JlYXRpb25fdGltZV9nZXQoc3Ry dWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCiBzdGF0aWMgaW50IGNp ZnNfeGF0dHJfZ2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJICBz dHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgIGNvbnN0IGNo YXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKKwkJCSAgY29uc3QgY2hhciAqbmFt ZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJc3NpemVfdCByYyA9 IC1FT1BOT1RTVVBQOwogCXVuc2lnbmVkIGludCB4aWQ7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRm cy9pbm9kZS5jIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwppbmRleCAxODQyNmY0ODU1ZjEuLmM3MTBj NzUzMzcyOSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvaW5vZGUuYworKysgYi9mcy9lY3J5cHRm cy9pbm9kZS5jCkBAIC0xMDE4LDcgKzEwMTgsOCBAQCBlY3J5cHRmc19nZXR4YXR0cl9sb3dlcihz dHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnksIHN0cnVjdCBpbm9kZSAqbG93ZXJfaW5vZGUsCiAJ CWdvdG8gb3V0OwogCX0KIAlpbm9kZV9sb2NrKGxvd2VyX2lub2RlKTsKLQlyYyA9IF9fdmZzX2dl dHhhdHRyKGxvd2VyX2RlbnRyeSwgbG93ZXJfaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplKTsKKwly YyA9IF9fdmZzX2dldHhhdHRyKGxvd2VyX2RlbnRyeSwgbG93ZXJfaW5vZGUsIG5hbWUsIHZhbHVl LCBzaXplLAorCQkJICAgIFhBVFRSX05PU0VDVVJJVFkpOwogCWlub2RlX3VubG9jayhsb3dlcl9p bm9kZSk7CiBvdXQ6CiAJcmV0dXJuIHJjOwpAQCAtMTEwMyw3ICsxMTA0LDggQEAgY29uc3Qgc3Ry dWN0IGlub2RlX29wZXJhdGlvbnMgZWNyeXB0ZnNfbWFpbl9pb3BzID0gewogCiBzdGF0aWMgaW50 IGVjcnlwdGZzX3hhdHRyX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwK IAkJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJ CSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCisJCQkg ICAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJICAg ICAgaW50IGZsYWdzKQogewogCXJldHVybiBlY3J5cHRmc19nZXR4YXR0cihkZW50cnksIGlub2Rl LCBuYW1lLCBidWZmZXIsIHNpemUpOwogfQpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvbW1hcC5j IGIvZnMvZWNyeXB0ZnMvbW1hcC5jCmluZGV4IGNmZmEwYzFlYzgyOS4uMjM2MmJlM2UzYjRkIDEw MDY0NAotLS0gYS9mcy9lY3J5cHRmcy9tbWFwLmMKKysrIGIvZnMvZWNyeXB0ZnMvbW1hcC5jCkBA IC00MjIsNyArNDIyLDcgQEAgc3RhdGljIGludCBlY3J5cHRmc193cml0ZV9pbm9kZV9zaXplX3Rv X3hhdHRyKHN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfaW5vZGUpCiAJfQogCWlub2RlX2xvY2sobG93 ZXJfaW5vZGUpOwogCXNpemUgPSBfX3Zmc19nZXR4YXR0cihsb3dlcl9kZW50cnksIGxvd2VyX2lu b2RlLCBFQ1JZUFRGU19YQVRUUl9OQU1FLAotCQkJICAgICAgeGF0dHJfdmlydCwgUEFHRV9TSVpF KTsKKwkJCSAgICAgIHhhdHRyX3ZpcnQsIFBBR0VfU0laRSwgWEFUVFJfTk9TRUNVUklUWSk7CiAJ aWYgKHNpemUgPCAwKQogCQlzaXplID0gODsKIAlwdXRfdW5hbGlnbmVkX2JlNjQoaV9zaXplX3Jl YWQoZWNyeXB0ZnNfaW5vZGUpLCB4YXR0cl92aXJ0KTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIveGF0 dHJfdHJ1c3RlZC5jIGIvZnMvZXh0Mi94YXR0cl90cnVzdGVkLmMKaW5kZXggNDlhZGQxMTA3ODUw Li44ZDMxMzY2NGYwZmEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIveGF0dHJfdHJ1c3RlZC5jCisrKyBi L2ZzL2V4dDIveGF0dHJfdHJ1c3RlZC5jCkBAIC0xOCw3ICsxOCw3IEBAIGV4dDJfeGF0dHJfdHJ1 c3RlZF9saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHN0YXRpYyBpbnQKIGV4dDJfeGF0dHJf dHJ1c3RlZF9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCSAgICAg ICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCSAgICAgICBj b25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorCQkgICAgICAgY29u c3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewog CXJldHVybiBleHQyX3hhdHRyX2dldChpbm9kZSwgRVhUMl9YQVRUUl9JTkRFWF9UUlVTVEVELCBu YW1lLAogCQkJICAgICAgYnVmZmVyLCBzaXplKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIveGF0dHJf dXNlci5jIGIvZnMvZXh0Mi94YXR0cl91c2VyLmMKaW5kZXggYzI0M2EzYjRkNjlkLi43MTJiN2M5 NWNjNjQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIveGF0dHJfdXNlci5jCisrKyBiL2ZzL2V4dDIveGF0 dHJfdXNlci5jCkBAIC0yMCw3ICsyMCw3IEBAIGV4dDJfeGF0dHJfdXNlcl9saXN0KHN0cnVjdCBk ZW50cnkgKmRlbnRyeSkKIHN0YXRpYyBpbnQKIGV4dDJfeGF0dHJfdXNlcl9nZXQoY29uc3Qgc3Ry dWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCSAgICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQs IHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCSAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZm ZXIsIHNpemVfdCBzaXplKQorCQkgICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBz aXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCWlmICghdGVzdF9vcHQoaW5vZGUtPmlfc2IsIFhB VFRSX1VTRVIpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3hh dHRyX3NlY3VyaXR5LmMgYi9mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMKaW5kZXggMTk3YTlkOGEx NWVmLi41MGZiNzEzOTNmYjYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYwor KysgYi9mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMKQEAgLTE1LDcgKzE1LDcgQEAKIHN0YXRpYyBp bnQKIGV4dDRfeGF0dHJfc2VjdXJpdHlfZ2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpo YW5kbGVyLAogCQkJc3RydWN0IGRlbnRyeSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAot CQkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJCWNvbnN0 IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKIAly ZXR1cm4gZXh0NF94YXR0cl9nZXQoaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfU0VDVVJJVFksCiAJ CQkgICAgICBuYW1lLCBidWZmZXIsIHNpemUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0cl90 cnVzdGVkLmMgYi9mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYwppbmRleCBlOTM4OWU1ZDc1YzMuLjY0 YmQ4Zjg2YzFmMSAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0cl90cnVzdGVkLmMKKysrIGIvZnMv ZXh0NC94YXR0cl90cnVzdGVkLmMKQEAgLTIyLDcgKzIyLDcgQEAgZXh0NF94YXR0cl90cnVzdGVk X2xpc3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogc3RhdGljIGludAogZXh0NF94YXR0cl90cnVz dGVkX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwKIAkJICAgICAgIHN0 cnVjdCBkZW50cnkgKnVudXNlZCwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJICAgICAgIGNvbnN0 IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCisJCSAgICAgICBjb25zdCBj aGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJcmV0 dXJuIGV4dDRfeGF0dHJfZ2V0KGlub2RlLCBFWFQ0X1hBVFRSX0lOREVYX1RSVVNURUQsCiAJCQkg ICAgICBuYW1lLCBidWZmZXIsIHNpemUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0cl91c2Vy LmMgYi9mcy9leHQ0L3hhdHRyX3VzZXIuYwppbmRleCBkNDU0NjE4NGIzNGIuLmI3MzAxMzczODIw ZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0cl91c2VyLmMKKysrIGIvZnMvZXh0NC94YXR0cl91 c2VyLmMKQEAgLTIxLDcgKzIxLDcgQEAgZXh0NF94YXR0cl91c2VyX2xpc3Qoc3RydWN0IGRlbnRy eSAqZGVudHJ5KQogc3RhdGljIGludAogZXh0NF94YXR0cl91c2VyX2dldChjb25zdCBzdHJ1Y3Qg eGF0dHJfaGFuZGxlciAqaGFuZGxlciwKIAkJICAgIHN0cnVjdCBkZW50cnkgKnVudXNlZCwgc3Ry dWN0IGlub2RlICppbm9kZSwKLQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwg c2l6ZV90IHNpemUpCisJCSAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVf dCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJaWYgKCF0ZXN0X29wdChpbm9kZS0+aV9zYiwgWEFUVFJf VVNFUikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2ZzL2YyZnMveGF0dHIu YyBiL2ZzL2YyZnMveGF0dHIuYwppbmRleCBiMzJjNDU2MjE2NzkuLjc2NTU5ZGE4ZGZiYSAxMDA2 NDQKLS0tIGEvZnMvZjJmcy94YXR0ci5jCisrKyBiL2ZzL2YyZnMveGF0dHIuYwpAQCAtMjQsNyAr MjQsNyBAQAogCiBzdGF0aWMgaW50IGYyZnNfeGF0dHJfZ2VuZXJpY19nZXQoY29uc3Qgc3RydWN0 IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCXN0cnVjdCBkZW50cnkgKnVudXNlZCwgc3RydWN0 IGlub2RlICppbm9kZSwKLQkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qg c2l6ZSkKKwkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50 IGZsYWdzKQogewogCXN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSA9IEYyRlNfU0IoaW5vZGUtPmlf c2IpOwogCkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBib29sIGYyZnNfeGF0dHJfdHJ1c3RlZF9s aXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAogc3RhdGljIGludCBmMmZzX3hhdHRyX2Fkdmlz ZV9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCXN0cnVjdCBkZW50 cnkgKnVudXNlZCwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJY29uc3QgY2hhciAqbmFtZSwgdm9p ZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVy LCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCWlmIChidWZmZXIpCiAJCSooKGNoYXIgKili dWZmZXIpID0gRjJGU19JKGlub2RlKS0+aV9hZHZpc2U7CmRpZmYgLS1naXQgYS9mcy9mdXNlL3hh dHRyLmMgYi9mcy9mdXNlL3hhdHRyLmMKaW5kZXggNDMzNzE3NjQwZjc4Li5kMWVmNzgwODMwNGUg MTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UveGF0dHIuYworKysgYi9mcy9mdXNlL3hhdHRyLmMKQEAgLTE3 Niw3ICsxNzYsNyBAQCBpbnQgZnVzZV9yZW1vdmV4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBj b25zdCBjaGFyICpuYW1lKQogCiBzdGF0aWMgaW50IGZ1c2VfeGF0dHJfZ2V0KGNvbnN0IHN0cnVj dCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3Ry dWN0IGlub2RlICppbm9kZSwKLQkJCSBjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwgc2l6 ZV90IHNpemUpCisJCQkgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXpl LCBpbnQgZmxhZ3MpCiB7CiAJcmV0dXJuIGZ1c2VfZ2V0eGF0dHIoaW5vZGUsIG5hbWUsIHZhbHVl LCBzaXplKTsKIH0KQEAgLTE5OSw3ICsxOTksNyBAQCBzdGF0aWMgYm9vbCBub194YXR0cl9saXN0 KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAogc3RhdGljIGludCBub194YXR0cl9nZXQoY29uc3Qg c3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnks IHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQljb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwg c2l6ZV90IHNpemUpCisJCQljb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNp emUsIGludCBmbGFncykKIHsKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CmRpZmYgLS1naXQgYS9m cy9nZnMyL3hhdHRyLmMgYi9mcy9nZnMyL3hhdHRyLmMKaW5kZXggYmJlNTkzZDE2YmVhLi5hOWRi MDY3YTk5YzEgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIveGF0dHIuYworKysgYi9mcy9nZnMyL3hhdHRy LmMKQEAgLTU4OCw3ICs1ODgsOCBAQCBzdGF0aWMgaW50IF9fZ2ZzMl94YXR0cl9nZXQoc3RydWN0 IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKIAogc3RhdGljIGludCBnZnMyX3hhdHRy X2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwKIAkJCSAgc3RydWN0IGRl bnRyeSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICBjb25zdCBjaGFyICpuYW1l LCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorCQkJICBjb25zdCBjaGFyICpuYW1lLCB2b2lk ICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJICBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGdmczJf aW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7CmRpZmYg LS1naXQgYS9mcy9oZnMvYXR0ci5jIGIvZnMvaGZzL2F0dHIuYwppbmRleCA3NGZhNjI2NDMxMzYu LjA4MjIyYTljNWQzMSAxMDA2NDQKLS0tIGEvZnMvaGZzL2F0dHIuYworKysgYi9mcy9oZnMvYXR0 ci5jCkBAIC0xMTUsNyArMTE1LDcgQEAgc3RhdGljIHNzaXplX3QgX19oZnNfZ2V0eGF0dHIoc3Ry dWN0IGlub2RlICppbm9kZSwgZW51bSBoZnNfeGF0dHJfdHlwZSB0eXBlLAogCiBzdGF0aWMgaW50 IGhmc194YXR0cl9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkg c3RydWN0IGRlbnRyeSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJIGNvbnN0IGNo YXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKKwkJCSBjb25zdCBjaGFyICpuYW1l LCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKIAlyZXR1cm4gX19oZnNf Z2V0eGF0dHIoaW5vZGUsIGhhbmRsZXItPmZsYWdzLCB2YWx1ZSwgc2l6ZSk7CiB9CmRpZmYgLS1n aXQgYS9mcy9oZnNwbHVzL3hhdHRyLmMgYi9mcy9oZnNwbHVzL3hhdHRyLmMKaW5kZXggYmIwYjI3 ZDg4ZTUwLi4zODFjMmFhZWRiYzggMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMveGF0dHIuYworKysg Yi9mcy9oZnNwbHVzL3hhdHRyLmMKQEAgLTgzOSw3ICs4MzksOCBAQCBzdGF0aWMgaW50IGhmc3Bs dXNfcmVtb3ZleGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSkKIAog c3RhdGljIGludCBoZnNwbHVzX29zeF9nZXR4YXR0cihjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxl ciAqaGFuZGxlciwKIAkJCQlzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5v ZGUsCi0JCQkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJ CQljb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJCWludCBm bGFncykKIHsKIAkvKgogCSAqIERvbid0IGFsbG93IHJldHJpZXZpbmcgcHJvcGVybHkgcHJlZml4 ZWQgYXR0cmlidXRlcwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy94YXR0cl90cnVzdGVkLmMgYi9m cy9oZnNwbHVzL3hhdHRyX3RydXN0ZWQuYwppbmRleCBmYmFkOTFlMWRhZGEuLjU0ZDkyNjMxNGY4 YyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy94YXR0cl90cnVzdGVkLmMKKysrIGIvZnMvaGZzcGx1 cy94YXR0cl90cnVzdGVkLmMKQEAgLTE0LDcgKzE0LDggQEAKIAogc3RhdGljIGludCBoZnNwbHVz X3RydXN0ZWRfZ2V0eGF0dHIoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJ CQkJICAgIHN0cnVjdCBkZW50cnkgKnVudXNlZCwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkg ICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJCQkgICAg Y29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAorCQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50 IGZsYWdzKQogewogCXJldHVybiBoZnNwbHVzX2dldHhhdHRyKGlub2RlLCBuYW1lLCBidWZmZXIs IHNpemUsCiAJCQkJWEFUVFJfVFJVU1RFRF9QUkVGSVgsCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVz L3hhdHRyX3VzZXIuYyBiL2ZzL2hmc3BsdXMveGF0dHJfdXNlci5jCmluZGV4IDc0ZDE5ZmFmMjU1 ZS4uNGQyYjFmZmZmODg3IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL3hhdHRyX3VzZXIuYworKysg Yi9mcy9oZnNwbHVzL3hhdHRyX3VzZXIuYwpAQCAtMTQsNyArMTQsOCBAQAogCiBzdGF0aWMgaW50 IGhmc3BsdXNfdXNlcl9nZXR4YXR0cihjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxl ciwKIAkJCQkgc3RydWN0IGRlbnRyeSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJ CSBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorCQkJCSBjb25z dCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJCSBpbnQgZmxhZ3Mp CiB7CiAKIAlyZXR1cm4gaGZzcGx1c19nZXR4YXR0cihpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXpl LApkaWZmIC0tZ2l0IGEvZnMvamZmczIvc2VjdXJpdHkuYyBiL2ZzL2pmZnMyL3NlY3VyaXR5LmMK aW5kZXggYzIzMzJlMzBmMjE4Li5lNmY0MmZlNDM1YWYgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3Nl Y3VyaXR5LmMKKysrIGIvZnMvamZmczIvc2VjdXJpdHkuYwpAQCAtNTAsNyArNTAsOCBAQCBpbnQg amZmczJfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRp ciwKIC8qIC0tLS0gWEFUVFIgSGFuZGxlciBmb3IgInNlY3VyaXR5LioiIC0tLS0tLS0tLS0tLS0t LS0tICovCiBzdGF0aWMgaW50IGpmZnMyX3NlY3VyaXR5X2dldHhhdHRyKGNvbnN0IHN0cnVjdCB4 YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJCSAgIHN0cnVjdCBkZW50cnkgKnVudXNlZCwgc3Ry dWN0IGlub2RlICppbm9kZSwKLQkJCQkgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIs IHNpemVfdCBzaXplKQorCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6 ZV90IHNpemUsCisJCQkJICAgaW50IGZsYWdzKQogewogCXJldHVybiBkb19qZmZzMl9nZXR4YXR0 cihpbm9kZSwgSkZGUzJfWFBSRUZJWF9TRUNVUklUWSwKIAkJCQkgbmFtZSwgYnVmZmVyLCBzaXpl KTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3hhdHRyX3RydXN0ZWQuYyBiL2ZzL2pmZnMyL3hhdHRy X3RydXN0ZWQuYwppbmRleCA1ZDYwMzA4MjZjNTIuLjlkY2NhYWU1NDlmNSAxMDA2NDQKLS0tIGEv ZnMvamZmczIveGF0dHJfdHJ1c3RlZC5jCisrKyBiL2ZzL2pmZnMyL3hhdHRyX3RydXN0ZWQuYwpA QCAtMTgsNyArMTgsOCBAQAogCiBzdGF0aWMgaW50IGpmZnMyX3RydXN0ZWRfZ2V0eGF0dHIoY29u c3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkJICBzdHJ1Y3QgZGVudHJ5ICp1 bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICBjb25zdCBjaGFyICpuYW1lLCB2b2lk ICpidWZmZXIsIHNpemVfdCBzaXplKQorCQkJCSAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVm ZmVyLCBzaXplX3Qgc2l6ZSwKKwkJCQkgIGludCBmbGFncykKIHsKIAlyZXR1cm4gZG9famZmczJf Z2V0eGF0dHIoaW5vZGUsIEpGRlMyX1hQUkVGSVhfVFJVU1RFRCwKIAkJCQkgbmFtZSwgYnVmZmVy LCBzaXplKTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3hhdHRyX3VzZXIuYyBiL2ZzL2pmZnMyL3hh dHRyX3VzZXIuYwppbmRleCA5ZDAyN2I0YWJjZjkuLmMwOTgzYTNlODEwYiAxMDA2NDQKLS0tIGEv ZnMvamZmczIveGF0dHJfdXNlci5jCisrKyBiL2ZzL2pmZnMyL3hhdHRyX3VzZXIuYwpAQCAtMTgs NyArMTgsOCBAQAogCiBzdGF0aWMgaW50IGpmZnMyX3VzZXJfZ2V0eGF0dHIoY29uc3Qgc3RydWN0 IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqdW51c2Vk LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQg KmJ1ZmZlciwgc2l6ZV90IHNpemUpCisJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAq YnVmZmVyLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgICBpbnQgZmxhZ3MpCiB7CiAJcmV0dXJuIGRv X2pmZnMyX2dldHhhdHRyKGlub2RlLCBKRkZTMl9YUFJFRklYX1VTRVIsCiAJCQkJIG5hbWUsIGJ1 ZmZlciwgc2l6ZSk7CmRpZmYgLS1naXQgYS9mcy9qZnMveGF0dHIuYyBiL2ZzL2pmcy94YXR0ci5j CmluZGV4IGRiNDFlNzgwMzE2My4uNWM3OWEzNWJmNjJmIDEwMDY0NAotLS0gYS9mcy9qZnMveGF0 dHIuYworKysgYi9mcy9qZnMveGF0dHIuYwpAQCAtOTI1LDcgKzkyNSw3IEBAIHN0YXRpYyBpbnQg X19qZnNfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCiAK IHN0YXRpYyBpbnQgamZzX3hhdHRyX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFu ZGxlciwKIAkJCSBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0J CQkgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQorCQkJIGNvbnN0 IGNoYXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCW5h bWUgPSB4YXR0cl9mdWxsX25hbWUoaGFuZGxlciwgbmFtZSk7CiAJcmV0dXJuIF9famZzX2dldHhh dHRyKGlub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSk7CkBAIC05NDIsNyArOTQyLDggQEAgc3RhdGlj IGludCBqZnNfeGF0dHJfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAog CiBzdGF0aWMgaW50IGpmc194YXR0cl9nZXRfb3MyKGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVy ICpoYW5kbGVyLAogCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAq aW5vZGUsCi0JCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6 ZSkKKwkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLAor CQkJICAgICBpbnQgZmxhZ3MpCiB7CiAJaWYgKGlzX2tub3duX25hbWVzcGFjZShuYW1lKSkKIAkJ cmV0dXJuIC1FT1BOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvZnMva2VybmZzL2lub2RlLmMgYi9mcy9r ZXJuZnMvaW5vZGUuYwppbmRleCBmM2YzOTg0Y2NlODAuLjg5ZGIyNGNlNjQ0ZSAxMDA2NDQKLS0t IGEvZnMva2VybmZzL2lub2RlLmMKKysrIGIvZnMva2VybmZzL2lub2RlLmMKQEAgLTMwOSw3ICsz MDksOCBAQCBpbnQga2VybmZzX3hhdHRyX3NldChzdHJ1Y3Qga2VybmZzX25vZGUgKmtuLCBjb25z dCBjaGFyICpuYW1lLAogCiBzdGF0aWMgaW50IGtlcm5mc192ZnNfeGF0dHJfZ2V0KGNvbnN0IHN0 cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJCXN0cnVjdCBkZW50cnkgKnVudXNlZCwg c3RydWN0IGlub2RlICppbm9kZSwKLQkJCQljb25zdCBjaGFyICpzdWZmaXgsIHZvaWQgKnZhbHVl LCBzaXplX3Qgc2l6ZSkKKwkJCQljb25zdCBjaGFyICpzdWZmaXgsIHZvaWQgKnZhbHVlLCBzaXpl X3Qgc2l6ZSwKKwkJCQlpbnQgZmxhZ3MpCiB7CiAJY29uc3QgY2hhciAqbmFtZSA9IHhhdHRyX2Z1 bGxfbmFtZShoYW5kbGVyLCBzdWZmaXgpOwogCXN0cnVjdCBrZXJuZnNfbm9kZSAqa24gPSBpbm9k ZS0+aV9wcml2YXRlOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZz NHByb2MuYwppbmRleCAzOTg5NmFmYzZlZGYuLjVlNmE1ODY4NWNkMCAxMDA2NDQKLS0tIGEvZnMv bmZzL25mczRwcm9jLmMKKysrIGIvZnMvbmZzL25mczRwcm9jLmMKQEAgLTcyMDMsNyArNzIwMyw4 IEBAIHN0YXRpYyBpbnQgbmZzNF94YXR0cl9zZXRfbmZzNF9hY2woY29uc3Qgc3RydWN0IHhhdHRy X2hhbmRsZXIgKmhhbmRsZXIsCiAKIHN0YXRpYyBpbnQgbmZzNF94YXR0cl9nZXRfbmZzNF9hY2wo Y29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkJICAgc3RydWN0IGRlbnRy eSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgIGNvbnN0IGNoYXIgKmtleSwg dm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuKQorCQkJCSAgIGNvbnN0IGNoYXIgKmtleSwgdm9pZCAq YnVmLCBzaXplX3QgYnVmbGVuLAorCQkJCSAgIGludCBmbGFncykKIHsKIAlyZXR1cm4gbmZzNF9w cm9jX2dldF9hY2woaW5vZGUsIGJ1ZiwgYnVmbGVuKTsKIH0KQEAgLTcyMjgsNyArNzIyOSw4IEBA IHN0YXRpYyBpbnQgbmZzNF94YXR0cl9zZXRfbmZzNF9sYWJlbChjb25zdCBzdHJ1Y3QgeGF0dHJf aGFuZGxlciAqaGFuZGxlciwKIAogc3RhdGljIGludCBuZnM0X3hhdHRyX2dldF9uZnM0X2xhYmVs KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJCSAgICAgc3RydWN0IGRl bnRyeSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICAgY29uc3QgY2hhciAq a2V5LCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4pCisJCQkJICAgICBjb25zdCBjaGFyICprZXks IHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKKwkJCQkgICAgIGludCBmbGFncykKIHsKIAlpZiAo c2VjdXJpdHlfaXNtYWNsYWJlbChrZXkpKQogCQlyZXR1cm4gbmZzNF9nZXRfc2VjdXJpdHlfbGFi ZWwoaW5vZGUsIGJ1ZiwgYnVmbGVuKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9m cy9vY2ZzMi94YXR0ci5jCmluZGV4IDM4NWYzYWFhMjQ0OC4uMDZlNjE1NjQyNDIyIDEwMDY0NAot LS0gYS9mcy9vY2ZzMi94YXR0ci5jCisrKyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTcyNDUsNyAr NzI0NSw4IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpk aXIsCiAgKi8KIHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2VjdXJpdHlfZ2V0KGNvbnN0IHN0cnVj dCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJCSAgICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQs IHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1 ZmZlciwgc2l6ZV90IHNpemUpCisJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZl ciwgc2l6ZV90IHNpemUsCisJCQkJICAgIGludCBmbGFncykKIHsKIAlyZXR1cm4gb2NmczJfeGF0 dHJfZ2V0KGlub2RlLCBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSwKIAkJCSAgICAgICBuYW1l LCBidWZmZXIsIHNpemUpOwpAQCAtNzMxNyw3ICs3MzE4LDggQEAgY29uc3Qgc3RydWN0IHhhdHRy X2hhbmRsZXIgb2NmczJfeGF0dHJfc2VjdXJpdHlfaGFuZGxlciA9IHsKICAqLwogc3RhdGljIGlu dCBvY2ZzMl94YXR0cl90cnVzdGVkX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFu ZGxlciwKIAkJCQkgICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUs Ci0JCQkJICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJ CQkgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJCSAg IGludCBmbGFncykKIHsKIAlyZXR1cm4gb2NmczJfeGF0dHJfZ2V0KGlub2RlLCBPQ0ZTMl9YQVRU Ul9JTkRFWF9UUlVTVEVELAogCQkJICAgICAgIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7CkBAIC03MzQz LDcgKzczNDUsOCBAQCBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBvY2ZzMl94YXR0cl90cnVz dGVkX2hhbmRsZXIgPSB7CiAgKi8KIHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfdXNlcl9nZXQoY29u c3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkJc3RydWN0IGRlbnRyeSAqdW51 c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCWNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1 ZmZlciwgc2l6ZV90IHNpemUpCisJCQkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBz aXplX3Qgc2l6ZSwKKwkJCQlpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2Ig PSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CiAKZGlmZiAtLWdpdCBhL2ZzL29yYW5nZWZzL3hhdHRy LmMgYi9mcy9vcmFuZ2Vmcy94YXR0ci5jCmluZGV4IGJkYzI4NWFlYTM2MC4uZWY0MTgwYmZmN2Ji IDEwMDY0NAotLS0gYS9mcy9vcmFuZ2Vmcy94YXR0ci5jCisrKyBiL2ZzL29yYW5nZWZzL3hhdHRy LmMKQEAgLTU0MSw3ICs1NDEsOCBAQCBzdGF0aWMgaW50IG9yYW5nZWZzX3hhdHRyX2dldF9kZWZh dWx0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJCSAgICAgIHN0cnVj dCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwKIAkJCQkgICAgICB2 b2lkICpidWZmZXIsCi0JCQkJICAgICAgc2l6ZV90IHNpemUpCisJCQkJICAgICAgc2l6ZV90IHNp emUsCisJCQkJICAgICAgaW50IGZsYWdzKQogewogCXJldHVybiBvcmFuZ2Vmc19pbm9kZV9nZXR4 YXR0cihpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKIApkaWZmIC0tZ2l0IGEvZnMvb3Zlcmxh eWZzL3N1cGVyLmMgYi9mcy9vdmVybGF5ZnMvc3VwZXIuYwppbmRleCBiMzY4ZTJlMTAyZmEuLmE3 YjIxZjJlYTJkZCAxMDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL3N1cGVyLmMKKysrIGIvZnMvb3Zl cmxheWZzL3N1cGVyLmMKQEAgLTg1NCw3ICs4NTQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG92 bF9zcGxpdF9sb3dlcmRpcnMoY2hhciAqc3RyKQogc3RhdGljIGludCBfX21heWJlX3VudXNlZAog b3ZsX3Bvc2l4X2FjbF94YXR0cl9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRs ZXIsCiAJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQlj b25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorCQkJY29uc3QgY2hh ciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCXJldHVy biBvdmxfeGF0dHJfZ2V0KGRlbnRyeSwgaW5vZGUsIGhhbmRsZXItPm5hbWUsIGJ1ZmZlciwgc2l6 ZSk7CiB9CkBAIC05MTksNyArOTE5LDggQEAgb3ZsX3Bvc2l4X2FjbF94YXR0cl9zZXQoY29uc3Qg c3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAKIHN0YXRpYyBpbnQgb3ZsX293bl94YXR0 cl9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkgICAgIHN0cnVj dCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgY29uc3QgY2hh ciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJCSAgICAgY29uc3QgY2hhciAq bmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgaW50IGZsYWdzKQogewog CXJldHVybiAtRU9QTk9UU1VQUDsKIH0KQEAgLTkzNCw3ICs5MzUsOCBAQCBzdGF0aWMgaW50IG92 bF9vd25feGF0dHJfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCiBz dGF0aWMgaW50IG92bF9vdGhlcl94YXR0cl9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIg KmhhbmRsZXIsCiAJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUg Kmlub2RlLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90 IHNpemUpCisJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qg c2l6ZSwKKwkJCSAgICAgICBpbnQgZmxhZ3MpCiB7CiAJcmV0dXJuIG92bF94YXR0cl9nZXQoZGVu dHJ5LCBpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3Bvc2l4 X2FjbC5jIGIvZnMvcG9zaXhfYWNsLmMKaW5kZXggODRhZDFjOTBkNTM1Li5jZDU1NjIxZTU3MGIg MTAwNjQ0Ci0tLSBhL2ZzL3Bvc2l4X2FjbC5jCisrKyBiL2ZzL3Bvc2l4X2FjbC5jCkBAIC04MzIs NyArODMyLDcgQEAgRVhQT1JUX1NZTUJPTCAocG9zaXhfYWNsX3RvX3hhdHRyKTsKIHN0YXRpYyBp bnQKIHBvc2l4X2FjbF94YXR0cl9nZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRs ZXIsCiAJCSAgICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0J CSAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpCisJCSAgICBj b25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsK IAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAJaW50IGVycm9yOwpkaWZmIC0tZ2l0IGEvZnMvcmVp c2VyZnMveGF0dHJfc2VjdXJpdHkuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyX3NlY3VyaXR5LmMKaW5k ZXggMjBiZTlhMGU1ODcwLi5lZWRmYTA3YTRmZDAgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hh dHRyX3NlY3VyaXR5LmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHJfc2VjdXJpdHkuYwpAQCAtMTEs NyArMTEsOCBAQAogCiBzdGF0aWMgaW50CiBzZWN1cml0eV9nZXQoY29uc3Qgc3RydWN0IHhhdHRy X2hhbmRsZXIgKmhhbmRsZXIsIHN0cnVjdCBkZW50cnkgKnVudXNlZCwKLQkgICAgIHN0cnVjdCBp bm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUp CisJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZm ZXIsIHNpemVfdCBzaXplLAorCSAgICAgaW50IGZsYWdzKQogewogCWlmIChJU19QUklWQVRFKGlu b2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyX3Ry dXN0ZWQuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyX3RydXN0ZWQuYwppbmRleCA1ZWQ0OGRhM2QwMmIu LjJkMTFkOTg2MDVkZCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMveGF0dHJfdHJ1c3RlZC5jCisr KyBiL2ZzL3JlaXNlcmZzL3hhdHRyX3RydXN0ZWQuYwpAQCAtMTAsNyArMTAsOCBAQAogCiBzdGF0 aWMgaW50CiB0cnVzdGVkX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwg c3RydWN0IGRlbnRyeSAqdW51c2VkLAotCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBj aGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorCSAgICBzdHJ1Y3QgaW5vZGUg Kmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCSAg ICBpbnQgZmxhZ3MpCiB7CiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8IElTX1BSSVZB VEUoaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0 dHJfdXNlci5jIGIvZnMvcmVpc2VyZnMveGF0dHJfdXNlci5jCmluZGV4IGE1NzNjYTQ1YmFjYy4u MmE1OWQ4NWM2OWM5IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy94YXR0cl91c2VyLmMKKysrIGIv ZnMvcmVpc2VyZnMveGF0dHJfdXNlci5jCkBAIC05LDcgKzksOCBAQAogCiBzdGF0aWMgaW50CiB1 c2VyX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwgc3RydWN0IGRlbnRy eSAqdW51c2VkLAotCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lk ICpidWZmZXIsIHNpemVfdCBzaXplKQorCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFy ICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCSBpbnQgZmxhZ3MpCiB7CiAJaWYg KCFyZWlzZXJmc194YXR0cnNfdXNlcihpbm9kZS0+aV9zYikpCiAJCXJldHVybiAtRU9QTk9UU1VQ UDsKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL3hhdHRyLmMgYi9mcy9zcXVhc2hmcy94YXR0ci5j CmluZGV4IGUxZTNmM2RkNWEwNi4uZDhkNThjOTkwNjUyIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hm cy94YXR0ci5jCisrKyBiL2ZzL3NxdWFzaGZzL3hhdHRyLmMKQEAgLTIwNCw3ICsyMDQsNyBAQCBz dGF0aWMgaW50IHNxdWFzaGZzX3hhdHRyX2hhbmRsZXJfZ2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9o YW5kbGVyICpoYW5kbGVyLAogCQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKnVudXNlZCwKIAkJCQkg ICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCi0J CQkJICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJCQkgICAgICB2b2lkICpidWZm ZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJcmV0dXJuIHNxdWFzaGZzX3hhdHRyX2dl dChpbm9kZSwgaGFuZGxlci0+ZmxhZ3MsIG5hbWUsCiAJCWJ1ZmZlciwgc2l6ZSk7CmRpZmYgLS1n aXQgYS9mcy94YXR0ci5jIGIvZnMveGF0dHIuYwppbmRleCA5MGRkNzhmMGViMjcuLjcxZjg4NzUx OGQ2ZiAxMDA2NDQKLS0tIGEvZnMveGF0dHIuYworKysgYi9mcy94YXR0ci5jCkBAIC0yODEsNyAr MjgxLDcgQEAgdmZzX2dldHhhdHRyX2FsbG9jKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qg Y2hhciAqbmFtZSwgY2hhciAqKnhhdHRyX3ZhbHVlLAogCQlyZXR1cm4gUFRSX0VSUihoYW5kbGVy KTsKIAlpZiAoIWhhbmRsZXItPmdldCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCWVycm9yID0g aGFuZGxlci0+Z2V0KGhhbmRsZXIsIGRlbnRyeSwgaW5vZGUsIG5hbWUsIE5VTEwsIDApOworCWVy cm9yID0gaGFuZGxlci0+Z2V0KGhhbmRsZXIsIGRlbnRyeSwgaW5vZGUsIG5hbWUsIE5VTEwsIDAs IDApOwogCWlmIChlcnJvciA8IDApCiAJCXJldHVybiBlcnJvcjsKIApAQCAtMjkyLDMyICsyOTIs MjAgQEAgdmZzX2dldHhhdHRyX2FsbG9jKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hh ciAqbmFtZSwgY2hhciAqKnhhdHRyX3ZhbHVlLAogCQltZW1zZXQodmFsdWUsIDAsIGVycm9yICsg MSk7CiAJfQogCi0JZXJyb3IgPSBoYW5kbGVyLT5nZXQoaGFuZGxlciwgZGVudHJ5LCBpbm9kZSwg bmFtZSwgdmFsdWUsIGVycm9yKTsKKwllcnJvciA9IGhhbmRsZXItPmdldChoYW5kbGVyLCBkZW50 cnksIGlub2RlLCBuYW1lLCB2YWx1ZSwgZXJyb3IsIDApOwogCSp4YXR0cl92YWx1ZSA9IHZhbHVl OwogCXJldHVybiBlcnJvcjsKIH0KIAogc3NpemVfdAogX192ZnNfZ2V0eGF0dHIoc3RydWN0IGRl bnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCSAg ICAgICB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpCisJICAgICAgIHZvaWQgKnZhbHVlLCBzaXpl X3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCWNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5k bGVyOwotCi0JaGFuZGxlciA9IHhhdHRyX3Jlc29sdmVfbmFtZShpbm9kZSwgJm5hbWUpOwotCWlm IChJU19FUlIoaGFuZGxlcikpCi0JCXJldHVybiBQVFJfRVJSKGhhbmRsZXIpOwotCWlmICghaGFu ZGxlci0+Z2V0KQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JcmV0dXJuIGhhbmRsZXItPmdldCho YW5kbGVyLCBkZW50cnksIGlub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSk7Ci19Ci1FWFBPUlRfU1lN Qk9MKF9fdmZzX2dldHhhdHRyKTsKLQotc3NpemVfdAotdmZzX2dldHhhdHRyKHN0cnVjdCBkZW50 cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQot ewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJaW50IGVycm9yOwog CisJaWYgKGZsYWdzICYgWEFUVFJfTk9TRUNVUklUWSkKKwkJZ290byBub2xzbTsKIAllcnJvciA9 IHhhdHRyX3Blcm1pc3Npb24oaW5vZGUsIG5hbWUsIE1BWV9SRUFEKTsKIAlpZiAoZXJyb3IpCiAJ CXJldHVybiBlcnJvcjsKQEAgLTMzOSw3ICszMjcsMTkgQEAgdmZzX2dldHhhdHRyKHN0cnVjdCBk ZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXpl KQogCQlyZXR1cm4gcmV0OwogCX0KIG5vbHNtOgotCXJldHVybiBfX3Zmc19nZXR4YXR0cihkZW50 cnksIGlub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSk7CisJaGFuZGxlciA9IHhhdHRyX3Jlc29sdmVf bmFtZShpbm9kZSwgJm5hbWUpOworCWlmIChJU19FUlIoaGFuZGxlcikpCisJCXJldHVybiBQVFJf RVJSKGhhbmRsZXIpOworCWlmICghaGFuZGxlci0+Z2V0KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7 CisJcmV0dXJuIGhhbmRsZXItPmdldChoYW5kbGVyLCBkZW50cnksIGlub2RlLCBuYW1lLCB2YWx1 ZSwgc2l6ZSwgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChfX3Zmc19nZXR4YXR0cik7CisKK3Nz aXplX3QKK3Zmc19nZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5h bWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gX192ZnNfZ2V0eGF0dHIo ZGVudHJ5LCBkZW50cnktPmRfaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCAwKTsKIH0KIEVYUE9S VF9TWU1CT0xfR1BMKHZmc19nZXR4YXR0cik7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfeGF0 dHIuYyBiL2ZzL3hmcy94ZnNfeGF0dHIuYwppbmRleCAzMTIzYjVhYWFkMmEuLmNhZmM5OWM0OGUy MCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc194YXR0ci5jCisrKyBiL2ZzL3hmcy94ZnNfeGF0dHIu YwpAQCAtMTgsNyArMTgsOCBAQAogCiBzdGF0aWMgaW50CiB4ZnNfeGF0dHJfZ2V0KGNvbnN0IHN0 cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLCBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsCi0JCXN0 cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qg c2l6ZSkKKwkJc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFs dWUsIHNpemVfdCBzaXplLAorCQlpbnQgZmxhZ3MpCiB7CiAJaW50IHhmbGFncyA9IGhhbmRsZXIt PmZsYWdzOwogCXN0cnVjdCB4ZnNfaW5vZGUgKmlwID0gWEZTX0koaW5vZGUpOwpkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9saW51eC94YXR0ci5oIGIvaW5jbHVkZS9saW51eC94YXR0ci5oCmluZGV4IDZk YWQwMzFiZTNjMi4uZTVjMTkxYjMwODE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3hhdHRy LmgKKysrIGIvaW5jbHVkZS9saW51eC94YXR0ci5oCkBAIC0zMCwxMCArMzAsMTAgQEAgc3RydWN0 IHhhdHRyX2hhbmRsZXIgewogCWNvbnN0IGNoYXIgKnByZWZpeDsKIAlpbnQgZmxhZ3M7ICAgICAg LyogZnMgcHJpdmF0ZSBmbGFncyAqLwogCWJvb2wgKCpsaXN0KShzdHJ1Y3QgZGVudHJ5ICpkZW50 cnkpOwotCWludCAoKmdldCkoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiwgc3RydWN0IGRl bnRyeSAqZGVudHJ5LAorCWludCAoKmdldCkoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhh bmRsZXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJICAgc3RydWN0IGlub2RlICppbm9kZSwg Y29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAotCQkgICBzaXplX3Qgc2l6ZSk7Ci0JaW50 ICgqc2V0KShjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqLCBzdHJ1Y3QgZGVudHJ5ICpkZW50 cnksCisJCSAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworCWludCAoKnNldCkoY29uc3Qgc3Ry dWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJICAg c3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqYnVmZmVy LAogCQkgICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKIH07CkBAIC00Niw3ICs0Niw4IEBAIHN0 cnVjdCB4YXR0ciB7CiAJc2l6ZV90IHZhbHVlX2xlbjsKIH07CiAKLXNzaXplX3QgX192ZnNfZ2V0 eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgY2hhciAqLCB2b2lk ICosIHNpemVfdCk7Citzc2l6ZV90IF9fdmZzX2dldHhhdHRyKHN0cnVjdCBkZW50cnkgKiwgc3Ry dWN0IGlub2RlICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLAorCQkgICAgICAgc2l6ZV90LCBpbnQp Owogc3NpemVfdCB2ZnNfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICosIHZv aWQgKiwgc2l6ZV90KTsKIHNzaXplX3QgdmZzX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkLCBj aGFyICpsaXN0LCBzaXplX3Qgc2l6ZSk7CiBpbnQgX192ZnNfc2V0eGF0dHIoc3RydWN0IGRlbnRy eSAqLCBzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosIHNpemVfdCwg aW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC94YXR0ci5oIGIvaW5jbHVkZS91 YXBpL2xpbnV4L3hhdHRyLmgKaW5kZXggYzEzOTViNWJkNDMyLi4xMjE2ZDc3N2QyMTAgMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC94YXR0ci5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51 eC94YXR0ci5oCkBAIC0xNyw4ICsxNyw5IEBACiAjaWYgX19VQVBJX0RFRl9YQVRUUgogI2RlZmlu ZSBfX1VTRV9LRVJORUxfWEFUVFJfREVGUwogCi0jZGVmaW5lIFhBVFRSX0NSRUFURQkweDEJLyog c2V0IHZhbHVlLCBmYWlsIGlmIGF0dHIgYWxyZWFkeSBleGlzdHMgKi8KLSNkZWZpbmUgWEFUVFJf UkVQTEFDRQkweDIJLyogc2V0IHZhbHVlLCBmYWlsIGlmIGF0dHIgZG9lcyBub3QgZXhpc3QgKi8K KyNkZWZpbmUgWEFUVFJfQ1JFQVRFCSAweDEJLyogc2V0IHZhbHVlLCBmYWlsIGlmIGF0dHIgYWxy ZWFkeSBleGlzdHMgKi8KKyNkZWZpbmUgWEFUVFJfUkVQTEFDRQkgMHgyCS8qIHNldCB2YWx1ZSwg ZmFpbCBpZiBhdHRyIGRvZXMgbm90IGV4aXN0ICovCisjZGVmaW5lIFhBVFRSX05PU0VDVVJJVFkg MHg0CS8qIGdldCB2YWx1ZSwgZG8gbm90IGludm9sdmUgc2VjdXJpdHkgY2hlY2sgKi8KICNlbmRp ZgogCiAvKiBOYW1lc3BhY2VzICovCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0u YwppbmRleCA2MjZkOGM3NGI5NzMuLjM0ZDM4MThiNDQyNCAxMDA2NDQKLS0tIGEvbW0vc2htZW0u YworKysgYi9tbS9zaG1lbS5jCkBAIC0zMjA2LDcgKzMyMDYsOCBAQCBzdGF0aWMgaW50IHNobWVt X2luaXR4YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwKIAogc3RhdGljIGludCBzaG1lbV94YXR0 cl9oYW5kbGVyX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwKIAkJCQkg ICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgY29u c3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKwkJCQkgICBjb25zdCBj aGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJCSAgIGludCBmbGFncykK IHsKIAlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpOwogCmRp ZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggNmE5YWI3YThiMWQy Li42YjBmZWE5MmRkMDIgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0 LmMKQEAgLTMwMCw3ICszMDAsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRp b25zIHNvY2tmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAogc3RhdGljIGludCBzb2NrZnNfeGF0 dHJfZ2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLAogCQkJICAgIHN0cnVj dCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICBjb25zdCBjaGFy ICpzdWZmaXgsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKKwkJCSAgICBjb25zdCBjaGFyICpz dWZmaXgsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICBpbnQgZmxhZ3MpCiB7CiAJ aWYgKHZhbHVlKSB7CiAJCWlmIChkZW50cnktPmRfbmFtZS5sZW4gKyAxID4gc2l6ZSkKZGlmZiAt LWdpdCBhL3NlY3VyaXR5L2NvbW1vbmNhcC5jIGIvc2VjdXJpdHkvY29tbW9uY2FwLmMKaW5kZXgg ZjRlZTBhZTEwNmIyLi4zNzhhMmY2NmE3M2QgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2NvbW1vbmNh cC5jCisrKyBiL3NlY3VyaXR5L2NvbW1vbmNhcC5jCkBAIC0yOTcsNyArMjk3LDggQEAgaW50IGNh cF9pbm9kZV9uZWVkX2tpbGxwcml2KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAlzdHJ1Y3QgaW5v ZGUgKmlub2RlID0gZF9iYWNraW5nX2lub2RlKGRlbnRyeSk7CiAJaW50IGVycm9yOwogCi0JZXJy b3IgPSBfX3Zmc19nZXR4YXR0cihkZW50cnksIGlub2RlLCBYQVRUUl9OQU1FX0NBUFMsIE5VTEws IDApOworCWVycm9yID0gX192ZnNfZ2V0eGF0dHIoZGVudHJ5LCBpbm9kZSwgWEFUVFJfTkFNRV9D QVBTLCBOVUxMLCAwLAorCQkJICAgICAgIFhBVFRSX05PU0VDVVJJVFkpOwogCXJldHVybiBlcnJv ciA+IDA7CiB9CiAKQEAgLTU4Niw3ICs1ODcsOCBAQCBpbnQgZ2V0X3Zmc19jYXBzX2Zyb21fZGlz ayhjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBjcHVfdmZzX2NhcF9kYXRhCiAK IAlmc19ucyA9IGlub2RlLT5pX3NiLT5zX3VzZXJfbnM7CiAJc2l6ZSA9IF9fdmZzX2dldHhhdHRy KChzdHJ1Y3QgZGVudHJ5ICopZGVudHJ5LCBpbm9kZSwKLQkJCSAgICAgIFhBVFRSX05BTUVfQ0FQ UywgJmRhdGEsIFhBVFRSX0NBUFNfU1opOworCQkJICAgICAgWEFUVFJfTkFNRV9DQVBTLCAmZGF0 YSwgWEFUVFJfQ0FQU19TWiwKKwkJCSAgICAgIFhBVFRSX05PU0VDVVJJVFkpOwogCWlmIChzaXpl ID09IC1FTk9EQVRBIHx8IHNpemUgPT0gLUVPUE5PVFNVUFApCiAJCS8qIG5vIGRhdGEsIHRoYXQn cyBvayAqLwogCQlyZXR1cm4gLUVOT0RBVEE7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3Jp dHkvZXZtL2V2bV9tYWluLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMKaW5k ZXggZjlhODFiMTg3ZmFlLi45MjFjOGYyYWZjYWYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2ludGVn cml0eS9ldm0vZXZtX21haW4uYworKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWlu LmMKQEAgLTEwMCw3ICsxMDAsOCBAQCBzdGF0aWMgaW50IGV2bV9maW5kX3Byb3RlY3RlZF94YXR0 cnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlsaXN0 X2Zvcl9lYWNoX2VudHJ5X3JjdSh4YXR0ciwgJmV2bV9jb25maWdfeGF0dHJuYW1lcywgbGlzdCkg ewotCQllcnJvciA9IF9fdmZzX2dldHhhdHRyKGRlbnRyeSwgaW5vZGUsIHhhdHRyLT5uYW1lLCBO VUxMLCAwKTsKKwkJZXJyb3IgPSBfX3Zmc19nZXR4YXR0cihkZW50cnksIGlub2RlLCB4YXR0ci0+ bmFtZSwgTlVMTCwgMCwKKwkJCQkgICAgICAgWEFUVFJfTk9TRUNVUklUWSk7CiAJCWlmIChlcnJv ciA8IDApIHsKIAkJCWlmIChlcnJvciA9PSAtRU5PREFUQSkKIAkJCQljb250aW51ZTsKZGlmZiAt LWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3Mu YwppbmRleCA3NGRkNDZkZTAxYjYuLmIwODIyZGEwNjU4ZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkv c2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtNTUyLDcg KzU1Miw4IEBAIHN0YXRpYyBpbnQgc2JfZmluaXNoX3NldF9vcHRzKHN0cnVjdCBzdXBlcl9ibG9j ayAqc2IpCiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXJjID0gX192ZnNfZ2V0eGF0dHIocm9vdCwg cm9vdF9pbm9kZSwgWEFUVFJfTkFNRV9TRUxJTlVYLCBOVUxMLCAwKTsKKwkJcmMgPSBfX3Zmc19n ZXR4YXR0cihyb290LCByb290X2lub2RlLCBYQVRUUl9OQU1FX1NFTElOVVgsIE5VTEwsCisJCQkJ ICAgIDAsIFhBVFRSX05PU0VDVVJJVFkpOwogCQlpZiAocmMgPCAwICYmIHJjICE9IC1FTk9EQVRB KSB7CiAJCQlpZiAocmMgPT0gLUVPUE5PVFNVUFApCiAJCQkJcHJfd2FybigiU0VMaW51eDogKGRl diAlcywgdHlwZSAiCkBAIC0xMzc4LDEyICsxMzc5LDE0IEBAIHN0YXRpYyBpbnQgaW5vZGVfZG9p bml0X3VzZV94YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnks CiAJCXJldHVybiAtRU5PTUVNOwogCiAJY29udGV4dFtsZW5dID0gJ1wwJzsKLQlyYyA9IF9fdmZz X2dldHhhdHRyKGRlbnRyeSwgaW5vZGUsIFhBVFRSX05BTUVfU0VMSU5VWCwgY29udGV4dCwgbGVu KTsKKwlyYyA9IF9fdmZzX2dldHhhdHRyKGRlbnRyeSwgaW5vZGUsIFhBVFRSX05BTUVfU0VMSU5V WCwgY29udGV4dCwgbGVuLAorCQkJICAgIFhBVFRSX05PU0VDVVJJVFkpOwogCWlmIChyYyA9PSAt RVJBTkdFKSB7CiAJCWtmcmVlKGNvbnRleHQpOwogCiAJCS8qIE5lZWQgYSBsYXJnZXIgYnVmZmVy LiAgUXVlcnkgZm9yIHRoZSByaWdodCBzaXplLiAqLwotCQlyYyA9IF9fdmZzX2dldHhhdHRyKGRl bnRyeSwgaW5vZGUsIFhBVFRSX05BTUVfU0VMSU5VWCwgTlVMTCwgMCk7CisJCXJjID0gX192ZnNf Z2V0eGF0dHIoZGVudHJ5LCBpbm9kZSwgWEFUVFJfTkFNRV9TRUxJTlVYLCBOVUxMLCAwLAorCQkJ CSAgICBYQVRUUl9OT1NFQ1VSSVRZKTsKIAkJaWYgKHJjIDwgMCkKIAkJCXJldHVybiByYzsKIApA QCAtMTM5NCw3ICsxMzk3LDcgQEAgc3RhdGljIGludCBpbm9kZV9kb2luaXRfdXNlX3hhdHRyKHN0 cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAogCQljb250ZXh0W2xl bl0gPSAnXDAnOwogCQlyYyA9IF9fdmZzX2dldHhhdHRyKGRlbnRyeSwgaW5vZGUsIFhBVFRSX05B TUVfU0VMSU5VWCwKLQkJCQkgICAgY29udGV4dCwgbGVuKTsKKwkJCQkgICAgY29udGV4dCwgbGVu LCBYQVRUUl9OT1NFQ1VSSVRZKTsKIAl9CiAJaWYgKHJjIDwgMCkgewogCQlrZnJlZShjb250ZXh0 KTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21h Y2svc21hY2tfbHNtLmMKaW5kZXggNGM1ZTVhNDM4ZjhiLi4xNThiMzU3NzJiZTEgMTAwNjQ0Ci0t LSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNr X2xzbS5jCkBAIC0yOTIsNyArMjkyLDggQEAgc3RhdGljIHN0cnVjdCBzbWFja19rbm93biAqc21r X2ZldGNoKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBpbm9kZSAqaXAsCiAJaWYgKGJ1ZmZlciA9 PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCXJjID0gX192ZnNfZ2V0eGF0 dHIoZHAsIGlwLCBuYW1lLCBidWZmZXIsIFNNS19MT05HTEFCRUwpOworCXJjID0gX192ZnNfZ2V0 eGF0dHIoZHAsIGlwLCBuYW1lLCBidWZmZXIsIFNNS19MT05HTEFCRUwsCisJCQkgICAgWEFUVFJf Tk9TRUNVUklUWSk7CiAJaWYgKHJjIDwgMCkKIAkJc2twID0gRVJSX1BUUihyYyk7CiAJZWxzZSBp ZiAocmMgPT0gMCkKQEAgLTM0NDIsNyArMzQ0Myw3IEBAIHN0YXRpYyB2b2lkIHNtYWNrX2RfaW5z dGFudGlhdGUoc3RydWN0IGRlbnRyeSAqb3B0X2RlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkK IAkJCX0gZWxzZSB7CiAJCQkJcmMgPSBfX3Zmc19nZXR4YXR0cihkcCwgaW5vZGUsCiAJCQkJCVhB VFRSX05BTUVfU01BQ0tUUkFOU01VVEUsIHRyYXR0ciwKLQkJCQkJVFJBTlNfVFJVRV9TSVpFKTsK KwkJCQkJVFJBTlNfVFJVRV9TSVpFLCBYQVRUUl9OT1NFQ1VSSVRZKTsKIAkJCQlpZiAocmMgPj0g MCAmJiBzdHJuY21wKHRyYXR0ciwgVFJBTlNfVFJVRSwKIAkJCQkJCSAgICAgICBUUkFOU19UUlVF X1NJWkUpICE9IDApCiAJCQkJCXJjID0gLUVJTlZBTDsKLS0gCjIuMjIuMC43NzAuZzBmMmM0YTM3 ZmQtZ29vZwoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpMaW51eCBNVEQgZGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tdGQvCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.9 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C5586C32753 for ; Wed, 31 Jul 2019 16:58:46 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 52317208E4 for ; Wed, 31 Jul 2019 16:58:46 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=android.com header.i=@android.com header.b="N898lsCa" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 52317208E4 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=android.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id E69EF8E0006; Wed, 31 Jul 2019 12:58:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E1B5B8E0001; Wed, 31 Jul 2019 12:58:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C95078E0006; Wed, 31 Jul 2019 12:58:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.200]) by kanga.kvack.org (Postfix) with ESMTP id 827018E0001 for ; Wed, 31 Jul 2019 12:58:45 -0400 (EDT) Received: by mail-pf1-f200.google.com with SMTP id 6so43632777pfz.10 for ; Wed, 31 Jul 2019 09:58:45 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:from:to:cc:subject:date :message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=LHxn7iZ54JoT2ZxEph2N5G+LSVSPJ2zLnE9ei0hDpM8=; b=Puc0Lgx+dHY4o+disFIIjvWU9rFViz34zIf7SCoLiuXnSN4UQ7nzCGirMM8fTatpqb euWRLhtcR+2tkWyxlyUtdQNBiD11+W7xXd6in7yYTbE+QBYAFm1q2XxgAzCOwPhWGIMS Afz7SytLvkGMZHlNC4opY3uSr39HlrUbXleWtnpi1ulNCyNP+l77OlT5N8uEyVtsKCZ8 s3qPDaJfKhWNfKUTep6gKmWmvHKuUCVuhSiYHdQfF5pG2bztqpjjPg/PD2Jc4snDx77D crwsorFnhgwoYM2y78JA6ll4rBLYXszHLQMAOiVYbfWJVfDAlrw+WUGZxnLH580eaFqM SE/Q== X-Gm-Message-State: APjAAAVbwpVoFNaUmT6aQuPsYN4pNRjlxrCrYyHACudBNVghfO0u03XD gjTEQjxqGJ1F6P1I+gLgDXmm9Nm5BFwNFTcW887TYGNNsuZqMknmkwxEnmQM0jQqjtlOH0skM8P cecQBKFuIH6vXVPgJsoryP4M+AADYH5pJVSB+BtbjK8ry3yVTJmViZ0JU06vlzXj/LQ== X-Received: by 2002:a17:902:ab8f:: with SMTP id f15mr27313666plr.159.1564592325071; Wed, 31 Jul 2019 09:58:45 -0700 (PDT) X-Received: by 2002:a17:902:ab8f:: with SMTP id f15mr27313569plr.159.1564592322968; Wed, 31 Jul 2019 09:58:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564592322; cv=none; d=google.com; s=arc-20160816; b=uMuB2ddlnLHiHOKnsMZlaQpT5HcSJ5L0KPCpf3VTl7Qpzw6RlL9BEQnNaew8z8QPPG FzzwVVs3/bmL55AOwD9vDwqqEvS6rdnr0V6HkkBSu6+w8zAVWhkz04k644s2/u/br2+l 778nHtR5mplRrZet6fhHlYi9t8wa8p4mYb++1fzEDJYKoh2bA2OWvbP4AThIWcGZOM/n u8v2FyZgTmuA9gWxWXxCmcAT8aiLJI+PGXqYhO8xtUuGY6GXaa/NqDUgz634QsOp5qbk O8zaPmKgewj12f3zZvDWNN/NFeq+4dNpsoA//4oCKmGAM0tt83TynVmYGihf9ujTvY3F 9ZTw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=LHxn7iZ54JoT2ZxEph2N5G+LSVSPJ2zLnE9ei0hDpM8=; b=tRfDNrcRW3/llbdJEcxD+J5YaamRzewp5bblyrOgnu6SmndecX0Rn/sVcAYLhYIDKc MWlBwHkYhXWs3goy0qPYeDAzSvmeWTq+xbvQD+vycs7QLYxSf5ImzSmmL+jQBdNRA7z0 qH1QmB+jyr8yExCglfSs7heBqillx/04niy3IZInOUbkwfV+1HFQck8uZvlu6Ptv2Nn3 2wSdgmbawZLq2qazEwWLmtzephJCMZIZaxNuGfdeKgFnTed6vStgetGkJhk6b8oNzVHP MWNaoIqMjUxdWi8MNq/9EBLhM/hZc8L/U6kA8RkoBg0TzUqtw/uU5XZ7ZK6QrI9nn+Ak WLCQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@android.com header.s=20161025 header.b=N898lsCa; spf=pass (google.com: domain of salyzyn@android.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=salyzyn@android.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=android.com Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id bj2sor82883526plb.52.2019.07.31.09.58.42 for (Google Transport Security); Wed, 31 Jul 2019 09:58:42 -0700 (PDT) Received-SPF: pass (google.com: domain of salyzyn@android.com designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@android.com header.s=20161025 header.b=N898lsCa; spf=pass (google.com: domain of salyzyn@android.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=salyzyn@android.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=android.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=android.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LHxn7iZ54JoT2ZxEph2N5G+LSVSPJ2zLnE9ei0hDpM8=; b=N898lsCa/SMfpKAqCPq47pOgSHdR6hxDgScZ6DEoLg+etiPY12DFx7gWZd5LUwyobd f0hzCmtUi+glbcABe7YwRp6ryC8rYfSFxrEfYv1rYv1mgglAHU4gBXZx15WYtZ4GZQaF oSaJNa2dt+AdMLgq6D1p/y7W7mbhLIv/MWNRl6rrKQWR6sxUclgCDzKV5x0tt9+jEDAH rGrAVM5SHyQ/LAvUT2qNOc9PHcGFlt4Q+cXus/8yF+k3pzsTSq23MXCP/7tun2NV92EY 17lrkHQkKQZZ7R9aam0Zl85YMjE3eIdxNYJ8ryjQtDfi6pO0AIrcPmYQhQsnzi50MNDC MT4Q== X-Google-Smtp-Source: APXvYqxUm6lDNMAh3srh0DXzL1h01KxjYPmUk6tQtMIwfrpF/wjB4qpOdMv3g9x/m/rz7xhDVg2G6w== X-Received: by 2002:a17:902:e2:: with SMTP id a89mr122348622pla.210.1564592322315; Wed, 31 Jul 2019 09:58:42 -0700 (PDT) Received: from nebulus.mtv.corp.google.com ([2620:15c:211:200:5404:91ba:59dc:9400]) by smtp.gmail.com with ESMTPSA id f72sm2245954pjg.10.2019.07.31.09.58.39 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Wed, 31 Jul 2019 09:58:41 -0700 (PDT) From: Mark Salyzyn To: linux-kernel@vger.kernel.org Cc: kernel-team@android.com, Mark Salyzyn , Miklos Szeredi , Jonathan Corbet , Vivek Goyal , "Eric W . Biederman" , Amir Goldstein , Randy Dunlap , Stephen Smalley , linux-unionfs@vger.kernel.org, linux-doc@vger.kernel.org, Eric Van Hensbergen , Latchesar Ionkov , Dominique Martinet , David Howells , Chris Mason , Josef Bacik , David Sterba , Jeff Layton , Sage Weil , Ilya Dryomov , Steve French , Tyler Hicks , Jan Kara , Theodore Ts'o , Andreas Dilger , Jaegeuk Kim , Chao Yu , Bob Peterson , Andreas Gruenbacher , David Woodhouse , Richard Weinberger , Dave Kleikamp , Greg Kroah-Hartman , Tejun Heo , Trond Myklebust , Anna Schumaker , Mark Fasheh , Joel Becker , Joseph Qi , Mike Marshall , Martin Brandenburg , Alexander Viro , Phillip Lougher , "Darrick J . Wong" , linux-xfs@vger.kernel.org, Hugh Dickins , "David S . Miller" , Andrew Morton , Mathieu Malaterre , =?UTF-8?q?Ernesto=20A=20=2E=20Fern=C3=A1ndez?= , Vyacheslav Dubeyko , v9fs-developer@lists.sourceforge.net, linux-afs@lists.infradead.org, linux-btrfs@vger.kernel.org, ceph-devel@vger.kernel.org, linux-cifs@vger.kernel.org, samba-technical@lists.samba.org, ecryptfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, linux-fsdevel@vger.kernel.org, cluster-devel@redhat.com, linux-mtd@lists.infradead.org, jfs-discussion@lists.sourceforge.net, linux-nfs@vger.kernel.org, ocfs2-devel@oss.oracle.com, devel@lists.orangefs.org, reiserfs-devel@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, linux-security-module@vger.kernel.org, stable@vger.kernel.org, Serge Hallyn , James Morris , Mimi Zohar , Paul Moore , Eric Paris , Casey Schaufler , linux-integrity@vger.kernel.org, selinux@vger.kernel.org Subject: [PATCH v13 2/5] Add flags option to get xattr method paired to __vfs_getxattr Date: Wed, 31 Jul 2019 09:57:57 -0700 Message-Id: <20190731165803.4755-3-salyzyn@android.com> X-Mailer: git-send-email 2.22.0.770.g0f2c4a37fd-goog In-Reply-To: <20190731165803.4755-1-salyzyn@android.com> References: <20190731165803.4755-1-salyzyn@android.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Add a flag option to get xattr method that could have a bit flag of XATTR_NOSECURITY passed to it. XATTR_NOSECURITY is generally then set in the __vfs_getxattr path. This handles the case of a union filesystem driver that is being requested by the security layer to report back the data that is the target label or context embedded into wrapped filesystem's xattr. For the use case where access is to be blocked by the security layer. The path then could be security(dentry) -> __vfs_getxattr(dentry...XATTR_NOSECUIRTY) -> handler->get(dentry...XATTR_NOSECURITY) -> __vfs_getxattr(lower_dentry...XATTR_NOSECUIRTY) -> lower_handler->get(lower_dentry...XATTR_NOSECUIRTY) which would report back through the chain data and success as expected, but the logging security layer at the top would have the data to determine the access permissions and report back the target context that was blocked. Without the get handler flag, the path on a union filesystem would be the errant security(dentry) -> __vfs_getxattr(dentry) -> handler->get(dentry) -> vfs_getxattr(lower_dentry) -> nested -> security(lower_dentry, log off) -> lower_handler->get(lower_dentry) which would report back through the chain no data, and -EACCES. For selinux for both cases, this would translate to a correctly determined blocked access. In the first corrected case a correct avc log would be reported, in the second legacy case an incorrect avc log would be reported against an uninitialized u:object_r:unlabeled:s0 context making the logs cosmetically useless for audit2allow. This patch series is inert and is the wide-spread addition of the flags option for xattr functions, and a replacement of _vfs_getxattr with __vfs_getxattr(...XATTR_NOSECURITY). Signed-off-by: Mark Salyzyn Cc: Miklos Szeredi Cc: Jonathan Corbet Cc: Vivek Goyal Cc: Eric W. Biederman Cc: Amir Goldstein Cc: Randy Dunlap Cc: Stephen Smalley Cc: linux-unionfs@vger.kernel.org Cc: linux-doc@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: kernel-team@android.com Cc: Eric Van Hensbergen Cc: Latchesar Ionkov Cc: Dominique Martinet Cc: David Howells Cc: Chris Mason Cc: Josef Bacik Cc: David Sterba Cc: Jeff Layton Cc: Sage Weil Cc: Ilya Dryomov Cc: Steve French Cc: Tyler Hicks Cc: Jan Kara Cc: Theodore Ts'o Cc: Andreas Dilger Cc: Jaegeuk Kim Cc: Chao Yu Cc: Bob Peterson Cc: Andreas Gruenbacher Cc: David Woodhouse Cc: Richard Weinberger Cc: Dave Kleikamp Cc: Greg Kroah-Hartman Cc: Tejun Heo Cc: Trond Myklebust Cc: Anna Schumaker Cc: Mark Fasheh Cc: Joel Becker Cc: Joseph Qi Cc: Mike Marshall Cc: Martin Brandenburg Cc: Alexander Viro Cc: Phillip Lougher Cc: Darrick J. Wong Cc: linux-xfs@vger.kernel.org Cc: Hugh Dickins Cc: David S. Miller Cc: Andrew Morton Cc: Mathieu Malaterre Cc: Ernesto A. Fernández Cc: Vyacheslav Dubeyko Cc: v9fs-developer@lists.sourceforge.net Cc: linux-afs@lists.infradead.org Cc: linux-btrfs@vger.kernel.org Cc: ceph-devel@vger.kernel.org Cc: linux-cifs@vger.kernel.org Cc: samba-technical@lists.samba.org Cc: ecryptfs@vger.kernel.org Cc: linux-ext4@vger.kernel.org Cc: linux-f2fs-devel@lists.sourceforge.net Cc: linux-fsdevel@vger.kernel.org Cc: cluster-devel@redhat.com Cc: linux-mtd@lists.infradead.org Cc: jfs-discussion@lists.sourceforge.net Cc: linux-nfs@vger.kernel.org Cc: ocfs2-devel@oss.oracle.com Cc: devel@lists.orangefs.org Cc: reiserfs-devel@vger.kernel.org Cc: linux-mm@kvack.org Cc: netdev@vger.kernel.org Cc: linux-security-module@vger.kernel.org Cc: stable@vger.kernel.org # 4.4, 4.9, 4.14 & 4.19 --- v13 - added flags to __vfs_getxattr call, and moved all the security code from vfs_getxattr into it. v12 - Added back to patch series as get xattr with flag option. v11 - Squashed out of patch series and replaced with per-thread flag solution. v10 - Added to patch series as __get xattr method. --- fs/9p/acl.c | 3 ++- fs/9p/xattr.c | 3 ++- fs/afs/xattr.c | 6 +++--- fs/btrfs/xattr.c | 3 ++- fs/ceph/xattr.c | 3 ++- fs/cifs/xattr.c | 2 +- fs/ecryptfs/inode.c | 6 ++++-- fs/ecryptfs/mmap.c | 2 +- fs/ext2/xattr_trusted.c | 2 +- fs/ext2/xattr_user.c | 2 +- fs/ext4/xattr_security.c | 2 +- fs/ext4/xattr_trusted.c | 2 +- fs/ext4/xattr_user.c | 2 +- fs/f2fs/xattr.c | 4 ++-- fs/fuse/xattr.c | 4 ++-- fs/gfs2/xattr.c | 3 ++- fs/hfs/attr.c | 2 +- fs/hfsplus/xattr.c | 3 ++- fs/hfsplus/xattr_trusted.c | 3 ++- fs/hfsplus/xattr_user.c | 3 ++- fs/jffs2/security.c | 3 ++- fs/jffs2/xattr_trusted.c | 3 ++- fs/jffs2/xattr_user.c | 3 ++- fs/jfs/xattr.c | 5 +++-- fs/kernfs/inode.c | 3 ++- fs/nfs/nfs4proc.c | 6 ++++-- fs/ocfs2/xattr.c | 9 +++++--- fs/orangefs/xattr.c | 3 ++- fs/overlayfs/super.c | 8 ++++--- fs/posix_acl.c | 2 +- fs/reiserfs/xattr_security.c | 3 ++- fs/reiserfs/xattr_trusted.c | 3 ++- fs/reiserfs/xattr_user.c | 3 ++- fs/squashfs/xattr.c | 2 +- fs/xattr.c | 36 +++++++++++++++---------------- fs/xfs/xfs_xattr.c | 3 ++- include/linux/xattr.h | 9 ++++---- include/uapi/linux/xattr.h | 5 +++-- mm/shmem.c | 3 ++- net/socket.c | 3 ++- security/commoncap.c | 6 ++++-- security/integrity/evm/evm_main.c | 3 ++- security/selinux/hooks.c | 11 ++++++---- security/smack/smack_lsm.c | 5 +++-- 44 files changed, 119 insertions(+), 81 deletions(-) diff --git a/fs/9p/acl.c b/fs/9p/acl.c index 6261719f6f2a..cb14e8b312bc 100644 --- a/fs/9p/acl.c +++ b/fs/9p/acl.c @@ -214,7 +214,8 @@ int v9fs_acl_mode(struct inode *dir, umode_t *modep, static int v9fs_xattr_get_acl(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { struct v9fs_session_info *v9ses; struct posix_acl *acl; diff --git a/fs/9p/xattr.c b/fs/9p/xattr.c index ac8ff8ca4c11..5cfa772452fd 100644 --- a/fs/9p/xattr.c +++ b/fs/9p/xattr.c @@ -139,7 +139,8 @@ ssize_t v9fs_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size) static int v9fs_xattr_handler_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { const char *full_name = xattr_full_name(handler, name); diff --git a/fs/afs/xattr.c b/fs/afs/xattr.c index 5552d034090a..e6509c21f08a 100644 --- a/fs/afs/xattr.c +++ b/fs/afs/xattr.c @@ -334,7 +334,7 @@ static const struct xattr_handler afs_xattr_yfs_handler = { static int afs_xattr_get_cell(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, - void *buffer, size_t size) + void *buffer, size_t size, int flags) { struct afs_vnode *vnode = AFS_FS_I(inode); struct afs_cell *cell = vnode->volume->cell; @@ -361,7 +361,7 @@ static const struct xattr_handler afs_xattr_afs_cell_handler = { static int afs_xattr_get_fid(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, - void *buffer, size_t size) + void *buffer, size_t size, int flags) { struct afs_vnode *vnode = AFS_FS_I(inode); char text[16 + 1 + 24 + 1 + 8 + 1]; @@ -397,7 +397,7 @@ static const struct xattr_handler afs_xattr_afs_fid_handler = { static int afs_xattr_get_volume(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, - void *buffer, size_t size) + void *buffer, size_t size, int flags) { struct afs_vnode *vnode = AFS_FS_I(inode); const char *volname = vnode->volume->name; diff --git a/fs/btrfs/xattr.c b/fs/btrfs/xattr.c index 95d9aebff2c4..1e522e145344 100644 --- a/fs/btrfs/xattr.c +++ b/fs/btrfs/xattr.c @@ -353,7 +353,8 @@ ssize_t btrfs_listxattr(struct dentry *dentry, char *buffer, size_t size) static int btrfs_xattr_handler_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { name = xattr_full_name(handler, name); return btrfs_getxattr(inode, name, buffer, size); diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c index 37b458a9af3a..edb7eb9ae83e 100644 --- a/fs/ceph/xattr.c +++ b/fs/ceph/xattr.c @@ -1171,7 +1171,8 @@ int __ceph_setxattr(struct inode *inode, const char *name, static int ceph_get_xattr_handler(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, + int flags) { if (!ceph_is_valid_xattr(name)) return -EOPNOTSUPP; diff --git a/fs/cifs/xattr.c b/fs/cifs/xattr.c index 9076150758d8..7f71c06ce631 100644 --- a/fs/cifs/xattr.c +++ b/fs/cifs/xattr.c @@ -199,7 +199,7 @@ static int cifs_creation_time_get(struct dentry *dentry, struct inode *inode, static int cifs_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, int flags) { ssize_t rc = -EOPNOTSUPP; unsigned int xid; diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c index 18426f4855f1..c710c7533729 100644 --- a/fs/ecryptfs/inode.c +++ b/fs/ecryptfs/inode.c @@ -1018,7 +1018,8 @@ ecryptfs_getxattr_lower(struct dentry *lower_dentry, struct inode *lower_inode, goto out; } inode_lock(lower_inode); - rc = __vfs_getxattr(lower_dentry, lower_inode, name, value, size); + rc = __vfs_getxattr(lower_dentry, lower_inode, name, value, size, + XATTR_NOSECURITY); inode_unlock(lower_inode); out: return rc; @@ -1103,7 +1104,8 @@ const struct inode_operations ecryptfs_main_iops = { static int ecryptfs_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return ecryptfs_getxattr(dentry, inode, name, buffer, size); } diff --git a/fs/ecryptfs/mmap.c b/fs/ecryptfs/mmap.c index cffa0c1ec829..2362be3e3b4d 100644 --- a/fs/ecryptfs/mmap.c +++ b/fs/ecryptfs/mmap.c @@ -422,7 +422,7 @@ static int ecryptfs_write_inode_size_to_xattr(struct inode *ecryptfs_inode) } inode_lock(lower_inode); size = __vfs_getxattr(lower_dentry, lower_inode, ECRYPTFS_XATTR_NAME, - xattr_virt, PAGE_SIZE); + xattr_virt, PAGE_SIZE, XATTR_NOSECURITY); if (size < 0) size = 8; put_unaligned_be64(i_size_read(ecryptfs_inode), xattr_virt); diff --git a/fs/ext2/xattr_trusted.c b/fs/ext2/xattr_trusted.c index 49add1107850..8d313664f0fa 100644 --- a/fs/ext2/xattr_trusted.c +++ b/fs/ext2/xattr_trusted.c @@ -18,7 +18,7 @@ ext2_xattr_trusted_list(struct dentry *dentry) static int ext2_xattr_trusted_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { return ext2_xattr_get(inode, EXT2_XATTR_INDEX_TRUSTED, name, buffer, size); diff --git a/fs/ext2/xattr_user.c b/fs/ext2/xattr_user.c index c243a3b4d69d..712b7c95cc64 100644 --- a/fs/ext2/xattr_user.c +++ b/fs/ext2/xattr_user.c @@ -20,7 +20,7 @@ ext2_xattr_user_list(struct dentry *dentry) static int ext2_xattr_user_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { if (!test_opt(inode->i_sb, XATTR_USER)) return -EOPNOTSUPP; diff --git a/fs/ext4/xattr_security.c b/fs/ext4/xattr_security.c index 197a9d8a15ef..50fb71393fb6 100644 --- a/fs/ext4/xattr_security.c +++ b/fs/ext4/xattr_security.c @@ -15,7 +15,7 @@ static int ext4_xattr_security_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { return ext4_xattr_get(inode, EXT4_XATTR_INDEX_SECURITY, name, buffer, size); diff --git a/fs/ext4/xattr_trusted.c b/fs/ext4/xattr_trusted.c index e9389e5d75c3..64bd8f86c1f1 100644 --- a/fs/ext4/xattr_trusted.c +++ b/fs/ext4/xattr_trusted.c @@ -22,7 +22,7 @@ ext4_xattr_trusted_list(struct dentry *dentry) static int ext4_xattr_trusted_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { return ext4_xattr_get(inode, EXT4_XATTR_INDEX_TRUSTED, name, buffer, size); diff --git a/fs/ext4/xattr_user.c b/fs/ext4/xattr_user.c index d4546184b34b..b7301373820e 100644 --- a/fs/ext4/xattr_user.c +++ b/fs/ext4/xattr_user.c @@ -21,7 +21,7 @@ ext4_xattr_user_list(struct dentry *dentry) static int ext4_xattr_user_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { if (!test_opt(inode->i_sb, XATTR_USER)) return -EOPNOTSUPP; diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c index b32c45621679..76559da8dfba 100644 --- a/fs/f2fs/xattr.c +++ b/fs/f2fs/xattr.c @@ -24,7 +24,7 @@ static int f2fs_xattr_generic_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); @@ -79,7 +79,7 @@ static bool f2fs_xattr_trusted_list(struct dentry *dentry) static int f2fs_xattr_advise_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { if (buffer) *((char *)buffer) = F2FS_I(inode)->i_advise; diff --git a/fs/fuse/xattr.c b/fs/fuse/xattr.c index 433717640f78..d1ef7808304e 100644 --- a/fs/fuse/xattr.c +++ b/fs/fuse/xattr.c @@ -176,7 +176,7 @@ int fuse_removexattr(struct inode *inode, const char *name) static int fuse_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, int flags) { return fuse_getxattr(inode, name, value, size); } @@ -199,7 +199,7 @@ static bool no_xattr_list(struct dentry *dentry) static int no_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, int flags) { return -EOPNOTSUPP; } diff --git a/fs/gfs2/xattr.c b/fs/gfs2/xattr.c index bbe593d16bea..a9db067a99c1 100644 --- a/fs/gfs2/xattr.c +++ b/fs/gfs2/xattr.c @@ -588,7 +588,8 @@ static int __gfs2_xattr_get(struct inode *inode, const char *name, static int gfs2_xattr_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { struct gfs2_inode *ip = GFS2_I(inode); struct gfs2_holder gh; diff --git a/fs/hfs/attr.c b/fs/hfs/attr.c index 74fa62643136..08222a9c5d31 100644 --- a/fs/hfs/attr.c +++ b/fs/hfs/attr.c @@ -115,7 +115,7 @@ static ssize_t __hfs_getxattr(struct inode *inode, enum hfs_xattr_type type, static int hfs_xattr_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, int flags) { return __hfs_getxattr(inode, handler->flags, value, size); } diff --git a/fs/hfsplus/xattr.c b/fs/hfsplus/xattr.c index bb0b27d88e50..381c2aaedbc8 100644 --- a/fs/hfsplus/xattr.c +++ b/fs/hfsplus/xattr.c @@ -839,7 +839,8 @@ static int hfsplus_removexattr(struct inode *inode, const char *name) static int hfsplus_osx_getxattr(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { /* * Don't allow retrieving properly prefixed attributes diff --git a/fs/hfsplus/xattr_trusted.c b/fs/hfsplus/xattr_trusted.c index fbad91e1dada..54d926314f8c 100644 --- a/fs/hfsplus/xattr_trusted.c +++ b/fs/hfsplus/xattr_trusted.c @@ -14,7 +14,8 @@ static int hfsplus_trusted_getxattr(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, + size_t size, int flags) { return hfsplus_getxattr(inode, name, buffer, size, XATTR_TRUSTED_PREFIX, diff --git a/fs/hfsplus/xattr_user.c b/fs/hfsplus/xattr_user.c index 74d19faf255e..4d2b1ffff887 100644 --- a/fs/hfsplus/xattr_user.c +++ b/fs/hfsplus/xattr_user.c @@ -14,7 +14,8 @@ static int hfsplus_user_getxattr(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return hfsplus_getxattr(inode, name, buffer, size, diff --git a/fs/jffs2/security.c b/fs/jffs2/security.c index c2332e30f218..e6f42fe435af 100644 --- a/fs/jffs2/security.c +++ b/fs/jffs2/security.c @@ -50,7 +50,8 @@ int jffs2_init_security(struct inode *inode, struct inode *dir, /* ---- XATTR Handler for "security.*" ----------------- */ static int jffs2_security_getxattr(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return do_jffs2_getxattr(inode, JFFS2_XPREFIX_SECURITY, name, buffer, size); diff --git a/fs/jffs2/xattr_trusted.c b/fs/jffs2/xattr_trusted.c index 5d6030826c52..9dccaae549f5 100644 --- a/fs/jffs2/xattr_trusted.c +++ b/fs/jffs2/xattr_trusted.c @@ -18,7 +18,8 @@ static int jffs2_trusted_getxattr(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return do_jffs2_getxattr(inode, JFFS2_XPREFIX_TRUSTED, name, buffer, size); diff --git a/fs/jffs2/xattr_user.c b/fs/jffs2/xattr_user.c index 9d027b4abcf9..c0983a3e810b 100644 --- a/fs/jffs2/xattr_user.c +++ b/fs/jffs2/xattr_user.c @@ -18,7 +18,8 @@ static int jffs2_user_getxattr(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return do_jffs2_getxattr(inode, JFFS2_XPREFIX_USER, name, buffer, size); diff --git a/fs/jfs/xattr.c b/fs/jfs/xattr.c index db41e7803163..5c79a35bf62f 100644 --- a/fs/jfs/xattr.c +++ b/fs/jfs/xattr.c @@ -925,7 +925,7 @@ static int __jfs_xattr_set(struct inode *inode, const char *name, static int jfs_xattr_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, int flags) { name = xattr_full_name(handler, name); return __jfs_getxattr(inode, name, value, size); @@ -942,7 +942,8 @@ static int jfs_xattr_set(const struct xattr_handler *handler, static int jfs_xattr_get_os2(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, + int flags) { if (is_known_namespace(name)) return -EOPNOTSUPP; diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c index f3f3984cce80..89db24ce644e 100644 --- a/fs/kernfs/inode.c +++ b/fs/kernfs/inode.c @@ -309,7 +309,8 @@ int kernfs_xattr_set(struct kernfs_node *kn, const char *name, static int kernfs_vfs_xattr_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *suffix, void *value, size_t size) + const char *suffix, void *value, size_t size, + int flags) { const char *name = xattr_full_name(handler, suffix); struct kernfs_node *kn = inode->i_private; diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 39896afc6edf..5e6a58685cd0 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -7203,7 +7203,8 @@ static int nfs4_xattr_set_nfs4_acl(const struct xattr_handler *handler, static int nfs4_xattr_get_nfs4_acl(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *key, void *buf, size_t buflen) + const char *key, void *buf, size_t buflen, + int flags) { return nfs4_proc_get_acl(inode, buf, buflen); } @@ -7228,7 +7229,8 @@ static int nfs4_xattr_set_nfs4_label(const struct xattr_handler *handler, static int nfs4_xattr_get_nfs4_label(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *key, void *buf, size_t buflen) + const char *key, void *buf, size_t buflen, + int flags) { if (security_ismaclabel(key)) return nfs4_get_security_label(inode, buf, buflen); diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c index 385f3aaa2448..06e615642422 100644 --- a/fs/ocfs2/xattr.c +++ b/fs/ocfs2/xattr.c @@ -7245,7 +7245,8 @@ int ocfs2_init_security_and_acl(struct inode *dir, */ static int ocfs2_xattr_security_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return ocfs2_xattr_get(inode, OCFS2_XATTR_INDEX_SECURITY, name, buffer, size); @@ -7317,7 +7318,8 @@ const struct xattr_handler ocfs2_xattr_security_handler = { */ static int ocfs2_xattr_trusted_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return ocfs2_xattr_get(inode, OCFS2_XATTR_INDEX_TRUSTED, name, buffer, size); @@ -7343,7 +7345,8 @@ const struct xattr_handler ocfs2_xattr_trusted_handler = { */ static int ocfs2_xattr_user_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); diff --git a/fs/orangefs/xattr.c b/fs/orangefs/xattr.c index bdc285aea360..ef4180bff7bb 100644 --- a/fs/orangefs/xattr.c +++ b/fs/orangefs/xattr.c @@ -541,7 +541,8 @@ static int orangefs_xattr_get_default(const struct xattr_handler *handler, struct inode *inode, const char *name, void *buffer, - size_t size) + size_t size, + int flags) { return orangefs_inode_getxattr(inode, name, buffer, size); diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index b368e2e102fa..a7b21f2ea2dd 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -854,7 +854,7 @@ static unsigned int ovl_split_lowerdirs(char *str) static int __maybe_unused ovl_posix_acl_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, int flags) { return ovl_xattr_get(dentry, inode, handler->name, buffer, size); } @@ -919,7 +919,8 @@ ovl_posix_acl_xattr_set(const struct xattr_handler *handler, static int ovl_own_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return -EOPNOTSUPP; } @@ -934,7 +935,8 @@ static int ovl_own_xattr_set(const struct xattr_handler *handler, static int ovl_other_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { return ovl_xattr_get(dentry, inode, name, buffer, size); } diff --git a/fs/posix_acl.c b/fs/posix_acl.c index 84ad1c90d535..cd55621e570b 100644 --- a/fs/posix_acl.c +++ b/fs/posix_acl.c @@ -832,7 +832,7 @@ EXPORT_SYMBOL (posix_acl_to_xattr); static int posix_acl_xattr_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *value, size_t size) + const char *name, void *value, size_t size, int flags) { struct posix_acl *acl; int error; diff --git a/fs/reiserfs/xattr_security.c b/fs/reiserfs/xattr_security.c index 20be9a0e5870..eedfa07a4fd0 100644 --- a/fs/reiserfs/xattr_security.c +++ b/fs/reiserfs/xattr_security.c @@ -11,7 +11,8 @@ static int security_get(const struct xattr_handler *handler, struct dentry *unused, - struct inode *inode, const char *name, void *buffer, size_t size) + struct inode *inode, const char *name, void *buffer, size_t size, + int flags) { if (IS_PRIVATE(inode)) return -EPERM; diff --git a/fs/reiserfs/xattr_trusted.c b/fs/reiserfs/xattr_trusted.c index 5ed48da3d02b..2d11d98605dd 100644 --- a/fs/reiserfs/xattr_trusted.c +++ b/fs/reiserfs/xattr_trusted.c @@ -10,7 +10,8 @@ static int trusted_get(const struct xattr_handler *handler, struct dentry *unused, - struct inode *inode, const char *name, void *buffer, size_t size) + struct inode *inode, const char *name, void *buffer, size_t size, + int flags) { if (!capable(CAP_SYS_ADMIN) || IS_PRIVATE(inode)) return -EPERM; diff --git a/fs/reiserfs/xattr_user.c b/fs/reiserfs/xattr_user.c index a573ca45bacc..2a59d85c69c9 100644 --- a/fs/reiserfs/xattr_user.c +++ b/fs/reiserfs/xattr_user.c @@ -9,7 +9,8 @@ static int user_get(const struct xattr_handler *handler, struct dentry *unused, - struct inode *inode, const char *name, void *buffer, size_t size) + struct inode *inode, const char *name, void *buffer, size_t size, + int flags) { if (!reiserfs_xattrs_user(inode->i_sb)) return -EOPNOTSUPP; diff --git a/fs/squashfs/xattr.c b/fs/squashfs/xattr.c index e1e3f3dd5a06..d8d58c990652 100644 --- a/fs/squashfs/xattr.c +++ b/fs/squashfs/xattr.c @@ -204,7 +204,7 @@ static int squashfs_xattr_handler_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, const char *name, - void *buffer, size_t size) + void *buffer, size_t size, int flags) { return squashfs_xattr_get(inode, handler->flags, name, buffer, size); diff --git a/fs/xattr.c b/fs/xattr.c index 90dd78f0eb27..71f887518d6f 100644 --- a/fs/xattr.c +++ b/fs/xattr.c @@ -281,7 +281,7 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value, return PTR_ERR(handler); if (!handler->get) return -EOPNOTSUPP; - error = handler->get(handler, dentry, inode, name, NULL, 0); + error = handler->get(handler, dentry, inode, name, NULL, 0, 0); if (error < 0) return error; @@ -292,32 +292,20 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value, memset(value, 0, error + 1); } - error = handler->get(handler, dentry, inode, name, value, error); + error = handler->get(handler, dentry, inode, name, value, error, 0); *xattr_value = value; return error; } ssize_t __vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name, - void *value, size_t size) + void *value, size_t size, int flags) { const struct xattr_handler *handler; - - handler = xattr_resolve_name(inode, &name); - if (IS_ERR(handler)) - return PTR_ERR(handler); - if (!handler->get) - return -EOPNOTSUPP; - return handler->get(handler, dentry, inode, name, value, size); -} -EXPORT_SYMBOL(__vfs_getxattr); - -ssize_t -vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size) -{ - struct inode *inode = dentry->d_inode; int error; + if (flags & XATTR_NOSECURITY) + goto nolsm; error = xattr_permission(inode, name, MAY_READ); if (error) return error; @@ -339,7 +327,19 @@ vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size) return ret; } nolsm: - return __vfs_getxattr(dentry, inode, name, value, size); + handler = xattr_resolve_name(inode, &name); + if (IS_ERR(handler)) + return PTR_ERR(handler); + if (!handler->get) + return -EOPNOTSUPP; + return handler->get(handler, dentry, inode, name, value, size, flags); +} +EXPORT_SYMBOL(__vfs_getxattr); + +ssize_t +vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size) +{ + return __vfs_getxattr(dentry, dentry->d_inode, name, value, size, 0); } EXPORT_SYMBOL_GPL(vfs_getxattr); diff --git a/fs/xfs/xfs_xattr.c b/fs/xfs/xfs_xattr.c index 3123b5aaad2a..cafc99c48e20 100644 --- a/fs/xfs/xfs_xattr.c +++ b/fs/xfs/xfs_xattr.c @@ -18,7 +18,8 @@ static int xfs_xattr_get(const struct xattr_handler *handler, struct dentry *unused, - struct inode *inode, const char *name, void *value, size_t size) + struct inode *inode, const char *name, void *value, size_t size, + int flags) { int xflags = handler->flags; struct xfs_inode *ip = XFS_I(inode); diff --git a/include/linux/xattr.h b/include/linux/xattr.h index 6dad031be3c2..e5c191b30818 100644 --- a/include/linux/xattr.h +++ b/include/linux/xattr.h @@ -30,10 +30,10 @@ struct xattr_handler { const char *prefix; int flags; /* fs private flags */ bool (*list)(struct dentry *dentry); - int (*get)(const struct xattr_handler *, struct dentry *dentry, + int (*get)(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, void *buffer, - size_t size); - int (*set)(const struct xattr_handler *, struct dentry *dentry, + size_t size, int flags); + int (*set)(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, const void *buffer, size_t size, int flags); }; @@ -46,7 +46,8 @@ struct xattr { size_t value_len; }; -ssize_t __vfs_getxattr(struct dentry *, struct inode *, const char *, void *, size_t); +ssize_t __vfs_getxattr(struct dentry *, struct inode *, const char *, void *, + size_t, int); ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t); ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size); int __vfs_setxattr(struct dentry *, struct inode *, const char *, const void *, size_t, int); diff --git a/include/uapi/linux/xattr.h b/include/uapi/linux/xattr.h index c1395b5bd432..1216d777d210 100644 --- a/include/uapi/linux/xattr.h +++ b/include/uapi/linux/xattr.h @@ -17,8 +17,9 @@ #if __UAPI_DEF_XATTR #define __USE_KERNEL_XATTR_DEFS -#define XATTR_CREATE 0x1 /* set value, fail if attr already exists */ -#define XATTR_REPLACE 0x2 /* set value, fail if attr does not exist */ +#define XATTR_CREATE 0x1 /* set value, fail if attr already exists */ +#define XATTR_REPLACE 0x2 /* set value, fail if attr does not exist */ +#define XATTR_NOSECURITY 0x4 /* get value, do not involve security check */ #endif /* Namespaces */ diff --git a/mm/shmem.c b/mm/shmem.c index 626d8c74b973..34d3818b4424 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -3206,7 +3206,8 @@ static int shmem_initxattrs(struct inode *inode, static int shmem_xattr_handler_get(const struct xattr_handler *handler, struct dentry *unused, struct inode *inode, - const char *name, void *buffer, size_t size) + const char *name, void *buffer, size_t size, + int flags) { struct shmem_inode_info *info = SHMEM_I(inode); diff --git a/net/socket.c b/net/socket.c index 6a9ab7a8b1d2..6b0fea92dd02 100644 --- a/net/socket.c +++ b/net/socket.c @@ -300,7 +300,8 @@ static const struct dentry_operations sockfs_dentry_operations = { static int sockfs_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, - const char *suffix, void *value, size_t size) + const char *suffix, void *value, size_t size, + int flags) { if (value) { if (dentry->d_name.len + 1 > size) diff --git a/security/commoncap.c b/security/commoncap.c index f4ee0ae106b2..378a2f66a73d 100644 --- a/security/commoncap.c +++ b/security/commoncap.c @@ -297,7 +297,8 @@ int cap_inode_need_killpriv(struct dentry *dentry) struct inode *inode = d_backing_inode(dentry); int error; - error = __vfs_getxattr(dentry, inode, XATTR_NAME_CAPS, NULL, 0); + error = __vfs_getxattr(dentry, inode, XATTR_NAME_CAPS, NULL, 0, + XATTR_NOSECURITY); return error > 0; } @@ -586,7 +587,8 @@ int get_vfs_caps_from_disk(const struct dentry *dentry, struct cpu_vfs_cap_data fs_ns = inode->i_sb->s_user_ns; size = __vfs_getxattr((struct dentry *)dentry, inode, - XATTR_NAME_CAPS, &data, XATTR_CAPS_SZ); + XATTR_NAME_CAPS, &data, XATTR_CAPS_SZ, + XATTR_NOSECURITY); if (size == -ENODATA || size == -EOPNOTSUPP) /* no data, that's ok */ return -ENODATA; diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c index f9a81b187fae..921c8f2afcaf 100644 --- a/security/integrity/evm/evm_main.c +++ b/security/integrity/evm/evm_main.c @@ -100,7 +100,8 @@ static int evm_find_protected_xattrs(struct dentry *dentry) return -EOPNOTSUPP; list_for_each_entry_rcu(xattr, &evm_config_xattrnames, list) { - error = __vfs_getxattr(dentry, inode, xattr->name, NULL, 0); + error = __vfs_getxattr(dentry, inode, xattr->name, NULL, 0, + XATTR_NOSECURITY); if (error < 0) { if (error == -ENODATA) continue; diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 74dd46de01b6..b0822da0658f 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -552,7 +552,8 @@ static int sb_finish_set_opts(struct super_block *sb) goto out; } - rc = __vfs_getxattr(root, root_inode, XATTR_NAME_SELINUX, NULL, 0); + rc = __vfs_getxattr(root, root_inode, XATTR_NAME_SELINUX, NULL, + 0, XATTR_NOSECURITY); if (rc < 0 && rc != -ENODATA) { if (rc == -EOPNOTSUPP) pr_warn("SELinux: (dev %s, type " @@ -1378,12 +1379,14 @@ static int inode_doinit_use_xattr(struct inode *inode, struct dentry *dentry, return -ENOMEM; context[len] = '\0'; - rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, context, len); + rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, context, len, + XATTR_NOSECURITY); if (rc == -ERANGE) { kfree(context); /* Need a larger buffer. Query for the right size. */ - rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, NULL, 0); + rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, NULL, 0, + XATTR_NOSECURITY); if (rc < 0) return rc; @@ -1394,7 +1397,7 @@ static int inode_doinit_use_xattr(struct inode *inode, struct dentry *dentry, context[len] = '\0'; rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, - context, len); + context, len, XATTR_NOSECURITY); } if (rc < 0) { kfree(context); diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 4c5e5a438f8b..158b35772be1 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -292,7 +292,8 @@ static struct smack_known *smk_fetch(const char *name, struct inode *ip, if (buffer == NULL) return ERR_PTR(-ENOMEM); - rc = __vfs_getxattr(dp, ip, name, buffer, SMK_LONGLABEL); + rc = __vfs_getxattr(dp, ip, name, buffer, SMK_LONGLABEL, + XATTR_NOSECURITY); if (rc < 0) skp = ERR_PTR(rc); else if (rc == 0) @@ -3442,7 +3443,7 @@ static void smack_d_instantiate(struct dentry *opt_dentry, struct inode *inode) } else { rc = __vfs_getxattr(dp, inode, XATTR_NAME_SMACKTRANSMUTE, trattr, - TRANS_TRUE_SIZE); + TRANS_TRUE_SIZE, XATTR_NOSECURITY); if (rc >= 0 && strncmp(trattr, TRANS_TRUE, TRANS_TRUE_SIZE) != 0) rc = -EINVAL; -- 2.22.0.770.g0f2c4a37fd-goog