From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark Salyzyn Subject: [PATCH v13 5/5] overlayfs: override_creds=off option bypass creator_cred Date: Wed, 31 Jul 2019 09:58:00 -0700 Message-ID: <20190731165803.4755-6-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 , David Howells , Chris Mason , "David S . Miller" , Andreas Dilger , ocfs2-devel@oss.oracle.com, 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 Fasheh , devel@lists.orangefs.org, Hugh Dickins , linux-security-module@vger List-Id: ceph-devel.vger.kernel.org By default, all access to the upper, lower and work directories is the recorded mounter's MAC and DAC credentials. The incoming accesses are checked against the caller's credentials. If the principles of least privilege are applied, the mounter's credentials might not overlap the credentials of the caller's when accessing the overlayfs filesystem. For example, a file that a lower DAC privileged caller can execute, is MAC denied to the generally higher DAC privileged mounter, to prevent an attack vector. We add the option to turn off override_creds in the mount options; all subsequent operations after mount on the filesystem will be only the caller's credentials. The module boolean parameter and mount option override_creds is also added as a presence check for this "feature", existence of /sys/module/overlay/parameters/override_creds. It was not always this way. Circa 4.6 there was no recorded mounter's credentials, instead privileged access to upper or work directories were temporarily increased to perform the operations. The MAC (selinux) policies were caller's in all cases. override_creds=off partially returns us to this older access model minus the insecure temporary credential increases. This is to permit use in a system with non-overlapping security models for each executable including the agent that mounts the overlayfs filesystem. In Android this is the case since init, which performs the mount operations, has a minimal MAC set of privileges to reduce any attack surface, and services that use the content have a different set of MAC privileges (eg: read, for vendor labelled configuration, execute for vendor libraries and modules). The caveats are not a problem in the Android usage model, however they should be fixed for completeness and for general use in time. 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 NB: this is a desired feature --- v12 + v13: - Rebase v11: - add sb argument to ovl_revert_creds to match future work v10: - Rebase (and expand because of increased revert_cred usage) v9: - Add to the caveats v8: - drop pr_warn message after straw poll to remove it. - added a use case in the commit message v7: - change name of internal parameter to ovl_override_creds_def - report override_creds only if different than default v6: - Drop CONFIG_OVERLAY_FS_OVERRIDE_CREDS. - Do better with the documentation. - pr_warn message adjusted to report consequences. v5: - beefed up the caveats in the Documentation - Is dependent on "overlayfs: check CAP_DAC_READ_SEARCH before issuing exportfs_decode_fh" "overlayfs: check CAP_MKNOD before issuing vfs_whiteout" - Added prwarn when override_creds=off v4: - spelling and grammar errors in text v3: - Change name from caller_credentials / creator_credentials to the boolean override_creds. - Changed from creator to mounter credentials. - Updated and fortified the documentation. - Added CONFIG_OVERLAY_FS_OVERRIDE_CREDS v2: - Forward port changed attr to stat, resulting in a build error. - altered commit message. --- Documentation/filesystems/overlayfs.txt | 23 +++++++++++++++++++++++ fs/overlayfs/copy_up.c | 2 +- fs/overlayfs/dir.c | 11 ++++++----- fs/overlayfs/file.c | 20 ++++++++++---------- fs/overlayfs/inode.c | 18 +++++++++--------- fs/overlayfs/namei.c | 6 +++--- fs/overlayfs/overlayfs.h | 1 + fs/overlayfs/ovl_entry.h | 1 + fs/overlayfs/readdir.c | 4 ++-- fs/overlayfs/super.c | 22 +++++++++++++++++++++- fs/overlayfs/util.c | 12 ++++++++++-- 11 files changed, 87 insertions(+), 33 deletions(-) diff --git a/Documentation/filesystems/overlayfs.txt b/Documentation/filesystems/overlayfs.txt index 1da2f1668f08..d48125076602 100644 --- a/Documentation/filesystems/overlayfs.txt +++ b/Documentation/filesystems/overlayfs.txt @@ -102,6 +102,29 @@ Only the lists of names from directories are merged. Other content such as metadata and extended attributes are reported for the upper directory only. These attributes of the lower directory are hidden. +credentials +----------- + +By default, all access to the upper, lower and work directories is the +recorded mounter's MAC and DAC credentials. The incoming accesses are +checked against the caller's credentials. + +In the case where caller MAC or DAC credentials do not overlap, a +use case available in older versions of the driver, the +override_creds mount flag can be turned off and help when the use +pattern has caller with legitimate credentials where the mounter +does not. Several unintended side effects will occur though. The +caller without certain key capabilities or lower privilege will not +always be able to delete files or directories, create nodes, or +search some restricted directories. The ability to search and read +a directory entry is spotty as a result of the cache mechanism not +retesting the credentials because of the assumption, a privileged +caller can fill cache, then a lower privilege can read the directory +cache. The uneven security model where cache, upperdir and workdir +are opened at privilege, but accessed without creating a form of +privilege escalation, should only be used with strict understanding +of the side effects and of the security policies. + whiteouts and opaque directories -------------------------------- diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c index b801c6353100..1c1b9415e533 100644 --- a/fs/overlayfs/copy_up.c +++ b/fs/overlayfs/copy_up.c @@ -886,7 +886,7 @@ int ovl_copy_up_flags(struct dentry *dentry, int flags) dput(parent); dput(next); } - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return err; } diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c index 702aa63f6774..49b8ffc1294f 100644 --- a/fs/overlayfs/dir.c +++ b/fs/overlayfs/dir.c @@ -563,7 +563,8 @@ static int ovl_create_or_link(struct dentry *dentry, struct inode *inode, override_cred->fsgid = inode->i_gid; if (!attr->hardlink) { err = security_dentry_create_files_as(dentry, - attr->mode, &dentry->d_name, old_cred, + attr->mode, &dentry->d_name, + old_cred ? old_cred : current_cred(), override_cred); if (err) { put_cred(override_cred); @@ -579,7 +580,7 @@ static int ovl_create_or_link(struct dentry *dentry, struct inode *inode, err = ovl_create_over_whiteout(dentry, inode, attr); } out_revert_creds: - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return err; } @@ -655,7 +656,7 @@ static int ovl_set_link_redirect(struct dentry *dentry) old_cred = ovl_override_creds(dentry->d_sb); err = ovl_set_redirect(dentry, false); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return err; } @@ -851,7 +852,7 @@ static int ovl_do_remove(struct dentry *dentry, bool is_dir) err = ovl_remove_upper(dentry, is_dir, &list); else err = ovl_remove_and_whiteout(dentry, &list); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); if (!err) { if (is_dir) clear_nlink(dentry->d_inode); @@ -1221,7 +1222,7 @@ static int ovl_rename(struct inode *olddir, struct dentry *old, out_unlock: unlock_rename(new_upperdir, old_upperdir); out_revert_creds: - revert_creds(old_cred); + ovl_revert_creds(old->d_sb, old_cred); if (update_nlink) ovl_nlink_end(new); out_drop_write: diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c index e235a635d9ec..d94d6ec785a7 100644 --- a/fs/overlayfs/file.c +++ b/fs/overlayfs/file.c @@ -32,7 +32,7 @@ static struct file *ovl_open_realfile(const struct file *file, old_cred = ovl_override_creds(inode->i_sb); realfile = open_with_fake_path(&file->f_path, flags, realinode, current_cred()); - revert_creds(old_cred); + ovl_revert_creds(inode->i_sb, old_cred); pr_debug("open(%p[%pD2/%c], 0%o) -> (%p, 0%o)\n", file, file, ovl_whatisit(inode, realinode), file->f_flags, @@ -176,7 +176,7 @@ static loff_t ovl_llseek(struct file *file, loff_t offset, int whence) old_cred = ovl_override_creds(inode->i_sb); ret = vfs_llseek(real.file, offset, whence); - revert_creds(old_cred); + ovl_revert_creds(inode->i_sb, old_cred); file->f_pos = real.file->f_pos; inode_unlock(inode); @@ -242,7 +242,7 @@ static ssize_t ovl_read_iter(struct kiocb *iocb, struct iov_iter *iter) old_cred = ovl_override_creds(file_inode(file)->i_sb); ret = vfs_iter_read(real.file, iter, &iocb->ki_pos, ovl_iocb_to_rwf(iocb)); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); ovl_file_accessed(file); @@ -278,7 +278,7 @@ static ssize_t ovl_write_iter(struct kiocb *iocb, struct iov_iter *iter) ret = vfs_iter_write(real.file, iter, &iocb->ki_pos, ovl_iocb_to_rwf(iocb)); file_end_write(real.file); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); /* Update size */ ovl_copyattr(ovl_inode_real(inode), inode); @@ -305,7 +305,7 @@ static int ovl_fsync(struct file *file, loff_t start, loff_t end, int datasync) if (file_inode(real.file) == ovl_inode_upper(file_inode(file))) { old_cred = ovl_override_creds(file_inode(file)->i_sb); ret = vfs_fsync_range(real.file, start, end, datasync); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); } fdput(real); @@ -329,7 +329,7 @@ static int ovl_mmap(struct file *file, struct vm_area_struct *vma) old_cred = ovl_override_creds(file_inode(file)->i_sb); ret = call_mmap(vma->vm_file, vma); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); if (ret) { /* Drop reference count from new vm_file value */ @@ -357,7 +357,7 @@ static long ovl_fallocate(struct file *file, int mode, loff_t offset, loff_t len old_cred = ovl_override_creds(file_inode(file)->i_sb); ret = vfs_fallocate(real.file, mode, offset, len); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); /* Update size */ ovl_copyattr(ovl_inode_real(inode), inode); @@ -379,7 +379,7 @@ static int ovl_fadvise(struct file *file, loff_t offset, loff_t len, int advice) old_cred = ovl_override_creds(file_inode(file)->i_sb); ret = vfs_fadvise(real.file, offset, len, advice); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); fdput(real); @@ -399,7 +399,7 @@ static long ovl_real_ioctl(struct file *file, unsigned int cmd, old_cred = ovl_override_creds(file_inode(file)->i_sb); ret = vfs_ioctl(real.file, cmd, arg); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); fdput(real); @@ -589,7 +589,7 @@ static loff_t ovl_copyfile(struct file *file_in, loff_t pos_in, flags); break; } - revert_creds(old_cred); + ovl_revert_creds(file_inode(file_out)->i_sb, old_cred); /* Update size */ ovl_copyattr(ovl_inode_real(inode_out), inode_out); diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c index 1bf11ae44313..fc1828aa30ed 100644 --- a/fs/overlayfs/inode.c +++ b/fs/overlayfs/inode.c @@ -61,7 +61,7 @@ int ovl_setattr(struct dentry *dentry, struct iattr *attr) inode_lock(upperdentry->d_inode); old_cred = ovl_override_creds(dentry->d_sb); err = notify_change(upperdentry, attr, NULL); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); if (!err) ovl_copyattr(upperdentry->d_inode, dentry->d_inode); inode_unlock(upperdentry->d_inode); @@ -257,7 +257,7 @@ int ovl_getattr(const struct path *path, struct kstat *stat, stat->nlink = dentry->d_inode->i_nlink; out: - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return err; } @@ -291,7 +291,7 @@ int ovl_permission(struct inode *inode, int mask) mask |= MAY_READ; } err = inode_permission(realinode, mask); - revert_creds(old_cred); + ovl_revert_creds(inode->i_sb, old_cred); return err; } @@ -308,7 +308,7 @@ static const char *ovl_get_link(struct dentry *dentry, old_cred = ovl_override_creds(dentry->d_sb); p = vfs_get_link(ovl_dentry_real(dentry), done); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return p; } @@ -351,7 +351,7 @@ int ovl_xattr_set(struct dentry *dentry, struct inode *inode, const char *name, WARN_ON(flags != XATTR_REPLACE); err = vfs_removexattr(realdentry, name); } - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); /* copy c/mtime */ ovl_copyattr(d_inode(realdentry), inode); @@ -373,7 +373,7 @@ int ovl_xattr_get(struct dentry *dentry, struct inode *inode, const char *name, old_cred = ovl_override_creds(dentry->d_sb); res = __vfs_getxattr(realdentry, d_inode(realdentry), name, value, size, flags); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return res; } @@ -397,7 +397,7 @@ ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size) old_cred = ovl_override_creds(dentry->d_sb); res = vfs_listxattr(realdentry, list, size); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); if (res <= 0 || size == 0) return res; @@ -432,7 +432,7 @@ struct posix_acl *ovl_get_acl(struct inode *inode, int type) old_cred = ovl_override_creds(inode->i_sb); acl = get_acl(realinode, type); - revert_creds(old_cred); + ovl_revert_creds(inode->i_sb, old_cred); return acl; } @@ -470,7 +470,7 @@ static int ovl_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, filemap_write_and_wait(realinode->i_mapping); err = realinode->i_op->fiemap(realinode, fieinfo, start, len); - revert_creds(old_cred); + ovl_revert_creds(inode->i_sb, old_cred); return err; } diff --git a/fs/overlayfs/namei.c b/fs/overlayfs/namei.c index a4a452c489fa..bab1f97dc201 100644 --- a/fs/overlayfs/namei.c +++ b/fs/overlayfs/namei.c @@ -1079,7 +1079,7 @@ struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry, goto out_free_oe; } - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); if (origin_path) { dput(origin_path->dentry); kfree(origin_path); @@ -1106,7 +1106,7 @@ struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry, kfree(upperredirect); out: kfree(d.redirect); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return ERR_PTR(err); } @@ -1160,7 +1160,7 @@ bool ovl_lower_positive(struct dentry *dentry) dput(this); } } - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return positive; } diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h index 9d26d8758513..ad1a11e7ecbd 100644 --- a/fs/overlayfs/overlayfs.h +++ b/fs/overlayfs/overlayfs.h @@ -205,6 +205,7 @@ int ovl_want_write(struct dentry *dentry); void ovl_drop_write(struct dentry *dentry); struct dentry *ovl_workdir(struct dentry *dentry); const struct cred *ovl_override_creds(struct super_block *sb); +void ovl_revert_creds(struct super_block *sb, const struct cred *oldcred); ssize_t ovl_do_vfs_getxattr(struct dentry *dentry, const char *name, void *buf, size_t size); struct super_block *ovl_same_sb(struct super_block *sb); diff --git a/fs/overlayfs/ovl_entry.h b/fs/overlayfs/ovl_entry.h index 28a2d12a1029..2637c5aadf7f 100644 --- a/fs/overlayfs/ovl_entry.h +++ b/fs/overlayfs/ovl_entry.h @@ -17,6 +17,7 @@ struct ovl_config { bool nfs_export; int xino; bool metacopy; + bool override_creds; }; struct ovl_sb { diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c index 47a91c9733a5..874a1b3ff99a 100644 --- a/fs/overlayfs/readdir.c +++ b/fs/overlayfs/readdir.c @@ -286,7 +286,7 @@ static int ovl_check_whiteouts(struct dentry *dir, struct ovl_readdir_data *rdd) } inode_unlock(dir->d_inode); } - revert_creds(old_cred); + ovl_revert_creds(rdd->dentry->d_sb, old_cred); return err; } @@ -918,7 +918,7 @@ int ovl_check_empty_dir(struct dentry *dentry, struct list_head *list) old_cred = ovl_override_creds(dentry->d_sb); err = ovl_dir_read_merged(dentry, list, &root); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); if (err) return err; diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index 6f041e1fceda..2c1278451f38 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -53,6 +53,11 @@ module_param_named(xino_auto, ovl_xino_auto_def, bool, 0644); MODULE_PARM_DESC(xino_auto, "Auto enable xino feature"); +static bool __read_mostly ovl_override_creds_def = true; +module_param_named(override_creds, ovl_override_creds_def, bool, 0644); +MODULE_PARM_DESC(ovl_override_creds_def, + "Use mounter's credentials for accesses"); + static void ovl_entry_stack_free(struct ovl_entry *oe) { unsigned int i; @@ -362,6 +367,9 @@ static int ovl_show_options(struct seq_file *m, struct dentry *dentry) if (ofs->config.metacopy != ovl_metacopy_def) seq_printf(m, ",metacopy=%s", ofs->config.metacopy ? "on" : "off"); + if (ofs->config.override_creds != ovl_override_creds_def) + seq_show_option(m, "override_creds", + ofs->config.override_creds ? "on" : "off"); return 0; } @@ -402,6 +410,8 @@ enum { OPT_XINO_AUTO, OPT_METACOPY_ON, OPT_METACOPY_OFF, + OPT_OVERRIDE_CREDS_ON, + OPT_OVERRIDE_CREDS_OFF, OPT_ERR, }; @@ -420,6 +430,8 @@ static const match_table_t ovl_tokens = { {OPT_XINO_AUTO, "xino=auto"}, {OPT_METACOPY_ON, "metacopy=on"}, {OPT_METACOPY_OFF, "metacopy=off"}, + {OPT_OVERRIDE_CREDS_ON, "override_creds=on"}, + {OPT_OVERRIDE_CREDS_OFF, "override_creds=off"}, {OPT_ERR, NULL} }; @@ -478,6 +490,7 @@ static int ovl_parse_opt(char *opt, struct ovl_config *config) config->redirect_mode = kstrdup(ovl_redirect_mode_def(), GFP_KERNEL); if (!config->redirect_mode) return -ENOMEM; + config->override_creds = ovl_override_creds_def; while ((p = ovl_next_opt(&opt)) != NULL) { int token; @@ -558,6 +571,14 @@ static int ovl_parse_opt(char *opt, struct ovl_config *config) config->metacopy = false; break; + case OPT_OVERRIDE_CREDS_ON: + config->override_creds = true; + break; + + case OPT_OVERRIDE_CREDS_OFF: + config->override_creds = false; + break; + default: pr_err("overlayfs: unrecognized mount option \"%s\" or missing value\n", p); return -EINVAL; @@ -1674,7 +1695,6 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) ovl_dentry_lower(root_dentry), NULL); sb->s_root = root_dentry; - return 0; out_free_oe: diff --git a/fs/overlayfs/util.c b/fs/overlayfs/util.c index c588c0d66d8c..9e97e785e44c 100644 --- a/fs/overlayfs/util.c +++ b/fs/overlayfs/util.c @@ -37,9 +37,17 @@ const struct cred *ovl_override_creds(struct super_block *sb) { struct ovl_fs *ofs = sb->s_fs_info; + if (!ofs->config.override_creds) + return NULL; return override_creds(ofs->creator_cred); } +void ovl_revert_creds(struct super_block *sb, const struct cred *old_cred) +{ + if (old_cred) + revert_creds(old_cred); +} + ssize_t ovl_do_vfs_getxattr(struct dentry *dentry, const char *name, void *buf, size_t size) { @@ -798,7 +806,7 @@ int ovl_nlink_start(struct dentry *dentry) * value relative to the upper inode nlink in an upper inode xattr. */ err = ovl_set_nlink_upper(dentry); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); out: if (err) @@ -816,7 +824,7 @@ void ovl_nlink_end(struct dentry *dentry) old_cred = ovl_override_creds(dentry->d_sb); ovl_cleanup_index(dentry); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); } ovl_inode_unlock(inode); -- 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:58:00 -0700 Subject: [Cluster-devel] [PATCH v13 5/5] overlayfs: override_creds=off option bypass creator_cred In-Reply-To: <20190731165803.4755-1-salyzyn@android.com> References: <20190731165803.4755-1-salyzyn@android.com> Message-ID: <20190731165803.4755-6-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 By default, all access to the upper, lower and work directories is the recorded mounter's MAC and DAC credentials. The incoming accesses are checked against the caller's credentials. If the principles of least privilege are applied, the mounter's credentials might not overlap the credentials of the caller's when accessing the overlayfs filesystem. For example, a file that a lower DAC privileged caller can execute, is MAC denied to the generally higher DAC privileged mounter, to prevent an attack vector. We add the option to turn off override_creds in the mount options; all subsequent operations after mount on the filesystem will be only the caller's credentials. The module boolean parameter and mount option override_creds is also added as a presence check for this "feature", existence of /sys/module/overlay/parameters/override_creds. It was not always this way. Circa 4.6 there was no recorded mounter's credentials, instead privileged access to upper or work directories were temporarily increased to perform the operations. The MAC (selinux) policies were caller's in all cases. override_creds=off partially returns us to this older access model minus the insecure temporary credential increases. This is to permit use in a system with non-overlapping security models for each executable including the agent that mounts the overlayfs filesystem. In Android this is the case since init, which performs the mount operations, has a minimal MAC set of privileges to reduce any attack surface, and services that use the content have a different set of MAC privileges (eg: read, for vendor labelled configuration, execute for vendor libraries and modules). The caveats are not a problem in the Android usage model, however they should be fixed for completeness and for general use in time. 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 NB: this is a desired feature --- v12 + v13: - Rebase v11: - add sb argument to ovl_revert_creds to match future work v10: - Rebase (and expand because of increased revert_cred usage) v9: - Add to the caveats v8: - drop pr_warn message after straw poll to remove it. - added a use case in the commit message v7: - change name of internal parameter to ovl_override_creds_def - report override_creds only if different than default v6: - Drop CONFIG_OVERLAY_FS_OVERRIDE_CREDS. - Do better with the documentation. - pr_warn message adjusted to report consequences. v5: - beefed up the caveats in the Documentation - Is dependent on "overlayfs: check CAP_DAC_READ_SEARCH before issuing exportfs_decode_fh" "overlayfs: check CAP_MKNOD before issuing vfs_whiteout" - Added prwarn when override_creds=off v4: - spelling and grammar errors in text v3: - Change name from caller_credentials / creator_credentials to the boolean override_creds. - Changed from creator to mounter credentials. - Updated and fortified the documentation. - Added CONFIG_OVERLAY_FS_OVERRIDE_CREDS v2: - Forward port changed attr to stat, resulting in a build error. - altered commit message. --- Documentation/filesystems/overlayfs.txt | 23 +++++++++++++++++++++++ fs/overlayfs/copy_up.c | 2 +- fs/overlayfs/dir.c | 11 ++++++----- fs/overlayfs/file.c | 20 ++++++++++---------- fs/overlayfs/inode.c | 18 +++++++++--------- fs/overlayfs/namei.c | 6 +++--- fs/overlayfs/overlayfs.h | 1 + fs/overlayfs/ovl_entry.h | 1 + fs/overlayfs/readdir.c | 4 ++-- fs/overlayfs/super.c | 22 +++++++++++++++++++++- fs/overlayfs/util.c | 12 ++++++++++-- 11 files changed, 87 insertions(+), 33 deletions(-) diff --git a/Documentation/filesystems/overlayfs.txt b/Documentation/filesystems/overlayfs.txt index 1da2f1668f08..d48125076602 100644 --- a/Documentation/filesystems/overlayfs.txt +++ b/Documentation/filesystems/overlayfs.txt @@ -102,6 +102,29 @@ Only the lists of names from directories are merged. Other content such as metadata and extended attributes are reported for the upper directory only. These attributes of the lower directory are hidden. +credentials +----------- + +By default, all access to the upper, lower and work directories is the +recorded mounter's MAC and DAC credentials. The incoming accesses are +checked against the caller's credentials. + +In the case where caller MAC or DAC credentials do not overlap, a +use case available in older versions of the driver, the +override_creds mount flag can be turned off and help when the use +pattern has caller with legitimate credentials where the mounter +does not. Several unintended side effects will occur though. The +caller without certain key capabilities or lower privilege will not +always be able to delete files or directories, create nodes, or +search some restricted directories. The ability to search and read +a directory entry is spotty as a result of the cache mechanism not +retesting the credentials because of the assumption, a privileged +caller can fill cache, then a lower privilege can read the directory +cache. The uneven security model where cache, upperdir and workdir +are opened at privilege, but accessed without creating a form of +privilege escalation, should only be used with strict understanding +of the side effects and of the security policies. + whiteouts and opaque directories -------------------------------- diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c index b801c6353100..1c1b9415e533 100644 --- a/fs/overlayfs/copy_up.c +++ b/fs/overlayfs/copy_up.c @@ -886,7 +886,7 @@ int ovl_copy_up_flags(struct dentry *dentry, int flags) dput(parent); dput(next); } - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return err; } diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c index 702aa63f6774..49b8ffc1294f 100644 --- a/fs/overlayfs/dir.c +++ b/fs/overlayfs/dir.c @@ -563,7 +563,8 @@ static int ovl_create_or_link(struct dentry *dentry, struct inode *inode, override_cred->fsgid = inode->i_gid; if (!attr->hardlink) { err = security_dentry_create_files_as(dentry, - attr->mode, &dentry->d_name, old_cred, + attr->mode, &dentry->d_name, + old_cred ? old_cred : current_cred(), override_cred); if (err) { put_cred(override_cred); @@ -579,7 +580,7 @@ static int ovl_create_or_link(struct dentry *dentry, struct inode *inode, err = ovl_create_over_whiteout(dentry, inode, attr); } out_revert_creds: - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return err; } @@ -655,7 +656,7 @@ static int ovl_set_link_redirect(struct dentry *dentry) old_cred = ovl_override_creds(dentry->d_sb); err = ovl_set_redirect(dentry, false); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return err; } @@ -851,7 +852,7 @@ static int ovl_do_remove(struct dentry *dentry, bool is_dir) err = ovl_remove_upper(dentry, is_dir, &list); else err = ovl_remove_and_whiteout(dentry, &list); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); if (!err) { if (is_dir) clear_nlink(dentry->d_inode); @@ -1221,7 +1222,7 @@ static int ovl_rename(struct inode *olddir, struct dentry *old, out_unlock: unlock_rename(new_upperdir, old_upperdir); out_revert_creds: - revert_creds(old_cred); + ovl_revert_creds(old->d_sb, old_cred); if (update_nlink) ovl_nlink_end(new); out_drop_write: diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c index e235a635d9ec..d94d6ec785a7 100644 --- a/fs/overlayfs/file.c +++ b/fs/overlayfs/file.c @@ -32,7 +32,7 @@ static struct file *ovl_open_realfile(const struct file *file, old_cred = ovl_override_creds(inode->i_sb); realfile = open_with_fake_path(&file->f_path, flags, realinode, current_cred()); - revert_creds(old_cred); + ovl_revert_creds(inode->i_sb, old_cred); pr_debug("open(%p[%pD2/%c], 0%o) -> (%p, 0%o)\n", file, file, ovl_whatisit(inode, realinode), file->f_flags, @@ -176,7 +176,7 @@ static loff_t ovl_llseek(struct file *file, loff_t offset, int whence) old_cred = ovl_override_creds(inode->i_sb); ret = vfs_llseek(real.file, offset, whence); - revert_creds(old_cred); + ovl_revert_creds(inode->i_sb, old_cred); file->f_pos = real.file->f_pos; inode_unlock(inode); @@ -242,7 +242,7 @@ static ssize_t ovl_read_iter(struct kiocb *iocb, struct iov_iter *iter) old_cred = ovl_override_creds(file_inode(file)->i_sb); ret = vfs_iter_read(real.file, iter, &iocb->ki_pos, ovl_iocb_to_rwf(iocb)); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); ovl_file_accessed(file); @@ -278,7 +278,7 @@ static ssize_t ovl_write_iter(struct kiocb *iocb, struct iov_iter *iter) ret = vfs_iter_write(real.file, iter, &iocb->ki_pos, ovl_iocb_to_rwf(iocb)); file_end_write(real.file); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); /* Update size */ ovl_copyattr(ovl_inode_real(inode), inode); @@ -305,7 +305,7 @@ static int ovl_fsync(struct file *file, loff_t start, loff_t end, int datasync) if (file_inode(real.file) == ovl_inode_upper(file_inode(file))) { old_cred = ovl_override_creds(file_inode(file)->i_sb); ret = vfs_fsync_range(real.file, start, end, datasync); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); } fdput(real); @@ -329,7 +329,7 @@ static int ovl_mmap(struct file *file, struct vm_area_struct *vma) old_cred = ovl_override_creds(file_inode(file)->i_sb); ret = call_mmap(vma->vm_file, vma); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); if (ret) { /* Drop reference count from new vm_file value */ @@ -357,7 +357,7 @@ static long ovl_fallocate(struct file *file, int mode, loff_t offset, loff_t len old_cred = ovl_override_creds(file_inode(file)->i_sb); ret = vfs_fallocate(real.file, mode, offset, len); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); /* Update size */ ovl_copyattr(ovl_inode_real(inode), inode); @@ -379,7 +379,7 @@ static int ovl_fadvise(struct file *file, loff_t offset, loff_t len, int advice) old_cred = ovl_override_creds(file_inode(file)->i_sb); ret = vfs_fadvise(real.file, offset, len, advice); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); fdput(real); @@ -399,7 +399,7 @@ static long ovl_real_ioctl(struct file *file, unsigned int cmd, old_cred = ovl_override_creds(file_inode(file)->i_sb); ret = vfs_ioctl(real.file, cmd, arg); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); fdput(real); @@ -589,7 +589,7 @@ static loff_t ovl_copyfile(struct file *file_in, loff_t pos_in, flags); break; } - revert_creds(old_cred); + ovl_revert_creds(file_inode(file_out)->i_sb, old_cred); /* Update size */ ovl_copyattr(ovl_inode_real(inode_out), inode_out); diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c index 1bf11ae44313..fc1828aa30ed 100644 --- a/fs/overlayfs/inode.c +++ b/fs/overlayfs/inode.c @@ -61,7 +61,7 @@ int ovl_setattr(struct dentry *dentry, struct iattr *attr) inode_lock(upperdentry->d_inode); old_cred = ovl_override_creds(dentry->d_sb); err = notify_change(upperdentry, attr, NULL); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); if (!err) ovl_copyattr(upperdentry->d_inode, dentry->d_inode); inode_unlock(upperdentry->d_inode); @@ -257,7 +257,7 @@ int ovl_getattr(const struct path *path, struct kstat *stat, stat->nlink = dentry->d_inode->i_nlink; out: - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return err; } @@ -291,7 +291,7 @@ int ovl_permission(struct inode *inode, int mask) mask |= MAY_READ; } err = inode_permission(realinode, mask); - revert_creds(old_cred); + ovl_revert_creds(inode->i_sb, old_cred); return err; } @@ -308,7 +308,7 @@ static const char *ovl_get_link(struct dentry *dentry, old_cred = ovl_override_creds(dentry->d_sb); p = vfs_get_link(ovl_dentry_real(dentry), done); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return p; } @@ -351,7 +351,7 @@ int ovl_xattr_set(struct dentry *dentry, struct inode *inode, const char *name, WARN_ON(flags != XATTR_REPLACE); err = vfs_removexattr(realdentry, name); } - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); /* copy c/mtime */ ovl_copyattr(d_inode(realdentry), inode); @@ -373,7 +373,7 @@ int ovl_xattr_get(struct dentry *dentry, struct inode *inode, const char *name, old_cred = ovl_override_creds(dentry->d_sb); res = __vfs_getxattr(realdentry, d_inode(realdentry), name, value, size, flags); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return res; } @@ -397,7 +397,7 @@ ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size) old_cred = ovl_override_creds(dentry->d_sb); res = vfs_listxattr(realdentry, list, size); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); if (res <= 0 || size == 0) return res; @@ -432,7 +432,7 @@ struct posix_acl *ovl_get_acl(struct inode *inode, int type) old_cred = ovl_override_creds(inode->i_sb); acl = get_acl(realinode, type); - revert_creds(old_cred); + ovl_revert_creds(inode->i_sb, old_cred); return acl; } @@ -470,7 +470,7 @@ static int ovl_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, filemap_write_and_wait(realinode->i_mapping); err = realinode->i_op->fiemap(realinode, fieinfo, start, len); - revert_creds(old_cred); + ovl_revert_creds(inode->i_sb, old_cred); return err; } diff --git a/fs/overlayfs/namei.c b/fs/overlayfs/namei.c index a4a452c489fa..bab1f97dc201 100644 --- a/fs/overlayfs/namei.c +++ b/fs/overlayfs/namei.c @@ -1079,7 +1079,7 @@ struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry, goto out_free_oe; } - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); if (origin_path) { dput(origin_path->dentry); kfree(origin_path); @@ -1106,7 +1106,7 @@ struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry, kfree(upperredirect); out: kfree(d.redirect); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return ERR_PTR(err); } @@ -1160,7 +1160,7 @@ bool ovl_lower_positive(struct dentry *dentry) dput(this); } } - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return positive; } diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h index 9d26d8758513..ad1a11e7ecbd 100644 --- a/fs/overlayfs/overlayfs.h +++ b/fs/overlayfs/overlayfs.h @@ -205,6 +205,7 @@ int ovl_want_write(struct dentry *dentry); void ovl_drop_write(struct dentry *dentry); struct dentry *ovl_workdir(struct dentry *dentry); const struct cred *ovl_override_creds(struct super_block *sb); +void ovl_revert_creds(struct super_block *sb, const struct cred *oldcred); ssize_t ovl_do_vfs_getxattr(struct dentry *dentry, const char *name, void *buf, size_t size); struct super_block *ovl_same_sb(struct super_block *sb); diff --git a/fs/overlayfs/ovl_entry.h b/fs/overlayfs/ovl_entry.h index 28a2d12a1029..2637c5aadf7f 100644 --- a/fs/overlayfs/ovl_entry.h +++ b/fs/overlayfs/ovl_entry.h @@ -17,6 +17,7 @@ struct ovl_config { bool nfs_export; int xino; bool metacopy; + bool override_creds; }; struct ovl_sb { diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c index 47a91c9733a5..874a1b3ff99a 100644 --- a/fs/overlayfs/readdir.c +++ b/fs/overlayfs/readdir.c @@ -286,7 +286,7 @@ static int ovl_check_whiteouts(struct dentry *dir, struct ovl_readdir_data *rdd) } inode_unlock(dir->d_inode); } - revert_creds(old_cred); + ovl_revert_creds(rdd->dentry->d_sb, old_cred); return err; } @@ -918,7 +918,7 @@ int ovl_check_empty_dir(struct dentry *dentry, struct list_head *list) old_cred = ovl_override_creds(dentry->d_sb); err = ovl_dir_read_merged(dentry, list, &root); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); if (err) return err; diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index 6f041e1fceda..2c1278451f38 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -53,6 +53,11 @@ module_param_named(xino_auto, ovl_xino_auto_def, bool, 0644); MODULE_PARM_DESC(xino_auto, "Auto enable xino feature"); +static bool __read_mostly ovl_override_creds_def = true; +module_param_named(override_creds, ovl_override_creds_def, bool, 0644); +MODULE_PARM_DESC(ovl_override_creds_def, + "Use mounter's credentials for accesses"); + static void ovl_entry_stack_free(struct ovl_entry *oe) { unsigned int i; @@ -362,6 +367,9 @@ static int ovl_show_options(struct seq_file *m, struct dentry *dentry) if (ofs->config.metacopy != ovl_metacopy_def) seq_printf(m, ",metacopy=%s", ofs->config.metacopy ? "on" : "off"); + if (ofs->config.override_creds != ovl_override_creds_def) + seq_show_option(m, "override_creds", + ofs->config.override_creds ? "on" : "off"); return 0; } @@ -402,6 +410,8 @@ enum { OPT_XINO_AUTO, OPT_METACOPY_ON, OPT_METACOPY_OFF, + OPT_OVERRIDE_CREDS_ON, + OPT_OVERRIDE_CREDS_OFF, OPT_ERR, }; @@ -420,6 +430,8 @@ static const match_table_t ovl_tokens = { {OPT_XINO_AUTO, "xino=auto"}, {OPT_METACOPY_ON, "metacopy=on"}, {OPT_METACOPY_OFF, "metacopy=off"}, + {OPT_OVERRIDE_CREDS_ON, "override_creds=on"}, + {OPT_OVERRIDE_CREDS_OFF, "override_creds=off"}, {OPT_ERR, NULL} }; @@ -478,6 +490,7 @@ static int ovl_parse_opt(char *opt, struct ovl_config *config) config->redirect_mode = kstrdup(ovl_redirect_mode_def(), GFP_KERNEL); if (!config->redirect_mode) return -ENOMEM; + config->override_creds = ovl_override_creds_def; while ((p = ovl_next_opt(&opt)) != NULL) { int token; @@ -558,6 +571,14 @@ static int ovl_parse_opt(char *opt, struct ovl_config *config) config->metacopy = false; break; + case OPT_OVERRIDE_CREDS_ON: + config->override_creds = true; + break; + + case OPT_OVERRIDE_CREDS_OFF: + config->override_creds = false; + break; + default: pr_err("overlayfs: unrecognized mount option \"%s\" or missing value\n", p); return -EINVAL; @@ -1674,7 +1695,6 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) ovl_dentry_lower(root_dentry), NULL); sb->s_root = root_dentry; - return 0; out_free_oe: diff --git a/fs/overlayfs/util.c b/fs/overlayfs/util.c index c588c0d66d8c..9e97e785e44c 100644 --- a/fs/overlayfs/util.c +++ b/fs/overlayfs/util.c @@ -37,9 +37,17 @@ const struct cred *ovl_override_creds(struct super_block *sb) { struct ovl_fs *ofs = sb->s_fs_info; + if (!ofs->config.override_creds) + return NULL; return override_creds(ofs->creator_cred); } +void ovl_revert_creds(struct super_block *sb, const struct cred *old_cred) +{ + if (old_cred) + revert_creds(old_cred); +} + ssize_t ovl_do_vfs_getxattr(struct dentry *dentry, const char *name, void *buf, size_t size) { @@ -798,7 +806,7 @@ int ovl_nlink_start(struct dentry *dentry) * value relative to the upper inode nlink in an upper inode xattr. */ err = ovl_set_nlink_upper(dentry); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); out: if (err) @@ -816,7 +824,7 @@ void ovl_nlink_end(struct dentry *dentry) old_cred = ovl_override_creds(dentry->d_sb); ovl_cleanup_index(dentry); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); } ovl_inode_unlock(inode); -- 2.22.0.770.g0f2c4a37fd-goog From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark Salyzyn Subject: [PATCH v13 5/5] overlayfs: override_creds=off option bypass creator_cred Date: Wed, 31 Jul 2019 09:58:00 -0700 Message-ID: <20190731165803.4755-6-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 , David Howells , Chris Mason , "David S . Miller" , Andreas Dilger , ocfs2-devel@oss.oracle.com, 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 Fasheh , devel@lists.orangefs.org, Hugh Dickins , linux-security-module@vger QnkgZGVmYXVsdCwgYWxsIGFjY2VzcyB0byB0aGUgdXBwZXIsIGxvd2VyIGFuZCB3b3JrIGRpcmVj dG9yaWVzIGlzIHRoZQpyZWNvcmRlZCBtb3VudGVyJ3MgTUFDIGFuZCBEQUMgY3JlZGVudGlhbHMu ICBUaGUgaW5jb21pbmcgYWNjZXNzZXMgYXJlCmNoZWNrZWQgYWdhaW5zdCB0aGUgY2FsbGVyJ3Mg Y3JlZGVudGlhbHMuCgpJZiB0aGUgcHJpbmNpcGxlcyBvZiBsZWFzdCBwcml2aWxlZ2UgYXJlIGFw cGxpZWQsIHRoZSBtb3VudGVyJ3MKY3JlZGVudGlhbHMgbWlnaHQgbm90IG92ZXJsYXAgdGhlIGNy ZWRlbnRpYWxzIG9mIHRoZSBjYWxsZXIncyB3aGVuCmFjY2Vzc2luZyB0aGUgb3ZlcmxheWZzIGZp bGVzeXN0ZW0uICBGb3IgZXhhbXBsZSwgYSBmaWxlIHRoYXQgYSBsb3dlcgpEQUMgcHJpdmlsZWdl ZCBjYWxsZXIgY2FuIGV4ZWN1dGUsIGlzIE1BQyBkZW5pZWQgdG8gdGhlIGdlbmVyYWxseQpoaWdo ZXIgREFDIHByaXZpbGVnZWQgbW91bnRlciwgdG8gcHJldmVudCBhbiBhdHRhY2sgdmVjdG9yLgoK V2UgYWRkIHRoZSBvcHRpb24gdG8gdHVybiBvZmYgb3ZlcnJpZGVfY3JlZHMgaW4gdGhlIG1vdW50 IG9wdGlvbnM7IGFsbApzdWJzZXF1ZW50IG9wZXJhdGlvbnMgYWZ0ZXIgbW91bnQgb24gdGhlIGZp bGVzeXN0ZW0gd2lsbCBiZSBvbmx5IHRoZQpjYWxsZXIncyBjcmVkZW50aWFscy4gIFRoZSBtb2R1 bGUgYm9vbGVhbiBwYXJhbWV0ZXIgYW5kIG1vdW50IG9wdGlvbgpvdmVycmlkZV9jcmVkcyBpcyBh bHNvIGFkZGVkIGFzIGEgcHJlc2VuY2UgY2hlY2sgZm9yIHRoaXMgImZlYXR1cmUiLApleGlzdGVu Y2Ugb2YgL3N5cy9tb2R1bGUvb3ZlcmxheS9wYXJhbWV0ZXJzL292ZXJyaWRlX2NyZWRzLgoKSXQg d2FzIG5vdCBhbHdheXMgdGhpcyB3YXkuICBDaXJjYSA0LjYgdGhlcmUgd2FzIG5vIHJlY29yZGVk IG1vdW50ZXIncwpjcmVkZW50aWFscywgaW5zdGVhZCBwcml2aWxlZ2VkIGFjY2VzcyB0byB1cHBl ciBvciB3b3JrIGRpcmVjdG9yaWVzCndlcmUgdGVtcG9yYXJpbHkgaW5jcmVhc2VkIHRvIHBlcmZv cm0gdGhlIG9wZXJhdGlvbnMuICBUaGUgTUFDCihzZWxpbnV4KSBwb2xpY2llcyB3ZXJlIGNhbGxl cidzIGluIGFsbCBjYXNlcy4gIG92ZXJyaWRlX2NyZWRzPW9mZgpwYXJ0aWFsbHkgcmV0dXJucyB1 cyB0byB0aGlzIG9sZGVyIGFjY2VzcyBtb2RlbCBtaW51cyB0aGUgaW5zZWN1cmUKdGVtcG9yYXJ5 IGNyZWRlbnRpYWwgaW5jcmVhc2VzLiAgVGhpcyBpcyB0byBwZXJtaXQgdXNlIGluIGEgc3lzdGVt CndpdGggbm9uLW92ZXJsYXBwaW5nIHNlY3VyaXR5IG1vZGVscyBmb3IgZWFjaCBleGVjdXRhYmxl IGluY2x1ZGluZwp0aGUgYWdlbnQgdGhhdCBtb3VudHMgdGhlIG92ZXJsYXlmcyBmaWxlc3lzdGVt LiAgSW4gQW5kcm9pZAp0aGlzIGlzIHRoZSBjYXNlIHNpbmNlIGluaXQsIHdoaWNoIHBlcmZvcm1z IHRoZSBtb3VudCBvcGVyYXRpb25zLApoYXMgYSBtaW5pbWFsIE1BQyBzZXQgb2YgcHJpdmlsZWdl cyB0byByZWR1Y2UgYW55IGF0dGFjayBzdXJmYWNlLAphbmQgc2VydmljZXMgdGhhdCB1c2UgdGhl IGNvbnRlbnQgaGF2ZSBhIGRpZmZlcmVudCBzZXQgb2YgTUFDCnByaXZpbGVnZXMgKGVnOiByZWFk LCBmb3IgdmVuZG9yIGxhYmVsbGVkIGNvbmZpZ3VyYXRpb24sIGV4ZWN1dGUgZm9yCnZlbmRvciBs aWJyYXJpZXMgYW5kIG1vZHVsZXMpLiAgVGhlIGNhdmVhdHMgYXJlIG5vdCBhIHByb2JsZW0gaW4K dGhlIEFuZHJvaWQgdXNhZ2UgbW9kZWwsIGhvd2V2ZXIgdGhleSBzaG91bGQgYmUgZml4ZWQgZm9y CmNvbXBsZXRlbmVzcyBhbmQgZm9yIGdlbmVyYWwgdXNlIGluIHRpbWUuCgpTaWduZWQtb2ZmLWJ5 OiBNYXJrIFNhbHl6eW4gPHNhbHl6eW5AYW5kcm9pZC5jb20+CkNjOiBNaWtsb3MgU3plcmVkaSA8 bWlrbG9zQHN6ZXJlZGkuaHU+CkNjOiBKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgpD YzogVml2ZWsgR295YWwgPHZnb3lhbEByZWRoYXQuY29tPgpDYzogRXJpYyBXLiBCaWVkZXJtYW4g PGViaWVkZXJtQHhtaXNzaW9uLmNvbT4KQ2M6IEFtaXIgR29sZHN0ZWluIDxhbWlyNzNpbEBnbWFp bC5jb20+CkNjOiBSYW5keSBEdW5sYXAgPHJkdW5sYXBAaW5mcmFkZWFkLm9yZz4KQ2M6IFN0ZXBo ZW4gU21hbGxleSA8c2RzQHR5Y2hvLm5zYS5nb3Y+CkNjOiBsaW51eC11bmlvbmZzQHZnZXIua2Vy bmVsLm9yZwpDYzogbGludXgtZG9jQHZnZXIua2VybmVsLm9yZwpDYzogbGludXgta2VybmVsQHZn ZXIua2VybmVsLm9yZwpDYzoga2VybmVsLXRlYW1AYW5kcm9pZC5jb20KQ2M6IEVyaWMgVmFuIEhl bnNiZXJnZW4gPGVyaWN2aEBnbWFpbC5jb20+CkNjOiBMYXRjaGVzYXIgSW9ua292IDxsdWNob0Bp b25rb3YubmV0PgpDYzogRG9taW5pcXVlIE1hcnRpbmV0IDxhc21hZGV1c0Bjb2Rld3JlY2sub3Jn PgpDYzogRGF2aWQgSG93ZWxscyA8ZGhvd2VsbHNAcmVkaGF0LmNvbT4KQ2M6IENocmlzIE1hc29u IDxjbG1AZmIuY29tPgpDYzogSm9zZWYgQmFjaWsgPGpvc2VmQHRveGljcGFuZGEuY29tPgpDYzog RGF2aWQgU3RlcmJhIDxkc3RlcmJhQHN1c2UuY29tPgpDYzogSmVmZiBMYXl0b24gPGpsYXl0b25A a2VybmVsLm9yZz4KQ2M6IFNhZ2UgV2VpbCA8c2FnZUByZWRoYXQuY29tPgpDYzogSWx5YSBEcnlv bW92IDxpZHJ5b21vdkBnbWFpbC5jb20+CkNjOiBTdGV2ZSBGcmVuY2ggPHNmcmVuY2hAc2FtYmEu b3JnPgpDYzogVHlsZXIgSGlja3MgPHR5aGlja3NAY2Fub25pY2FsLmNvbT4KQ2M6IEphbiBLYXJh IDxqYWNrQHN1c2UuY29tPgpDYzogVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KQ2M6IEFu ZHJlYXMgRGlsZ2VyIDxhZGlsZ2VyLmtlcm5lbEBkaWxnZXIuY2E+CkNjOiBKYWVnZXVrIEtpbSA8 amFlZ2V1a0BrZXJuZWwub3JnPgpDYzogQ2hhbyBZdSA8eXVjaGFvMEBodWF3ZWkuY29tPgpDYzog Qm9iIFBldGVyc29uIDxycGV0ZXJzb0ByZWRoYXQuY29tPgpDYzogQW5kcmVhcyBHcnVlbmJhY2hl ciA8YWdydWVuYmFAcmVkaGF0LmNvbT4KQ2M6IERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFk ZWFkLm9yZz4KQ2M6IFJpY2hhcmQgV2VpbmJlcmdlciA8cmljaGFyZEBub2QuYXQ+CkNjOiBEYXZl IEtsZWlrYW1wIDxzaGFnZ3lAa2VybmVsLm9yZz4KQ2M6IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3Jl Z2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+CkNjOiBUZWp1biBIZW8gPHRqQGtlcm5lbC5vcmc+CkNj OiBUcm9uZCBNeWtsZWJ1c3QgPHRyb25kLm15a2xlYnVzdEBoYW1tZXJzcGFjZS5jb20+CkNjOiBB bm5hIFNjaHVtYWtlciA8YW5uYS5zY2h1bWFrZXJAbmV0YXBwLmNvbT4KQ2M6IE1hcmsgRmFzaGVo IDxtYXJrQGZhc2hlaC5jb20+CkNjOiBKb2VsIEJlY2tlciA8amxiZWNAZXZpbHBsYW4ub3JnPgpD YzogSm9zZXBoIFFpIDxqb3NlcGgucWlAbGludXguYWxpYmFiYS5jb20+CkNjOiBNaWtlIE1hcnNo YWxsIDxodWJjYXBAb21uaWJvbmQuY29tPgpDYzogTWFydGluIEJyYW5kZW5idXJnIDxtYXJ0aW5A b21uaWJvbmQuY29tPgpDYzogQWxleGFuZGVyIFZpcm8gPHZpcm9AemVuaXYubGludXgub3JnLnVr PgpDYzogUGhpbGxpcCBMb3VnaGVyIDxwaGlsbGlwQHNxdWFzaGZzLm9yZy51az4KQ2M6IERhcnJp Y2sgSi4gV29uZyA8ZGFycmljay53b25nQG9yYWNsZS5jb20+CkNjOiBsaW51eC14ZnNAdmdlci5r ZXJuZWwub3JnCkNjOiBIdWdoIERpY2tpbnMgPGh1Z2hkQGdvb2dsZS5jb20+CkNjOiBEYXZpZCBT LiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CkNjOiBBbmRyZXcgTW9ydG9uIDxha3BtQGxp bnV4LWZvdW5kYXRpb24ub3JnPgpDYzogTWF0aGlldSBNYWxhdGVycmUgPG1hbGF0QGRlYmlhbi5v cmc+CkNjOiBFcm5lc3RvIEEuIEZlcm7DoW5kZXogPGVybmVzdG8ubW5kLmZlcm5hbmRlekBnbWFp bC5jb20+CkNjOiBWeWFjaGVzbGF2IER1YmV5a28gPHNsYXZhQGR1YmV5a28uY29tPgpDYzogdjlm cy1kZXZlbG9wZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CkNjOiBsaW51eC1hZnNAbGlzdHMuaW5m cmFkZWFkLm9yZwpDYzogbGludXgtYnRyZnNAdmdlci5rZXJuZWwub3JnCkNjOiBjZXBoLWRldmVs QHZnZXIua2VybmVsLm9yZwpDYzogbGludXgtY2lmc0B2Z2VyLmtlcm5lbC5vcmcKQ2M6IHNhbWJh LXRlY2huaWNhbEBsaXN0cy5zYW1iYS5vcmcKQ2M6IGVjcnlwdGZzQHZnZXIua2VybmVsLm9yZwpD YzogbGludXgtZXh0NEB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGxpbnV4LWYyZnMtZGV2ZWxAbGlzdHMu c291cmNlZm9yZ2UubmV0CkNjOiBsaW51eC1mc2RldmVsQHZnZXIua2VybmVsLm9yZwpDYzogY2x1 c3Rlci1kZXZlbEByZWRoYXQuY29tCkNjOiBsaW51eC1tdGRAbGlzdHMuaW5mcmFkZWFkLm9yZwpD YzogamZzLWRpc2N1c3Npb25AbGlzdHMuc291cmNlZm9yZ2UubmV0CkNjOiBsaW51eC1uZnNAdmdl ci5rZXJuZWwub3JnCkNjOiBvY2ZzMi1kZXZlbEBvc3Mub3JhY2xlLmNvbQpDYzogZGV2ZWxAbGlz dHMub3JhbmdlZnMub3JnCkNjOiByZWlzZXJmcy1kZXZlbEB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGxp bnV4LW1tQGt2YWNrLm9yZwpDYzogbmV0ZGV2QHZnZXIua2VybmVsLm9yZwpDYzogbGludXgtc2Vj dXJpdHktbW9kdWxlQHZnZXIua2VybmVsLm9yZwpDYzogc3RhYmxlQHZnZXIua2VybmVsLm9yZyAj IDQuNCwgNC45LCA0LjE0ICYgNC4xOSBOQjogdGhpcyBpcyBhIGRlc2lyZWQgZmVhdHVyZQotLS0K djEyICsgdjEzOgotIFJlYmFzZQoKdjExOgotIGFkZCBzYiBhcmd1bWVudCB0byBvdmxfcmV2ZXJ0 X2NyZWRzIHRvIG1hdGNoIGZ1dHVyZSB3b3JrCgp2MTA6Ci0gUmViYXNlIChhbmQgZXhwYW5kIGJl Y2F1c2Ugb2YgaW5jcmVhc2VkIHJldmVydF9jcmVkIHVzYWdlKQoKdjk6Ci0gQWRkIHRvIHRoZSBj YXZlYXRzCgp2ODoKLSBkcm9wIHByX3dhcm4gbWVzc2FnZSBhZnRlciBzdHJhdyBwb2xsIHRvIHJl bW92ZSBpdC4KLSBhZGRlZCBhIHVzZSBjYXNlIGluIHRoZSBjb21taXQgbWVzc2FnZQoKdjc6Ci0g Y2hhbmdlIG5hbWUgb2YgaW50ZXJuYWwgcGFyYW1ldGVyIHRvIG92bF9vdmVycmlkZV9jcmVkc19k ZWYKLSByZXBvcnQgb3ZlcnJpZGVfY3JlZHMgb25seSBpZiBkaWZmZXJlbnQgdGhhbiBkZWZhdWx0 Cgp2NjoKLSBEcm9wIENPTkZJR19PVkVSTEFZX0ZTX09WRVJSSURFX0NSRURTLgotIERvIGJldHRl ciB3aXRoIHRoZSBkb2N1bWVudGF0aW9uLgotIHByX3dhcm4gbWVzc2FnZSBhZGp1c3RlZCB0byBy ZXBvcnQgY29uc2VxdWVuY2VzLgoKdjU6Ci0gYmVlZmVkIHVwIHRoZSBjYXZlYXRzIGluIHRoZSBE b2N1bWVudGF0aW9uCi0gSXMgZGVwZW5kZW50IG9uCiAgIm92ZXJsYXlmczogY2hlY2sgQ0FQX0RB Q19SRUFEX1NFQVJDSCBiZWZvcmUgaXNzdWluZyBleHBvcnRmc19kZWNvZGVfZmgiCiAgIm92ZXJs YXlmczogY2hlY2sgQ0FQX01LTk9EIGJlZm9yZSBpc3N1aW5nIHZmc193aGl0ZW91dCIKLSBBZGRl ZCBwcndhcm4gd2hlbiBvdmVycmlkZV9jcmVkcz1vZmYKCnY0OgotIHNwZWxsaW5nIGFuZCBncmFt bWFyIGVycm9ycyBpbiB0ZXh0Cgp2MzoKLSBDaGFuZ2UgbmFtZSBmcm9tIGNhbGxlcl9jcmVkZW50 aWFscyAvIGNyZWF0b3JfY3JlZGVudGlhbHMgdG8gdGhlCiAgYm9vbGVhbiBvdmVycmlkZV9jcmVk cy4KLSBDaGFuZ2VkIGZyb20gY3JlYXRvciB0byBtb3VudGVyIGNyZWRlbnRpYWxzLgotIFVwZGF0 ZWQgYW5kIGZvcnRpZmllZCB0aGUgZG9jdW1lbnRhdGlvbi4KLSBBZGRlZCBDT05GSUdfT1ZFUkxB WV9GU19PVkVSUklERV9DUkVEUwoKdjI6Ci0gRm9yd2FyZCBwb3J0IGNoYW5nZWQgYXR0ciB0byBz dGF0LCByZXN1bHRpbmcgaW4gYSBidWlsZCBlcnJvci4KLSBhbHRlcmVkIGNvbW1pdCBtZXNzYWdl LgotLS0KIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb3ZlcmxheWZzLnR4dCB8IDIzICsrKysr KysrKysrKysrKysrKysrKysrCiBmcy9vdmVybGF5ZnMvY29weV91cC5jICAgICAgICAgICAgICAg ICAgfCAgMiArLQogZnMvb3ZlcmxheWZzL2Rpci5jICAgICAgICAgICAgICAgICAgICAgIHwgMTEg KysrKysrLS0tLS0KIGZzL292ZXJsYXlmcy9maWxlLmMgICAgICAgICAgICAgICAgICAgICB8IDIw ICsrKysrKysrKystLS0tLS0tLS0tCiBmcy9vdmVybGF5ZnMvaW5vZGUuYyAgICAgICAgICAgICAg ICAgICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KIGZzL292ZXJsYXlmcy9uYW1laS5jICAgICAg ICAgICAgICAgICAgICB8ICA2ICsrKy0tLQogZnMvb3ZlcmxheWZzL292ZXJsYXlmcy5oICAgICAg ICAgICAgICAgIHwgIDEgKwogZnMvb3ZlcmxheWZzL292bF9lbnRyeS5oICAgICAgICAgICAgICAg IHwgIDEgKwogZnMvb3ZlcmxheWZzL3JlYWRkaXIuYyAgICAgICAgICAgICAgICAgIHwgIDQgKyst LQogZnMvb3ZlcmxheWZzL3N1cGVyLmMgICAgICAgICAgICAgICAgICAgIHwgMjIgKysrKysrKysr KysrKysrKysrKysrLQogZnMvb3ZlcmxheWZzL3V0aWwuYyAgICAgICAgICAgICAgICAgICAgIHwg MTIgKysrKysrKysrKy0tCiAxMSBmaWxlcyBjaGFuZ2VkLCA4NyBpbnNlcnRpb25zKCspLCAzMyBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL292ZXJs YXlmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL292ZXJsYXlmcy50eHQKaW5kZXgg MWRhMmYxNjY4ZjA4Li5kNDgxMjUwNzY2MDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmls ZXN5c3RlbXMvb3ZlcmxheWZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL292 ZXJsYXlmcy50eHQKQEAgLTEwMiw2ICsxMDIsMjkgQEAgT25seSB0aGUgbGlzdHMgb2YgbmFtZXMg ZnJvbSBkaXJlY3RvcmllcyBhcmUgbWVyZ2VkLiAgT3RoZXIgY29udGVudAogc3VjaCBhcyBtZXRh ZGF0YSBhbmQgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgcmVwb3J0ZWQgZm9yIHRoZSB1cHBlcgog ZGlyZWN0b3J5IG9ubHkuICBUaGVzZSBhdHRyaWJ1dGVzIG9mIHRoZSBsb3dlciBkaXJlY3Rvcnkg YXJlIGhpZGRlbi4KIAorY3JlZGVudGlhbHMKKy0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQsIGFs bCBhY2Nlc3MgdG8gdGhlIHVwcGVyLCBsb3dlciBhbmQgd29yayBkaXJlY3RvcmllcyBpcyB0aGUK K3JlY29yZGVkIG1vdW50ZXIncyBNQUMgYW5kIERBQyBjcmVkZW50aWFscy4gIFRoZSBpbmNvbWlu ZyBhY2Nlc3NlcyBhcmUKK2NoZWNrZWQgYWdhaW5zdCB0aGUgY2FsbGVyJ3MgY3JlZGVudGlhbHMu CisKK0luIHRoZSBjYXNlIHdoZXJlIGNhbGxlciBNQUMgb3IgREFDIGNyZWRlbnRpYWxzIGRvIG5v dCBvdmVybGFwLCBhCit1c2UgY2FzZSBhdmFpbGFibGUgaW4gb2xkZXIgdmVyc2lvbnMgb2YgdGhl IGRyaXZlciwgdGhlCitvdmVycmlkZV9jcmVkcyBtb3VudCBmbGFnIGNhbiBiZSB0dXJuZWQgb2Zm IGFuZCBoZWxwIHdoZW4gdGhlIHVzZQorcGF0dGVybiBoYXMgY2FsbGVyIHdpdGggbGVnaXRpbWF0 ZSBjcmVkZW50aWFscyB3aGVyZSB0aGUgbW91bnRlcgorZG9lcyBub3QuICBTZXZlcmFsIHVuaW50 ZW5kZWQgc2lkZSBlZmZlY3RzIHdpbGwgb2NjdXIgdGhvdWdoLiAgVGhlCitjYWxsZXIgd2l0aG91 dCBjZXJ0YWluIGtleSBjYXBhYmlsaXRpZXMgb3IgbG93ZXIgcHJpdmlsZWdlIHdpbGwgbm90Cith bHdheXMgYmUgYWJsZSB0byBkZWxldGUgZmlsZXMgb3IgZGlyZWN0b3JpZXMsIGNyZWF0ZSBub2Rl cywgb3IKK3NlYXJjaCBzb21lIHJlc3RyaWN0ZWQgZGlyZWN0b3JpZXMuICBUaGUgYWJpbGl0eSB0 byBzZWFyY2ggYW5kIHJlYWQKK2EgZGlyZWN0b3J5IGVudHJ5IGlzIHNwb3R0eSBhcyBhIHJlc3Vs dCBvZiB0aGUgY2FjaGUgbWVjaGFuaXNtIG5vdAorcmV0ZXN0aW5nIHRoZSBjcmVkZW50aWFscyBi ZWNhdXNlIG9mIHRoZSBhc3N1bXB0aW9uLCBhIHByaXZpbGVnZWQKK2NhbGxlciBjYW4gZmlsbCBj YWNoZSwgdGhlbiBhIGxvd2VyIHByaXZpbGVnZSBjYW4gcmVhZCB0aGUgZGlyZWN0b3J5CitjYWNo ZS4gIFRoZSB1bmV2ZW4gc2VjdXJpdHkgbW9kZWwgd2hlcmUgY2FjaGUsIHVwcGVyZGlyIGFuZCB3 b3JrZGlyCithcmUgb3BlbmVkIGF0IHByaXZpbGVnZSwgYnV0IGFjY2Vzc2VkIHdpdGhvdXQgY3Jl YXRpbmcgYSBmb3JtIG9mCitwcml2aWxlZ2UgZXNjYWxhdGlvbiwgc2hvdWxkIG9ubHkgYmUgdXNl ZCB3aXRoIHN0cmljdCB1bmRlcnN0YW5kaW5nCitvZiB0aGUgc2lkZSBlZmZlY3RzIGFuZCBvZiB0 aGUgc2VjdXJpdHkgcG9saWNpZXMuCisKIHdoaXRlb3V0cyBhbmQgb3BhcXVlIGRpcmVjdG9yaWVz CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9mcy9vdmVy bGF5ZnMvY29weV91cC5jIGIvZnMvb3ZlcmxheWZzL2NvcHlfdXAuYwppbmRleCBiODAxYzYzNTMx MDAuLjFjMWI5NDE1ZTUzMyAxMDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL2NvcHlfdXAuYworKysg Yi9mcy9vdmVybGF5ZnMvY29weV91cC5jCkBAIC04ODYsNyArODg2LDcgQEAgaW50IG92bF9jb3B5 X3VwX2ZsYWdzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGZsYWdzKQogCQlkcHV0KHBhcmVu dCk7CiAJCWRwdXQobmV4dCk7CiAJfQotCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CisJb3ZsX3Jl dmVydF9jcmVkcyhkZW50cnktPmRfc2IsIG9sZF9jcmVkKTsKIAogCXJldHVybiBlcnI7CiB9CmRp ZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvZGlyLmMgYi9mcy9vdmVybGF5ZnMvZGlyLmMKaW5kZXgg NzAyYWE2M2Y2Nzc0Li40OWI4ZmZjMTI5NGYgMTAwNjQ0Ci0tLSBhL2ZzL292ZXJsYXlmcy9kaXIu YworKysgYi9mcy9vdmVybGF5ZnMvZGlyLmMKQEAgLTU2Myw3ICs1NjMsOCBAQCBzdGF0aWMgaW50 IG92bF9jcmVhdGVfb3JfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAq aW5vZGUsCiAJCW92ZXJyaWRlX2NyZWQtPmZzZ2lkID0gaW5vZGUtPmlfZ2lkOwogCQlpZiAoIWF0 dHItPmhhcmRsaW5rKSB7CiAJCQllcnIgPSBzZWN1cml0eV9kZW50cnlfY3JlYXRlX2ZpbGVzX2Fz KGRlbnRyeSwKLQkJCQkJYXR0ci0+bW9kZSwgJmRlbnRyeS0+ZF9uYW1lLCBvbGRfY3JlZCwKKwkJ CQkJYXR0ci0+bW9kZSwgJmRlbnRyeS0+ZF9uYW1lLAorCQkJCQlvbGRfY3JlZCA/IG9sZF9jcmVk IDogY3VycmVudF9jcmVkKCksCiAJCQkJCW92ZXJyaWRlX2NyZWQpOwogCQkJaWYgKGVycikgewog CQkJCXB1dF9jcmVkKG92ZXJyaWRlX2NyZWQpOwpAQCAtNTc5LDcgKzU4MCw3IEBAIHN0YXRpYyBp bnQgb3ZsX2NyZWF0ZV9vcl9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2Rl ICppbm9kZSwKIAkJCWVyciA9IG92bF9jcmVhdGVfb3Zlcl93aGl0ZW91dChkZW50cnksIGlub2Rl LCBhdHRyKTsKIAl9CiBvdXRfcmV2ZXJ0X2NyZWRzOgotCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7 CisJb3ZsX3JldmVydF9jcmVkcyhkZW50cnktPmRfc2IsIG9sZF9jcmVkKTsKIAlyZXR1cm4gZXJy OwogfQogCkBAIC02NTUsNyArNjU2LDcgQEAgc3RhdGljIGludCBvdmxfc2V0X2xpbmtfcmVkaXJl Y3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCiAJb2xkX2NyZWQgPSBvdmxfb3ZlcnJpZGVfY3Jl ZHMoZGVudHJ5LT5kX3NiKTsKIAllcnIgPSBvdmxfc2V0X3JlZGlyZWN0KGRlbnRyeSwgZmFsc2Up OwotCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CisJb3ZsX3JldmVydF9jcmVkcyhkZW50cnktPmRf c2IsIG9sZF9jcmVkKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC04NTEsNyArODUyLDcgQEAgc3Rh dGljIGludCBvdmxfZG9fcmVtb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgYm9vbCBpc19kaXIp CiAJCWVyciA9IG92bF9yZW1vdmVfdXBwZXIoZGVudHJ5LCBpc19kaXIsICZsaXN0KTsKIAllbHNl CiAJCWVyciA9IG92bF9yZW1vdmVfYW5kX3doaXRlb3V0KGRlbnRyeSwgJmxpc3QpOwotCXJldmVy dF9jcmVkcyhvbGRfY3JlZCk7CisJb3ZsX3JldmVydF9jcmVkcyhkZW50cnktPmRfc2IsIG9sZF9j cmVkKTsKIAlpZiAoIWVycikgewogCQlpZiAoaXNfZGlyKQogCQkJY2xlYXJfbmxpbmsoZGVudHJ5 LT5kX2lub2RlKTsKQEAgLTEyMjEsNyArMTIyMiw3IEBAIHN0YXRpYyBpbnQgb3ZsX3JlbmFtZShz dHJ1Y3QgaW5vZGUgKm9sZGRpciwgc3RydWN0IGRlbnRyeSAqb2xkLAogb3V0X3VubG9jazoKIAl1 bmxvY2tfcmVuYW1lKG5ld191cHBlcmRpciwgb2xkX3VwcGVyZGlyKTsKIG91dF9yZXZlcnRfY3Jl ZHM6Ci0JcmV2ZXJ0X2NyZWRzKG9sZF9jcmVkKTsKKwlvdmxfcmV2ZXJ0X2NyZWRzKG9sZC0+ZF9z Yiwgb2xkX2NyZWQpOwogCWlmICh1cGRhdGVfbmxpbmspCiAJCW92bF9ubGlua19lbmQobmV3KTsK IG91dF9kcm9wX3dyaXRlOgpkaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL2ZpbGUuYyBiL2ZzL292 ZXJsYXlmcy9maWxlLmMKaW5kZXggZTIzNWE2MzVkOWVjLi5kOTRkNmVjNzg1YTcgMTAwNjQ0Ci0t LSBhL2ZzL292ZXJsYXlmcy9maWxlLmMKKysrIGIvZnMvb3ZlcmxheWZzL2ZpbGUuYwpAQCAtMzIs NyArMzIsNyBAQCBzdGF0aWMgc3RydWN0IGZpbGUgKm92bF9vcGVuX3JlYWxmaWxlKGNvbnN0IHN0 cnVjdCBmaWxlICpmaWxlLAogCW9sZF9jcmVkID0gb3ZsX292ZXJyaWRlX2NyZWRzKGlub2RlLT5p X3NiKTsKIAlyZWFsZmlsZSA9IG9wZW5fd2l0aF9mYWtlX3BhdGgoJmZpbGUtPmZfcGF0aCwgZmxh Z3MsIHJlYWxpbm9kZSwKIAkJCQkgICAgICAgY3VycmVudF9jcmVkKCkpOwotCXJldmVydF9jcmVk cyhvbGRfY3JlZCk7CisJb3ZsX3JldmVydF9jcmVkcyhpbm9kZS0+aV9zYiwgb2xkX2NyZWQpOwog CiAJcHJfZGVidWcoIm9wZW4oJXBbJXBEMi8lY10sIDAlbykgLT4gKCVwLCAwJW8pXG4iLAogCQkg ZmlsZSwgZmlsZSwgb3ZsX3doYXRpc2l0KGlub2RlLCByZWFsaW5vZGUpLCBmaWxlLT5mX2ZsYWdz LApAQCAtMTc2LDcgKzE3Niw3IEBAIHN0YXRpYyBsb2ZmX3Qgb3ZsX2xsc2VlayhzdHJ1Y3QgZmls ZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkKIAogCW9sZF9jcmVkID0gb3ZsX292 ZXJyaWRlX2NyZWRzKGlub2RlLT5pX3NiKTsKIAlyZXQgPSB2ZnNfbGxzZWVrKHJlYWwuZmlsZSwg b2Zmc2V0LCB3aGVuY2UpOwotCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CisJb3ZsX3JldmVydF9j cmVkcyhpbm9kZS0+aV9zYiwgb2xkX2NyZWQpOwogCiAJZmlsZS0+Zl9wb3MgPSByZWFsLmZpbGUt PmZfcG9zOwogCWlub2RlX3VubG9jayhpbm9kZSk7CkBAIC0yNDIsNyArMjQyLDcgQEAgc3RhdGlj IHNzaXplX3Qgb3ZsX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRl ciAqaXRlcikKIAlvbGRfY3JlZCA9IG92bF9vdmVycmlkZV9jcmVkcyhmaWxlX2lub2RlKGZpbGUp LT5pX3NiKTsKIAlyZXQgPSB2ZnNfaXRlcl9yZWFkKHJlYWwuZmlsZSwgaXRlciwgJmlvY2ItPmtp X3BvcywKIAkJCSAgICBvdmxfaW9jYl90b19yd2YoaW9jYikpOwotCXJldmVydF9jcmVkcyhvbGRf Y3JlZCk7CisJb3ZsX3JldmVydF9jcmVkcyhmaWxlX2lub2RlKGZpbGUpLT5pX3NiLCBvbGRfY3Jl ZCk7CiAKIAlvdmxfZmlsZV9hY2Nlc3NlZChmaWxlKTsKIApAQCAtMjc4LDcgKzI3OCw3IEBAIHN0 YXRpYyBzc2l6ZV90IG92bF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlv dl9pdGVyICppdGVyKQogCXJldCA9IHZmc19pdGVyX3dyaXRlKHJlYWwuZmlsZSwgaXRlciwgJmlv Y2ItPmtpX3BvcywKIAkJCSAgICAgb3ZsX2lvY2JfdG9fcndmKGlvY2IpKTsKIAlmaWxlX2VuZF93 cml0ZShyZWFsLmZpbGUpOwotCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CisJb3ZsX3JldmVydF9j cmVkcyhmaWxlX2lub2RlKGZpbGUpLT5pX3NiLCBvbGRfY3JlZCk7CiAKIAkvKiBVcGRhdGUgc2l6 ZSAqLwogCW92bF9jb3B5YXR0cihvdmxfaW5vZGVfcmVhbChpbm9kZSksIGlub2RlKTsKQEAgLTMw NSw3ICszMDUsNyBAQCBzdGF0aWMgaW50IG92bF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9m Zl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCiAJaWYgKGZpbGVfaW5vZGUocmVh bC5maWxlKSA9PSBvdmxfaW5vZGVfdXBwZXIoZmlsZV9pbm9kZShmaWxlKSkpIHsKIAkJb2xkX2Ny ZWQgPSBvdmxfb3ZlcnJpZGVfY3JlZHMoZmlsZV9pbm9kZShmaWxlKS0+aV9zYik7CiAJCXJldCA9 IHZmc19mc3luY19yYW5nZShyZWFsLmZpbGUsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTsKLQkJcmV2 ZXJ0X2NyZWRzKG9sZF9jcmVkKTsKKwkJb3ZsX3JldmVydF9jcmVkcyhmaWxlX2lub2RlKGZpbGUp LT5pX3NiLCBvbGRfY3JlZCk7CiAJfQogCiAJZmRwdXQocmVhbCk7CkBAIC0zMjksNyArMzI5LDcg QEAgc3RhdGljIGludCBvdmxfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEpCiAKIAlvbGRfY3JlZCA9IG92bF9vdmVycmlkZV9jcmVkcyhmaWxlX2lub2Rl KGZpbGUpLT5pX3NiKTsKIAlyZXQgPSBjYWxsX21tYXAodm1hLT52bV9maWxlLCB2bWEpOwotCXJl dmVydF9jcmVkcyhvbGRfY3JlZCk7CisJb3ZsX3JldmVydF9jcmVkcyhmaWxlX2lub2RlKGZpbGUp LT5pX3NiLCBvbGRfY3JlZCk7CiAKIAlpZiAocmV0KSB7CiAJCS8qIERyb3AgcmVmZXJlbmNlIGNv dW50IGZyb20gbmV3IHZtX2ZpbGUgdmFsdWUgKi8KQEAgLTM1Nyw3ICszNTcsNyBAQCBzdGF0aWMg bG9uZyBvdmxfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9m ZnNldCwgbG9mZl90IGxlbgogCiAJb2xkX2NyZWQgPSBvdmxfb3ZlcnJpZGVfY3JlZHMoZmlsZV9p bm9kZShmaWxlKS0+aV9zYik7CiAJcmV0ID0gdmZzX2ZhbGxvY2F0ZShyZWFsLmZpbGUsIG1vZGUs IG9mZnNldCwgbGVuKTsKLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3Jl ZHMoZmlsZV9pbm9kZShmaWxlKS0+aV9zYiwgb2xkX2NyZWQpOwogCiAJLyogVXBkYXRlIHNpemUg Ki8KIAlvdmxfY29weWF0dHIob3ZsX2lub2RlX3JlYWwoaW5vZGUpLCBpbm9kZSk7CkBAIC0zNzks NyArMzc5LDcgQEAgc3RhdGljIGludCBvdmxfZmFkdmlzZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9m Zl90IG9mZnNldCwgbG9mZl90IGxlbiwgaW50IGFkdmljZSkKIAogCW9sZF9jcmVkID0gb3ZsX292 ZXJyaWRlX2NyZWRzKGZpbGVfaW5vZGUoZmlsZSktPmlfc2IpOwogCXJldCA9IHZmc19mYWR2aXNl KHJlYWwuZmlsZSwgb2Zmc2V0LCBsZW4sIGFkdmljZSk7Ci0JcmV2ZXJ0X2NyZWRzKG9sZF9jcmVk KTsKKwlvdmxfcmV2ZXJ0X2NyZWRzKGZpbGVfaW5vZGUoZmlsZSktPmlfc2IsIG9sZF9jcmVkKTsK IAogCWZkcHV0KHJlYWwpOwogCkBAIC0zOTksNyArMzk5LDcgQEAgc3RhdGljIGxvbmcgb3ZsX3Jl YWxfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAKIAlvbGRfY3Jl ZCA9IG92bF9vdmVycmlkZV9jcmVkcyhmaWxlX2lub2RlKGZpbGUpLT5pX3NiKTsKIAlyZXQgPSB2 ZnNfaW9jdGwocmVhbC5maWxlLCBjbWQsIGFyZyk7Ci0JcmV2ZXJ0X2NyZWRzKG9sZF9jcmVkKTsK KwlvdmxfcmV2ZXJ0X2NyZWRzKGZpbGVfaW5vZGUoZmlsZSktPmlfc2IsIG9sZF9jcmVkKTsKIAog CWZkcHV0KHJlYWwpOwogCkBAIC01ODksNyArNTg5LDcgQEAgc3RhdGljIGxvZmZfdCBvdmxfY29w eWZpbGUoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sCiAJCQkJCQlmbGFncyk7 CiAJCWJyZWFrOwogCX0KLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3Jl ZHMoZmlsZV9pbm9kZShmaWxlX291dCktPmlfc2IsIG9sZF9jcmVkKTsKIAogCS8qIFVwZGF0ZSBz aXplICovCiAJb3ZsX2NvcHlhdHRyKG92bF9pbm9kZV9yZWFsKGlub2RlX291dCksIGlub2RlX291 dCk7CmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvaW5vZGUuYyBiL2ZzL292ZXJsYXlmcy9pbm9k ZS5jCmluZGV4IDFiZjExYWU0NDMxMy4uZmMxODI4YWEzMGVkIDEwMDY0NAotLS0gYS9mcy9vdmVy bGF5ZnMvaW5vZGUuYworKysgYi9mcy9vdmVybGF5ZnMvaW5vZGUuYwpAQCAtNjEsNyArNjEsNyBA QCBpbnQgb3ZsX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0 dHIpCiAJCWlub2RlX2xvY2sodXBwZXJkZW50cnktPmRfaW5vZGUpOwogCQlvbGRfY3JlZCA9IG92 bF9vdmVycmlkZV9jcmVkcyhkZW50cnktPmRfc2IpOwogCQllcnIgPSBub3RpZnlfY2hhbmdlKHVw cGVyZGVudHJ5LCBhdHRyLCBOVUxMKTsKLQkJcmV2ZXJ0X2NyZWRzKG9sZF9jcmVkKTsKKwkJb3Zs X3JldmVydF9jcmVkcyhkZW50cnktPmRfc2IsIG9sZF9jcmVkKTsKIAkJaWYgKCFlcnIpCiAJCQlv dmxfY29weWF0dHIodXBwZXJkZW50cnktPmRfaW5vZGUsIGRlbnRyeS0+ZF9pbm9kZSk7CiAJCWlu b2RlX3VubG9jayh1cHBlcmRlbnRyeS0+ZF9pbm9kZSk7CkBAIC0yNTcsNyArMjU3LDcgQEAgaW50 IG92bF9nZXRhdHRyKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQs CiAJCXN0YXQtPm5saW5rID0gZGVudHJ5LT5kX2lub2RlLT5pX25saW5rOwogCiBvdXQ6Ci0JcmV2 ZXJ0X2NyZWRzKG9sZF9jcmVkKTsKKwlvdmxfcmV2ZXJ0X2NyZWRzKGRlbnRyeS0+ZF9zYiwgb2xk X2NyZWQpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTI5MSw3ICsyOTEsNyBAQCBpbnQgb3ZsX3Bl cm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiAJCW1hc2sgfD0gTUFZX1JF QUQ7CiAJfQogCWVyciA9IGlub2RlX3Blcm1pc3Npb24ocmVhbGlub2RlLCBtYXNrKTsKLQlyZXZl cnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3JlZHMoaW5vZGUtPmlfc2IsIG9sZF9j cmVkKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0zMDgsNyArMzA4LDcgQEAgc3RhdGljIGNvbnN0 IGNoYXIgKm92bF9nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAKIAlvbGRfY3JlZCA9 IG92bF9vdmVycmlkZV9jcmVkcyhkZW50cnktPmRfc2IpOwogCXAgPSB2ZnNfZ2V0X2xpbmsob3Zs X2RlbnRyeV9yZWFsKGRlbnRyeSksIGRvbmUpOwotCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CisJ b3ZsX3JldmVydF9jcmVkcyhkZW50cnktPmRfc2IsIG9sZF9jcmVkKTsKIAlyZXR1cm4gcDsKIH0K IApAQCAtMzUxLDcgKzM1MSw3IEBAIGludCBvdmxfeGF0dHJfc2V0KHN0cnVjdCBkZW50cnkgKmRl bnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKIAkJV0FSTl9PTihm bGFncyAhPSBYQVRUUl9SRVBMQUNFKTsKIAkJZXJyID0gdmZzX3JlbW92ZXhhdHRyKHJlYWxkZW50 cnksIG5hbWUpOwogCX0KLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3Jl ZHMoZGVudHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAKIAkvKiBjb3B5IGMvbXRpbWUgKi8KIAlvdmxf Y29weWF0dHIoZF9pbm9kZShyZWFsZGVudHJ5KSwgaW5vZGUpOwpAQCAtMzczLDcgKzM3Myw3IEBA IGludCBvdmxfeGF0dHJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICpp bm9kZSwgY29uc3QgY2hhciAqbmFtZSwKIAlvbGRfY3JlZCA9IG92bF9vdmVycmlkZV9jcmVkcyhk ZW50cnktPmRfc2IpOwogCXJlcyA9IF9fdmZzX2dldHhhdHRyKHJlYWxkZW50cnksIGRfaW5vZGUo cmVhbGRlbnRyeSksIG5hbWUsCiAJCQkgICAgIHZhbHVlLCBzaXplLCBmbGFncyk7Ci0JcmV2ZXJ0 X2NyZWRzKG9sZF9jcmVkKTsKKwlvdmxfcmV2ZXJ0X2NyZWRzKGRlbnRyeS0+ZF9zYiwgb2xkX2Ny ZWQpOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTM5Nyw3ICszOTcsNyBAQCBzc2l6ZV90IG92bF9s aXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpsaXN0LCBzaXplX3Qgc2l6ZSkK IAogCW9sZF9jcmVkID0gb3ZsX292ZXJyaWRlX2NyZWRzKGRlbnRyeS0+ZF9zYik7CiAJcmVzID0g dmZzX2xpc3R4YXR0cihyZWFsZGVudHJ5LCBsaXN0LCBzaXplKTsKLQlyZXZlcnRfY3JlZHMob2xk X2NyZWQpOworCW92bF9yZXZlcnRfY3JlZHMoZGVudHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAJaWYg KHJlcyA8PSAwIHx8IHNpemUgPT0gMCkKIAkJcmV0dXJuIHJlczsKIApAQCAtNDMyLDcgKzQzMiw3 IEBAIHN0cnVjdCBwb3NpeF9hY2wgKm92bF9nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGlu dCB0eXBlKQogCiAJb2xkX2NyZWQgPSBvdmxfb3ZlcnJpZGVfY3JlZHMoaW5vZGUtPmlfc2IpOwog CWFjbCA9IGdldF9hY2wocmVhbGlub2RlLCB0eXBlKTsKLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQp OworCW92bF9yZXZlcnRfY3JlZHMoaW5vZGUtPmlfc2IsIG9sZF9jcmVkKTsKIAogCXJldHVybiBh Y2w7CiB9CkBAIC00NzAsNyArNDcwLDcgQEAgc3RhdGljIGludCBvdmxfZmllbWFwKHN0cnVjdCBp bm9kZSAqaW5vZGUsIHN0cnVjdCBmaWVtYXBfZXh0ZW50X2luZm8gKmZpZWluZm8sCiAJCWZpbGVt YXBfd3JpdGVfYW5kX3dhaXQocmVhbGlub2RlLT5pX21hcHBpbmcpOwogCiAJZXJyID0gcmVhbGlu b2RlLT5pX29wLT5maWVtYXAocmVhbGlub2RlLCBmaWVpbmZvLCBzdGFydCwgbGVuKTsKLQlyZXZl cnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3JlZHMoaW5vZGUtPmlfc2IsIG9sZF9j cmVkKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvbmFtZWku YyBiL2ZzL292ZXJsYXlmcy9uYW1laS5jCmluZGV4IGE0YTQ1MmM0ODlmYS4uYmFiMWY5N2RjMjAx IDEwMDY0NAotLS0gYS9mcy9vdmVybGF5ZnMvbmFtZWkuYworKysgYi9mcy9vdmVybGF5ZnMvbmFt ZWkuYwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAgc3RydWN0IGRlbnRyeSAqb3ZsX2xvb2t1cChzdHJ1 Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJZ290byBvdXRfZnJlZV9v ZTsKIAl9CiAKLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3JlZHMoZGVu dHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAJaWYgKG9yaWdpbl9wYXRoKSB7CiAJCWRwdXQob3JpZ2lu X3BhdGgtPmRlbnRyeSk7CiAJCWtmcmVlKG9yaWdpbl9wYXRoKTsKQEAgLTExMDYsNyArMTEwNiw3 IEBAIHN0cnVjdCBkZW50cnkgKm92bF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBk ZW50cnkgKmRlbnRyeSwKIAlrZnJlZSh1cHBlcnJlZGlyZWN0KTsKIG91dDoKIAlrZnJlZShkLnJl ZGlyZWN0KTsKLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3JlZHMoZGVu dHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIApAQCAtMTE2 MCw3ICsxMTYwLDcgQEAgYm9vbCBvdmxfbG93ZXJfcG9zaXRpdmUoc3RydWN0IGRlbnRyeSAqZGVu dHJ5KQogCQkJZHB1dCh0aGlzKTsKIAkJfQogCX0KLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQpOwor CW92bF9yZXZlcnRfY3JlZHMoZGVudHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAKIAlyZXR1cm4gcG9z aXRpdmU7CiB9CmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvb3ZlcmxheWZzLmggYi9mcy9vdmVy bGF5ZnMvb3ZlcmxheWZzLmgKaW5kZXggOWQyNmQ4NzU4NTEzLi5hZDFhMTFlN2VjYmQgMTAwNjQ0 Ci0tLSBhL2ZzL292ZXJsYXlmcy9vdmVybGF5ZnMuaAorKysgYi9mcy9vdmVybGF5ZnMvb3Zlcmxh eWZzLmgKQEAgLTIwNSw2ICsyMDUsNyBAQCBpbnQgb3ZsX3dhbnRfd3JpdGUoc3RydWN0IGRlbnRy eSAqZGVudHJ5KTsKIHZvaWQgb3ZsX2Ryb3Bfd3JpdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsK IHN0cnVjdCBkZW50cnkgKm92bF93b3JrZGlyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBjb25z dCBzdHJ1Y3QgY3JlZCAqb3ZsX292ZXJyaWRlX2NyZWRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2Ip Owordm9pZCBvdmxfcmV2ZXJ0X2NyZWRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0 cnVjdCBjcmVkICpvbGRjcmVkKTsKIHNzaXplX3Qgb3ZsX2RvX3Zmc19nZXR4YXR0cihzdHJ1Y3Qg ZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZiwKIAkJCSAgICBzaXpl X3Qgc2l6ZSk7CiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKm92bF9zYW1lX3NiKHN0cnVjdCBzdXBlcl9i bG9jayAqc2IpOwpkaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL292bF9lbnRyeS5oIGIvZnMvb3Zl cmxheWZzL292bF9lbnRyeS5oCmluZGV4IDI4YTJkMTJhMTAyOS4uMjYzN2M1YWFkZjdmIDEwMDY0 NAotLS0gYS9mcy9vdmVybGF5ZnMvb3ZsX2VudHJ5LmgKKysrIGIvZnMvb3ZlcmxheWZzL292bF9l bnRyeS5oCkBAIC0xNyw2ICsxNyw3IEBAIHN0cnVjdCBvdmxfY29uZmlnIHsKIAlib29sIG5mc19l eHBvcnQ7CiAJaW50IHhpbm87CiAJYm9vbCBtZXRhY29weTsKKwlib29sIG92ZXJyaWRlX2NyZWRz OwogfTsKIAogc3RydWN0IG92bF9zYiB7CmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvcmVhZGRp ci5jIGIvZnMvb3ZlcmxheWZzL3JlYWRkaXIuYwppbmRleCA0N2E5MWM5NzMzYTUuLjg3NGExYjNm Zjk5YSAxMDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL3JlYWRkaXIuYworKysgYi9mcy9vdmVybGF5 ZnMvcmVhZGRpci5jCkBAIC0yODYsNyArMjg2LDcgQEAgc3RhdGljIGludCBvdmxfY2hlY2tfd2hp dGVvdXRzKHN0cnVjdCBkZW50cnkgKmRpciwgc3RydWN0IG92bF9yZWFkZGlyX2RhdGEgKnJkZCkK IAkJfQogCQlpbm9kZV91bmxvY2soZGlyLT5kX2lub2RlKTsKIAl9Ci0JcmV2ZXJ0X2NyZWRzKG9s ZF9jcmVkKTsKKwlvdmxfcmV2ZXJ0X2NyZWRzKHJkZC0+ZGVudHJ5LT5kX3NiLCBvbGRfY3JlZCk7 CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtOTE4LDcgKzkxOCw3IEBAIGludCBvdmxfY2hlY2tfZW1w dHlfZGlyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIAog CW9sZF9jcmVkID0gb3ZsX292ZXJyaWRlX2NyZWRzKGRlbnRyeS0+ZF9zYik7CiAJZXJyID0gb3Zs X2Rpcl9yZWFkX21lcmdlZChkZW50cnksIGxpc3QsICZyb290KTsKLQlyZXZlcnRfY3JlZHMob2xk X2NyZWQpOworCW92bF9yZXZlcnRfY3JlZHMoZGVudHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAJaWYg KGVycikKIAkJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL3N1cGVyLmMg Yi9mcy9vdmVybGF5ZnMvc3VwZXIuYwppbmRleCA2ZjA0MWUxZmNlZGEuLjJjMTI3ODQ1MWYzOCAx MDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL3N1cGVyLmMKKysrIGIvZnMvb3ZlcmxheWZzL3N1cGVy LmMKQEAgLTUzLDYgKzUzLDExIEBAIG1vZHVsZV9wYXJhbV9uYW1lZCh4aW5vX2F1dG8sIG92bF94 aW5vX2F1dG9fZGVmLCBib29sLCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoeGlub19hdXRvLAog CQkgIkF1dG8gZW5hYmxlIHhpbm8gZmVhdHVyZSIpOwogCitzdGF0aWMgYm9vbCBfX3JlYWRfbW9z dGx5IG92bF9vdmVycmlkZV9jcmVkc19kZWYgPSB0cnVlOworbW9kdWxlX3BhcmFtX25hbWVkKG92 ZXJyaWRlX2NyZWRzLCBvdmxfb3ZlcnJpZGVfY3JlZHNfZGVmLCBib29sLCAwNjQ0KTsKK01PRFVM RV9QQVJNX0RFU0Mob3ZsX292ZXJyaWRlX2NyZWRzX2RlZiwKKwkJICJVc2UgbW91bnRlcidzIGNy ZWRlbnRpYWxzIGZvciBhY2Nlc3NlcyIpOworCiBzdGF0aWMgdm9pZCBvdmxfZW50cnlfc3RhY2tf ZnJlZShzdHJ1Y3Qgb3ZsX2VudHJ5ICpvZSkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTM2Miw2 ICszNjcsOSBAQCBzdGF0aWMgaW50IG92bF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpt LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJaWYgKG9mcy0+Y29uZmlnLm1ldGFjb3B5ICE9IG92 bF9tZXRhY29weV9kZWYpCiAJCXNlcV9wcmludGYobSwgIixtZXRhY29weT0lcyIsCiAJCQkgICBv ZnMtPmNvbmZpZy5tZXRhY29weSA/ICJvbiIgOiAib2ZmIik7CisJaWYgKG9mcy0+Y29uZmlnLm92 ZXJyaWRlX2NyZWRzICE9IG92bF9vdmVycmlkZV9jcmVkc19kZWYpCisJCXNlcV9zaG93X29wdGlv bihtLCAib3ZlcnJpZGVfY3JlZHMiLAorCQkJCW9mcy0+Y29uZmlnLm92ZXJyaWRlX2NyZWRzID8g Im9uIiA6ICJvZmYiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDAyLDYgKzQxMCw4IEBAIGVudW0g ewogCU9QVF9YSU5PX0FVVE8sCiAJT1BUX01FVEFDT1BZX09OLAogCU9QVF9NRVRBQ09QWV9PRkYs CisJT1BUX09WRVJSSURFX0NSRURTX09OLAorCU9QVF9PVkVSUklERV9DUkVEU19PRkYsCiAJT1BU X0VSUiwKIH07CiAKQEAgLTQyMCw2ICs0MzAsOCBAQCBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVf dCBvdmxfdG9rZW5zID0gewogCXtPUFRfWElOT19BVVRPLAkJCSJ4aW5vPWF1dG8ifSwKIAl7T1BU X01FVEFDT1BZX09OLAkJIm1ldGFjb3B5PW9uIn0sCiAJe09QVF9NRVRBQ09QWV9PRkYsCQkibWV0 YWNvcHk9b2ZmIn0sCisJe09QVF9PVkVSUklERV9DUkVEU19PTiwJCSJvdmVycmlkZV9jcmVkcz1v biJ9LAorCXtPUFRfT1ZFUlJJREVfQ1JFRFNfT0ZGLAkib3ZlcnJpZGVfY3JlZHM9b2ZmIn0sCiAJ e09QVF9FUlIsCQkJTlVMTH0KIH07CiAKQEAgLTQ3OCw2ICs0OTAsNyBAQCBzdGF0aWMgaW50IG92 bF9wYXJzZV9vcHQoY2hhciAqb3B0LCBzdHJ1Y3Qgb3ZsX2NvbmZpZyAqY29uZmlnKQogCWNvbmZp Zy0+cmVkaXJlY3RfbW9kZSA9IGtzdHJkdXAob3ZsX3JlZGlyZWN0X21vZGVfZGVmKCksIEdGUF9L RVJORUwpOwogCWlmICghY29uZmlnLT5yZWRpcmVjdF9tb2RlKQogCQlyZXR1cm4gLUVOT01FTTsK Kwljb25maWctPm92ZXJyaWRlX2NyZWRzID0gb3ZsX292ZXJyaWRlX2NyZWRzX2RlZjsKIAogCXdo aWxlICgocCA9IG92bF9uZXh0X29wdCgmb3B0KSkgIT0gTlVMTCkgewogCQlpbnQgdG9rZW47CkBA IC01NTgsNiArNTcxLDE0IEBAIHN0YXRpYyBpbnQgb3ZsX3BhcnNlX29wdChjaGFyICpvcHQsIHN0 cnVjdCBvdmxfY29uZmlnICpjb25maWcpCiAJCQljb25maWctPm1ldGFjb3B5ID0gZmFsc2U7CiAJ CQlicmVhazsKIAorCQljYXNlIE9QVF9PVkVSUklERV9DUkVEU19PTjoKKwkJCWNvbmZpZy0+b3Zl cnJpZGVfY3JlZHMgPSB0cnVlOworCQkJYnJlYWs7CisKKwkJY2FzZSBPUFRfT1ZFUlJJREVfQ1JF RFNfT0ZGOgorCQkJY29uZmlnLT5vdmVycmlkZV9jcmVkcyA9IGZhbHNlOworCQkJYnJlYWs7CisK IAkJZGVmYXVsdDoKIAkJCXByX2Vycigib3ZlcmxheWZzOiB1bnJlY29nbml6ZWQgbW91bnQgb3B0 aW9uIFwiJXNcIiBvciBtaXNzaW5nIHZhbHVlXG4iLCBwKTsKIAkJCXJldHVybiAtRUlOVkFMOwpA QCAtMTY3NCw3ICsxNjk1LDYgQEAgc3RhdGljIGludCBvdmxfZmlsbF9zdXBlcihzdHJ1Y3Qgc3Vw ZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQogCQkgICAgICAgb3ZsX2RlbnRy eV9sb3dlcihyb290X2RlbnRyeSksIE5VTEwpOwogCiAJc2ItPnNfcm9vdCA9IHJvb3RfZGVudHJ5 OwotCiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlX29lOgpkaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZz L3V0aWwuYyBiL2ZzL292ZXJsYXlmcy91dGlsLmMKaW5kZXggYzU4OGMwZDY2ZDhjLi45ZTk3ZTc4 NWU0NGMgMTAwNjQ0Ci0tLSBhL2ZzL292ZXJsYXlmcy91dGlsLmMKKysrIGIvZnMvb3ZlcmxheWZz L3V0aWwuYwpAQCAtMzcsOSArMzcsMTcgQEAgY29uc3Qgc3RydWN0IGNyZWQgKm92bF9vdmVycmlk ZV9jcmVkcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCBvdmxfZnMgKm9mcyA9 IHNiLT5zX2ZzX2luZm87CiAKKwlpZiAoIW9mcy0+Y29uZmlnLm92ZXJyaWRlX2NyZWRzKQorCQly ZXR1cm4gTlVMTDsKIAlyZXR1cm4gb3ZlcnJpZGVfY3JlZHMob2ZzLT5jcmVhdG9yX2NyZWQpOwog fQogCit2b2lkIG92bF9yZXZlcnRfY3JlZHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qg c3RydWN0IGNyZWQgKm9sZF9jcmVkKQoreworCWlmIChvbGRfY3JlZCkKKwkJcmV2ZXJ0X2NyZWRz KG9sZF9jcmVkKTsKK30KKwogc3NpemVfdCBvdmxfZG9fdmZzX2dldHhhdHRyKHN0cnVjdCBkZW50 cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmLAogCQkJICAgIHNpemVfdCBz aXplKQogewpAQCAtNzk4LDcgKzgwNiw3IEBAIGludCBvdmxfbmxpbmtfc3RhcnQoc3RydWN0IGRl bnRyeSAqZGVudHJ5KQogCSAqIHZhbHVlIHJlbGF0aXZlIHRvIHRoZSB1cHBlciBpbm9kZSBubGlu ayBpbiBhbiB1cHBlciBpbm9kZSB4YXR0ci4KIAkgKi8KIAllcnIgPSBvdmxfc2V0X25saW5rX3Vw cGVyKGRlbnRyeSk7Ci0JcmV2ZXJ0X2NyZWRzKG9sZF9jcmVkKTsKKwlvdmxfcmV2ZXJ0X2NyZWRz KGRlbnRyeS0+ZF9zYiwgb2xkX2NyZWQpOwogCiBvdXQ6CiAJaWYgKGVycikKQEAgLTgxNiw3ICs4 MjQsNyBAQCB2b2lkIG92bF9ubGlua19lbmQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCiAJCW9s ZF9jcmVkID0gb3ZsX292ZXJyaWRlX2NyZWRzKGRlbnRyeS0+ZF9zYik7CiAJCW92bF9jbGVhbnVw X2luZGV4KGRlbnRyeSk7Ci0JCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CisJCW92bF9yZXZlcnRf Y3JlZHMoZGVudHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAJfQogCiAJb3ZsX2lub2RlX3VubG9jayhp bm9kZSk7Ci0tIAoyLjIyLjAuNzcwLmcwZjJjNGEzN2ZkLWdvb2cKCg== 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 38CFDC32751 for ; Wed, 31 Jul 2019 17:22:49 +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 066D020679; Wed, 31 Jul 2019 17:22:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=lists.sourceforge.net header.i=@lists.sourceforge.net header.b="OedOkEdt"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=sourceforge.net header.i=@sourceforge.net header.b="C26a9Bkz"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=sf.net header.i=@sf.net header.b="Erylo3XU"; dkim=neutral (0-bit key) header.d=android.com header.i=@android.com header.b="NxNTAM7e" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 066D020679 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=8dGK6Z5UY0qwlz+sfqjsLMMJ0P6MndqCLE0jHPD1668=; b=OedOkEdtYL7XytF2vyaZFlVjV 2uXfrg4p1qv2vVbtwUgR2St/PnL+JgglcG4VtGpfrGfQQMPNAnqI/vOblmoaJwU/KV7yKDYK0NV30 H9Mf9ZKXXOIIGyH/3l7Py3UgLE0mDjGVLJnoD9hM7+kqo69CQj3nlFfLl+btYWNfdgBOo=; Received: from [127.0.0.1] (helo=sfs-ml-4.v29.lw.sourceforge.com) by sfs-ml-4.v29.lw.sourceforge.com with esmtp (Exim 4.90_1) (envelope-from ) id 1hssJM-0007mI-Kw; Wed, 31 Jul 2019 17:22:48 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-4.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1hssJL-0007m4-9U for linux-f2fs-devel@lists.sourceforge.net; Wed, 31 Jul 2019 17:22:47 +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=ddnpbwfJp/Jg1pT3kuq1L6l9gRs3Cs0gd96QxcsmyTc=; b=C26a9BkzsfUUG1Ukb3nGfknuMr 7+X9St9U4r4ji4U2M2D6lY2oZ32dtlNGduCRchjDrqFewkmMaKeFb0ltg74OPhJsb6zeEn3N6e2P/ L907lBsyz6sjSt8mqMol2eWo1gdJLVF+oGdS3LUocaGxdvdxkvWZZu2gywcvVVmT8HIY=; 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=ddnpbwfJp/Jg1pT3kuq1L6l9gRs3Cs0gd96QxcsmyTc=; b=Erylo3XU9SsWAGZS4xVvEAnn1e fRgxgnX9EHt/BTwwyauPvsVm7bNxh9Y+850p05KlpT0EIrrpBQ/G7xFx65wNnXrzLBQkJzpSSrCv4 KaGT+LC/UHNb8LbJDQmxJMFQa6byxpjcMXUzOb8+ETZhz7SwlYndWGZtlwptBWBbJlM8=; Received: from mail-pl1-f193.google.com ([209.85.214.193]) by sfi-mx-4.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.90_1) id 1hssJC-005TpH-A3 for linux-f2fs-devel@lists.sourceforge.net; Wed, 31 Jul 2019 17:22:47 +0000 Received: by mail-pl1-f193.google.com with SMTP id k8so30798389plt.3 for ; Wed, 31 Jul 2019 10:22:38 -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=ddnpbwfJp/Jg1pT3kuq1L6l9gRs3Cs0gd96QxcsmyTc=; b=NxNTAM7ePY8xngcq2yrLiNdxT7CuMygtVKpGXjyTP1843Lxq3fuRcpO356BEw65bML cslir7uf6cvVuCP9q4xsk5uosGElWGirNimNzKrc650HUmz1fcBB61CoIH5xL+D6t+CN lkgiXjR28DexwU9n5MUD3Rjni5SxfQKoEMJtAXxirw4R0yG+pAisAOWmheolYpwp53ID 4zZ50cuVIfn/XOJq39llAkPYw0YtG0AM8a81+qWkiTu+RGung173hM1OoZAbjwJnu0ik UAxNyUzM3oGCOwLas54+/ewVgWOJ+RFTHxNEgnLne0IkbzKnN487Iy0JoBLRQK2Hoy+6 RnyQ== 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=ddnpbwfJp/Jg1pT3kuq1L6l9gRs3Cs0gd96QxcsmyTc=; b=EMz095xKpuu/Idw2x8LhW183aByooGbKrhFyFK2w6FlV1agK8Pj3uS6w53f1n31XCw lAVOCtooBudXEFPzJSYNWsmQXlEvEdnUB0pHf6KFNwlB7dyJKbCBcsduPak9mfFpKPfp VMX9bEbYL+Wr/Ljf3WmW5N7EHqCVcyOXKO7phi6HHQBvtEOBCc6qSI9ZMki4O/KlxBEP oP8UO0iAG4EVm3TlvebjyXnJP3aHXNCKphQlSwZQuayB0xvWDVVpoOMX0TqG1ZZEaIXt qWr86+KBRnBjewkMRdmWLAfHjm2cl/4BLphlSMRlJOYMyszaEhJ7r9uYCdY6YXZBC/Rt /yyg== X-Gm-Message-State: APjAAAWBrkW0DbY1p6Y+lKmNek0/j/GsBjetvUpc00TffqHx9ytVmwc5 dzhXLYpsFoBAQnc2mevihESPJbJeNW14Hg== X-Google-Smtp-Source: APXvYqw/fnityvjNohJ2x3SxdKBfN0+54rDA11lGujd0yUSK2/q6bwTxrbWfMZk+DO1MQPqz4TBhTA== X-Received: by 2002:a17:902:694a:: with SMTP id k10mr120262361plt.255.1564592339473; Wed, 31 Jul 2019 09:58:59 -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.57 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Wed, 31 Jul 2019 09:58:58 -0700 (PDT) To: linux-kernel@vger.kernel.org Date: Wed, 31 Jul 2019 09:58:00 -0700 Message-Id: <20190731165803.4755-6-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: 1hssJC-005TpH-A3 Subject: [f2fs-dev] [PATCH v13 5/5] overlayfs: override_creds=off option bypass creator_cred 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-doc@vger.kernel.org, Martin Brandenburg , samba-technical@lists.samba.org, Dominique Martinet , Amir Goldstein , David Howells , Chris Mason , "David S . Miller" , Andreas Dilger , ocfs2-devel@oss.oracle.com, 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, Vyacheslav Dubeyko , v9fs-developer@lists.sourceforge.net, Ilya Dryomov , linux-ext4@vger.kernel.org, Stephen Smalley , linux-mm@kvack.org, Vivek Goyal , 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 , 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 QnkgZGVmYXVsdCwgYWxsIGFjY2VzcyB0byB0aGUgdXBwZXIsIGxvd2VyIGFuZCB3b3JrIGRpcmVj dG9yaWVzIGlzIHRoZQpyZWNvcmRlZCBtb3VudGVyJ3MgTUFDIGFuZCBEQUMgY3JlZGVudGlhbHMu ICBUaGUgaW5jb21pbmcgYWNjZXNzZXMgYXJlCmNoZWNrZWQgYWdhaW5zdCB0aGUgY2FsbGVyJ3Mg Y3JlZGVudGlhbHMuCgpJZiB0aGUgcHJpbmNpcGxlcyBvZiBsZWFzdCBwcml2aWxlZ2UgYXJlIGFw cGxpZWQsIHRoZSBtb3VudGVyJ3MKY3JlZGVudGlhbHMgbWlnaHQgbm90IG92ZXJsYXAgdGhlIGNy ZWRlbnRpYWxzIG9mIHRoZSBjYWxsZXIncyB3aGVuCmFjY2Vzc2luZyB0aGUgb3ZlcmxheWZzIGZp bGVzeXN0ZW0uICBGb3IgZXhhbXBsZSwgYSBmaWxlIHRoYXQgYSBsb3dlcgpEQUMgcHJpdmlsZWdl ZCBjYWxsZXIgY2FuIGV4ZWN1dGUsIGlzIE1BQyBkZW5pZWQgdG8gdGhlIGdlbmVyYWxseQpoaWdo ZXIgREFDIHByaXZpbGVnZWQgbW91bnRlciwgdG8gcHJldmVudCBhbiBhdHRhY2sgdmVjdG9yLgoK V2UgYWRkIHRoZSBvcHRpb24gdG8gdHVybiBvZmYgb3ZlcnJpZGVfY3JlZHMgaW4gdGhlIG1vdW50 IG9wdGlvbnM7IGFsbApzdWJzZXF1ZW50IG9wZXJhdGlvbnMgYWZ0ZXIgbW91bnQgb24gdGhlIGZp bGVzeXN0ZW0gd2lsbCBiZSBvbmx5IHRoZQpjYWxsZXIncyBjcmVkZW50aWFscy4gIFRoZSBtb2R1 bGUgYm9vbGVhbiBwYXJhbWV0ZXIgYW5kIG1vdW50IG9wdGlvbgpvdmVycmlkZV9jcmVkcyBpcyBh bHNvIGFkZGVkIGFzIGEgcHJlc2VuY2UgY2hlY2sgZm9yIHRoaXMgImZlYXR1cmUiLApleGlzdGVu Y2Ugb2YgL3N5cy9tb2R1bGUvb3ZlcmxheS9wYXJhbWV0ZXJzL292ZXJyaWRlX2NyZWRzLgoKSXQg d2FzIG5vdCBhbHdheXMgdGhpcyB3YXkuICBDaXJjYSA0LjYgdGhlcmUgd2FzIG5vIHJlY29yZGVk IG1vdW50ZXIncwpjcmVkZW50aWFscywgaW5zdGVhZCBwcml2aWxlZ2VkIGFjY2VzcyB0byB1cHBl ciBvciB3b3JrIGRpcmVjdG9yaWVzCndlcmUgdGVtcG9yYXJpbHkgaW5jcmVhc2VkIHRvIHBlcmZv cm0gdGhlIG9wZXJhdGlvbnMuICBUaGUgTUFDCihzZWxpbnV4KSBwb2xpY2llcyB3ZXJlIGNhbGxl cidzIGluIGFsbCBjYXNlcy4gIG92ZXJyaWRlX2NyZWRzPW9mZgpwYXJ0aWFsbHkgcmV0dXJucyB1 cyB0byB0aGlzIG9sZGVyIGFjY2VzcyBtb2RlbCBtaW51cyB0aGUgaW5zZWN1cmUKdGVtcG9yYXJ5 IGNyZWRlbnRpYWwgaW5jcmVhc2VzLiAgVGhpcyBpcyB0byBwZXJtaXQgdXNlIGluIGEgc3lzdGVt CndpdGggbm9uLW92ZXJsYXBwaW5nIHNlY3VyaXR5IG1vZGVscyBmb3IgZWFjaCBleGVjdXRhYmxl IGluY2x1ZGluZwp0aGUgYWdlbnQgdGhhdCBtb3VudHMgdGhlIG92ZXJsYXlmcyBmaWxlc3lzdGVt LiAgSW4gQW5kcm9pZAp0aGlzIGlzIHRoZSBjYXNlIHNpbmNlIGluaXQsIHdoaWNoIHBlcmZvcm1z IHRoZSBtb3VudCBvcGVyYXRpb25zLApoYXMgYSBtaW5pbWFsIE1BQyBzZXQgb2YgcHJpdmlsZWdl cyB0byByZWR1Y2UgYW55IGF0dGFjayBzdXJmYWNlLAphbmQgc2VydmljZXMgdGhhdCB1c2UgdGhl IGNvbnRlbnQgaGF2ZSBhIGRpZmZlcmVudCBzZXQgb2YgTUFDCnByaXZpbGVnZXMgKGVnOiByZWFk LCBmb3IgdmVuZG9yIGxhYmVsbGVkIGNvbmZpZ3VyYXRpb24sIGV4ZWN1dGUgZm9yCnZlbmRvciBs aWJyYXJpZXMgYW5kIG1vZHVsZXMpLiAgVGhlIGNhdmVhdHMgYXJlIG5vdCBhIHByb2JsZW0gaW4K dGhlIEFuZHJvaWQgdXNhZ2UgbW9kZWwsIGhvd2V2ZXIgdGhleSBzaG91bGQgYmUgZml4ZWQgZm9y CmNvbXBsZXRlbmVzcyBhbmQgZm9yIGdlbmVyYWwgdXNlIGluIHRpbWUuCgpTaWduZWQtb2ZmLWJ5 OiBNYXJrIFNhbHl6eW4gPHNhbHl6eW5AYW5kcm9pZC5jb20+CkNjOiBNaWtsb3MgU3plcmVkaSA8 bWlrbG9zQHN6ZXJlZGkuaHU+CkNjOiBKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgpD YzogVml2ZWsgR295YWwgPHZnb3lhbEByZWRoYXQuY29tPgpDYzogRXJpYyBXLiBCaWVkZXJtYW4g PGViaWVkZXJtQHhtaXNzaW9uLmNvbT4KQ2M6IEFtaXIgR29sZHN0ZWluIDxhbWlyNzNpbEBnbWFp bC5jb20+CkNjOiBSYW5keSBEdW5sYXAgPHJkdW5sYXBAaW5mcmFkZWFkLm9yZz4KQ2M6IFN0ZXBo ZW4gU21hbGxleSA8c2RzQHR5Y2hvLm5zYS5nb3Y+CkNjOiBsaW51eC11bmlvbmZzQHZnZXIua2Vy bmVsLm9yZwpDYzogbGludXgtZG9jQHZnZXIua2VybmVsLm9yZwpDYzogbGludXgta2VybmVsQHZn ZXIua2VybmVsLm9yZwpDYzoga2VybmVsLXRlYW1AYW5kcm9pZC5jb20KQ2M6IEVyaWMgVmFuIEhl bnNiZXJnZW4gPGVyaWN2aEBnbWFpbC5jb20+CkNjOiBMYXRjaGVzYXIgSW9ua292IDxsdWNob0Bp b25rb3YubmV0PgpDYzogRG9taW5pcXVlIE1hcnRpbmV0IDxhc21hZGV1c0Bjb2Rld3JlY2sub3Jn PgpDYzogRGF2aWQgSG93ZWxscyA8ZGhvd2VsbHNAcmVkaGF0LmNvbT4KQ2M6IENocmlzIE1hc29u IDxjbG1AZmIuY29tPgpDYzogSm9zZWYgQmFjaWsgPGpvc2VmQHRveGljcGFuZGEuY29tPgpDYzog RGF2aWQgU3RlcmJhIDxkc3RlcmJhQHN1c2UuY29tPgpDYzogSmVmZiBMYXl0b24gPGpsYXl0b25A a2VybmVsLm9yZz4KQ2M6IFNhZ2UgV2VpbCA8c2FnZUByZWRoYXQuY29tPgpDYzogSWx5YSBEcnlv bW92IDxpZHJ5b21vdkBnbWFpbC5jb20+CkNjOiBTdGV2ZSBGcmVuY2ggPHNmcmVuY2hAc2FtYmEu b3JnPgpDYzogVHlsZXIgSGlja3MgPHR5aGlja3NAY2Fub25pY2FsLmNvbT4KQ2M6IEphbiBLYXJh IDxqYWNrQHN1c2UuY29tPgpDYzogVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KQ2M6IEFu ZHJlYXMgRGlsZ2VyIDxhZGlsZ2VyLmtlcm5lbEBkaWxnZXIuY2E+CkNjOiBKYWVnZXVrIEtpbSA8 amFlZ2V1a0BrZXJuZWwub3JnPgpDYzogQ2hhbyBZdSA8eXVjaGFvMEBodWF3ZWkuY29tPgpDYzog Qm9iIFBldGVyc29uIDxycGV0ZXJzb0ByZWRoYXQuY29tPgpDYzogQW5kcmVhcyBHcnVlbmJhY2hl ciA8YWdydWVuYmFAcmVkaGF0LmNvbT4KQ2M6IERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFk ZWFkLm9yZz4KQ2M6IFJpY2hhcmQgV2VpbmJlcmdlciA8cmljaGFyZEBub2QuYXQ+CkNjOiBEYXZl IEtsZWlrYW1wIDxzaGFnZ3lAa2VybmVsLm9yZz4KQ2M6IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3Jl Z2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+CkNjOiBUZWp1biBIZW8gPHRqQGtlcm5lbC5vcmc+CkNj OiBUcm9uZCBNeWtsZWJ1c3QgPHRyb25kLm15a2xlYnVzdEBoYW1tZXJzcGFjZS5jb20+CkNjOiBB bm5hIFNjaHVtYWtlciA8YW5uYS5zY2h1bWFrZXJAbmV0YXBwLmNvbT4KQ2M6IE1hcmsgRmFzaGVo IDxtYXJrQGZhc2hlaC5jb20+CkNjOiBKb2VsIEJlY2tlciA8amxiZWNAZXZpbHBsYW4ub3JnPgpD YzogSm9zZXBoIFFpIDxqb3NlcGgucWlAbGludXguYWxpYmFiYS5jb20+CkNjOiBNaWtlIE1hcnNo YWxsIDxodWJjYXBAb21uaWJvbmQuY29tPgpDYzogTWFydGluIEJyYW5kZW5idXJnIDxtYXJ0aW5A b21uaWJvbmQuY29tPgpDYzogQWxleGFuZGVyIFZpcm8gPHZpcm9AemVuaXYubGludXgub3JnLnVr PgpDYzogUGhpbGxpcCBMb3VnaGVyIDxwaGlsbGlwQHNxdWFzaGZzLm9yZy51az4KQ2M6IERhcnJp Y2sgSi4gV29uZyA8ZGFycmljay53b25nQG9yYWNsZS5jb20+CkNjOiBsaW51eC14ZnNAdmdlci5r ZXJuZWwub3JnCkNjOiBIdWdoIERpY2tpbnMgPGh1Z2hkQGdvb2dsZS5jb20+CkNjOiBEYXZpZCBT LiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CkNjOiBBbmRyZXcgTW9ydG9uIDxha3BtQGxp bnV4LWZvdW5kYXRpb24ub3JnPgpDYzogTWF0aGlldSBNYWxhdGVycmUgPG1hbGF0QGRlYmlhbi5v cmc+CkNjOiBFcm5lc3RvIEEuIEZlcm7DoW5kZXogPGVybmVzdG8ubW5kLmZlcm5hbmRlekBnbWFp bC5jb20+CkNjOiBWeWFjaGVzbGF2IER1YmV5a28gPHNsYXZhQGR1YmV5a28uY29tPgpDYzogdjlm cy1kZXZlbG9wZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CkNjOiBsaW51eC1hZnNAbGlzdHMuaW5m cmFkZWFkLm9yZwpDYzogbGludXgtYnRyZnNAdmdlci5rZXJuZWwub3JnCkNjOiBjZXBoLWRldmVs QHZnZXIua2VybmVsLm9yZwpDYzogbGludXgtY2lmc0B2Z2VyLmtlcm5lbC5vcmcKQ2M6IHNhbWJh LXRlY2huaWNhbEBsaXN0cy5zYW1iYS5vcmcKQ2M6IGVjcnlwdGZzQHZnZXIua2VybmVsLm9yZwpD YzogbGludXgtZXh0NEB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGxpbnV4LWYyZnMtZGV2ZWxAbGlzdHMu c291cmNlZm9yZ2UubmV0CkNjOiBsaW51eC1mc2RldmVsQHZnZXIua2VybmVsLm9yZwpDYzogY2x1 c3Rlci1kZXZlbEByZWRoYXQuY29tCkNjOiBsaW51eC1tdGRAbGlzdHMuaW5mcmFkZWFkLm9yZwpD YzogamZzLWRpc2N1c3Npb25AbGlzdHMuc291cmNlZm9yZ2UubmV0CkNjOiBsaW51eC1uZnNAdmdl ci5rZXJuZWwub3JnCkNjOiBvY2ZzMi1kZXZlbEBvc3Mub3JhY2xlLmNvbQpDYzogZGV2ZWxAbGlz dHMub3JhbmdlZnMub3JnCkNjOiByZWlzZXJmcy1kZXZlbEB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGxp bnV4LW1tQGt2YWNrLm9yZwpDYzogbmV0ZGV2QHZnZXIua2VybmVsLm9yZwpDYzogbGludXgtc2Vj dXJpdHktbW9kdWxlQHZnZXIua2VybmVsLm9yZwpDYzogc3RhYmxlQHZnZXIua2VybmVsLm9yZyAj IDQuNCwgNC45LCA0LjE0ICYgNC4xOSBOQjogdGhpcyBpcyBhIGRlc2lyZWQgZmVhdHVyZQotLS0K djEyICsgdjEzOgotIFJlYmFzZQoKdjExOgotIGFkZCBzYiBhcmd1bWVudCB0byBvdmxfcmV2ZXJ0 X2NyZWRzIHRvIG1hdGNoIGZ1dHVyZSB3b3JrCgp2MTA6Ci0gUmViYXNlIChhbmQgZXhwYW5kIGJl Y2F1c2Ugb2YgaW5jcmVhc2VkIHJldmVydF9jcmVkIHVzYWdlKQoKdjk6Ci0gQWRkIHRvIHRoZSBj YXZlYXRzCgp2ODoKLSBkcm9wIHByX3dhcm4gbWVzc2FnZSBhZnRlciBzdHJhdyBwb2xsIHRvIHJl bW92ZSBpdC4KLSBhZGRlZCBhIHVzZSBjYXNlIGluIHRoZSBjb21taXQgbWVzc2FnZQoKdjc6Ci0g Y2hhbmdlIG5hbWUgb2YgaW50ZXJuYWwgcGFyYW1ldGVyIHRvIG92bF9vdmVycmlkZV9jcmVkc19k ZWYKLSByZXBvcnQgb3ZlcnJpZGVfY3JlZHMgb25seSBpZiBkaWZmZXJlbnQgdGhhbiBkZWZhdWx0 Cgp2NjoKLSBEcm9wIENPTkZJR19PVkVSTEFZX0ZTX09WRVJSSURFX0NSRURTLgotIERvIGJldHRl ciB3aXRoIHRoZSBkb2N1bWVudGF0aW9uLgotIHByX3dhcm4gbWVzc2FnZSBhZGp1c3RlZCB0byBy ZXBvcnQgY29uc2VxdWVuY2VzLgoKdjU6Ci0gYmVlZmVkIHVwIHRoZSBjYXZlYXRzIGluIHRoZSBE b2N1bWVudGF0aW9uCi0gSXMgZGVwZW5kZW50IG9uCiAgIm92ZXJsYXlmczogY2hlY2sgQ0FQX0RB Q19SRUFEX1NFQVJDSCBiZWZvcmUgaXNzdWluZyBleHBvcnRmc19kZWNvZGVfZmgiCiAgIm92ZXJs YXlmczogY2hlY2sgQ0FQX01LTk9EIGJlZm9yZSBpc3N1aW5nIHZmc193aGl0ZW91dCIKLSBBZGRl ZCBwcndhcm4gd2hlbiBvdmVycmlkZV9jcmVkcz1vZmYKCnY0OgotIHNwZWxsaW5nIGFuZCBncmFt bWFyIGVycm9ycyBpbiB0ZXh0Cgp2MzoKLSBDaGFuZ2UgbmFtZSBmcm9tIGNhbGxlcl9jcmVkZW50 aWFscyAvIGNyZWF0b3JfY3JlZGVudGlhbHMgdG8gdGhlCiAgYm9vbGVhbiBvdmVycmlkZV9jcmVk cy4KLSBDaGFuZ2VkIGZyb20gY3JlYXRvciB0byBtb3VudGVyIGNyZWRlbnRpYWxzLgotIFVwZGF0 ZWQgYW5kIGZvcnRpZmllZCB0aGUgZG9jdW1lbnRhdGlvbi4KLSBBZGRlZCBDT05GSUdfT1ZFUkxB WV9GU19PVkVSUklERV9DUkVEUwoKdjI6Ci0gRm9yd2FyZCBwb3J0IGNoYW5nZWQgYXR0ciB0byBz dGF0LCByZXN1bHRpbmcgaW4gYSBidWlsZCBlcnJvci4KLSBhbHRlcmVkIGNvbW1pdCBtZXNzYWdl LgotLS0KIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb3ZlcmxheWZzLnR4dCB8IDIzICsrKysr KysrKysrKysrKysrKysrKysrCiBmcy9vdmVybGF5ZnMvY29weV91cC5jICAgICAgICAgICAgICAg ICAgfCAgMiArLQogZnMvb3ZlcmxheWZzL2Rpci5jICAgICAgICAgICAgICAgICAgICAgIHwgMTEg KysrKysrLS0tLS0KIGZzL292ZXJsYXlmcy9maWxlLmMgICAgICAgICAgICAgICAgICAgICB8IDIw ICsrKysrKysrKystLS0tLS0tLS0tCiBmcy9vdmVybGF5ZnMvaW5vZGUuYyAgICAgICAgICAgICAg ICAgICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KIGZzL292ZXJsYXlmcy9uYW1laS5jICAgICAg ICAgICAgICAgICAgICB8ICA2ICsrKy0tLQogZnMvb3ZlcmxheWZzL292ZXJsYXlmcy5oICAgICAg ICAgICAgICAgIHwgIDEgKwogZnMvb3ZlcmxheWZzL292bF9lbnRyeS5oICAgICAgICAgICAgICAg IHwgIDEgKwogZnMvb3ZlcmxheWZzL3JlYWRkaXIuYyAgICAgICAgICAgICAgICAgIHwgIDQgKyst LQogZnMvb3ZlcmxheWZzL3N1cGVyLmMgICAgICAgICAgICAgICAgICAgIHwgMjIgKysrKysrKysr KysrKysrKysrKysrLQogZnMvb3ZlcmxheWZzL3V0aWwuYyAgICAgICAgICAgICAgICAgICAgIHwg MTIgKysrKysrKysrKy0tCiAxMSBmaWxlcyBjaGFuZ2VkLCA4NyBpbnNlcnRpb25zKCspLCAzMyBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL292ZXJs YXlmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL292ZXJsYXlmcy50eHQKaW5kZXgg MWRhMmYxNjY4ZjA4Li5kNDgxMjUwNzY2MDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmls ZXN5c3RlbXMvb3ZlcmxheWZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL292 ZXJsYXlmcy50eHQKQEAgLTEwMiw2ICsxMDIsMjkgQEAgT25seSB0aGUgbGlzdHMgb2YgbmFtZXMg ZnJvbSBkaXJlY3RvcmllcyBhcmUgbWVyZ2VkLiAgT3RoZXIgY29udGVudAogc3VjaCBhcyBtZXRh ZGF0YSBhbmQgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgcmVwb3J0ZWQgZm9yIHRoZSB1cHBlcgog ZGlyZWN0b3J5IG9ubHkuICBUaGVzZSBhdHRyaWJ1dGVzIG9mIHRoZSBsb3dlciBkaXJlY3Rvcnkg YXJlIGhpZGRlbi4KIAorY3JlZGVudGlhbHMKKy0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQsIGFs bCBhY2Nlc3MgdG8gdGhlIHVwcGVyLCBsb3dlciBhbmQgd29yayBkaXJlY3RvcmllcyBpcyB0aGUK K3JlY29yZGVkIG1vdW50ZXIncyBNQUMgYW5kIERBQyBjcmVkZW50aWFscy4gIFRoZSBpbmNvbWlu ZyBhY2Nlc3NlcyBhcmUKK2NoZWNrZWQgYWdhaW5zdCB0aGUgY2FsbGVyJ3MgY3JlZGVudGlhbHMu CisKK0luIHRoZSBjYXNlIHdoZXJlIGNhbGxlciBNQUMgb3IgREFDIGNyZWRlbnRpYWxzIGRvIG5v dCBvdmVybGFwLCBhCit1c2UgY2FzZSBhdmFpbGFibGUgaW4gb2xkZXIgdmVyc2lvbnMgb2YgdGhl IGRyaXZlciwgdGhlCitvdmVycmlkZV9jcmVkcyBtb3VudCBmbGFnIGNhbiBiZSB0dXJuZWQgb2Zm IGFuZCBoZWxwIHdoZW4gdGhlIHVzZQorcGF0dGVybiBoYXMgY2FsbGVyIHdpdGggbGVnaXRpbWF0 ZSBjcmVkZW50aWFscyB3aGVyZSB0aGUgbW91bnRlcgorZG9lcyBub3QuICBTZXZlcmFsIHVuaW50 ZW5kZWQgc2lkZSBlZmZlY3RzIHdpbGwgb2NjdXIgdGhvdWdoLiAgVGhlCitjYWxsZXIgd2l0aG91 dCBjZXJ0YWluIGtleSBjYXBhYmlsaXRpZXMgb3IgbG93ZXIgcHJpdmlsZWdlIHdpbGwgbm90Cith bHdheXMgYmUgYWJsZSB0byBkZWxldGUgZmlsZXMgb3IgZGlyZWN0b3JpZXMsIGNyZWF0ZSBub2Rl cywgb3IKK3NlYXJjaCBzb21lIHJlc3RyaWN0ZWQgZGlyZWN0b3JpZXMuICBUaGUgYWJpbGl0eSB0 byBzZWFyY2ggYW5kIHJlYWQKK2EgZGlyZWN0b3J5IGVudHJ5IGlzIHNwb3R0eSBhcyBhIHJlc3Vs dCBvZiB0aGUgY2FjaGUgbWVjaGFuaXNtIG5vdAorcmV0ZXN0aW5nIHRoZSBjcmVkZW50aWFscyBi ZWNhdXNlIG9mIHRoZSBhc3N1bXB0aW9uLCBhIHByaXZpbGVnZWQKK2NhbGxlciBjYW4gZmlsbCBj YWNoZSwgdGhlbiBhIGxvd2VyIHByaXZpbGVnZSBjYW4gcmVhZCB0aGUgZGlyZWN0b3J5CitjYWNo ZS4gIFRoZSB1bmV2ZW4gc2VjdXJpdHkgbW9kZWwgd2hlcmUgY2FjaGUsIHVwcGVyZGlyIGFuZCB3 b3JrZGlyCithcmUgb3BlbmVkIGF0IHByaXZpbGVnZSwgYnV0IGFjY2Vzc2VkIHdpdGhvdXQgY3Jl YXRpbmcgYSBmb3JtIG9mCitwcml2aWxlZ2UgZXNjYWxhdGlvbiwgc2hvdWxkIG9ubHkgYmUgdXNl ZCB3aXRoIHN0cmljdCB1bmRlcnN0YW5kaW5nCitvZiB0aGUgc2lkZSBlZmZlY3RzIGFuZCBvZiB0 aGUgc2VjdXJpdHkgcG9saWNpZXMuCisKIHdoaXRlb3V0cyBhbmQgb3BhcXVlIGRpcmVjdG9yaWVz CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9mcy9vdmVy bGF5ZnMvY29weV91cC5jIGIvZnMvb3ZlcmxheWZzL2NvcHlfdXAuYwppbmRleCBiODAxYzYzNTMx MDAuLjFjMWI5NDE1ZTUzMyAxMDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL2NvcHlfdXAuYworKysg Yi9mcy9vdmVybGF5ZnMvY29weV91cC5jCkBAIC04ODYsNyArODg2LDcgQEAgaW50IG92bF9jb3B5 X3VwX2ZsYWdzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGZsYWdzKQogCQlkcHV0KHBhcmVu dCk7CiAJCWRwdXQobmV4dCk7CiAJfQotCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CisJb3ZsX3Jl dmVydF9jcmVkcyhkZW50cnktPmRfc2IsIG9sZF9jcmVkKTsKIAogCXJldHVybiBlcnI7CiB9CmRp ZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvZGlyLmMgYi9mcy9vdmVybGF5ZnMvZGlyLmMKaW5kZXgg NzAyYWE2M2Y2Nzc0Li40OWI4ZmZjMTI5NGYgMTAwNjQ0Ci0tLSBhL2ZzL292ZXJsYXlmcy9kaXIu YworKysgYi9mcy9vdmVybGF5ZnMvZGlyLmMKQEAgLTU2Myw3ICs1NjMsOCBAQCBzdGF0aWMgaW50 IG92bF9jcmVhdGVfb3JfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAq aW5vZGUsCiAJCW92ZXJyaWRlX2NyZWQtPmZzZ2lkID0gaW5vZGUtPmlfZ2lkOwogCQlpZiAoIWF0 dHItPmhhcmRsaW5rKSB7CiAJCQllcnIgPSBzZWN1cml0eV9kZW50cnlfY3JlYXRlX2ZpbGVzX2Fz KGRlbnRyeSwKLQkJCQkJYXR0ci0+bW9kZSwgJmRlbnRyeS0+ZF9uYW1lLCBvbGRfY3JlZCwKKwkJ CQkJYXR0ci0+bW9kZSwgJmRlbnRyeS0+ZF9uYW1lLAorCQkJCQlvbGRfY3JlZCA/IG9sZF9jcmVk IDogY3VycmVudF9jcmVkKCksCiAJCQkJCW92ZXJyaWRlX2NyZWQpOwogCQkJaWYgKGVycikgewog CQkJCXB1dF9jcmVkKG92ZXJyaWRlX2NyZWQpOwpAQCAtNTc5LDcgKzU4MCw3IEBAIHN0YXRpYyBp bnQgb3ZsX2NyZWF0ZV9vcl9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2Rl ICppbm9kZSwKIAkJCWVyciA9IG92bF9jcmVhdGVfb3Zlcl93aGl0ZW91dChkZW50cnksIGlub2Rl LCBhdHRyKTsKIAl9CiBvdXRfcmV2ZXJ0X2NyZWRzOgotCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7 CisJb3ZsX3JldmVydF9jcmVkcyhkZW50cnktPmRfc2IsIG9sZF9jcmVkKTsKIAlyZXR1cm4gZXJy OwogfQogCkBAIC02NTUsNyArNjU2LDcgQEAgc3RhdGljIGludCBvdmxfc2V0X2xpbmtfcmVkaXJl Y3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCiAJb2xkX2NyZWQgPSBvdmxfb3ZlcnJpZGVfY3Jl ZHMoZGVudHJ5LT5kX3NiKTsKIAllcnIgPSBvdmxfc2V0X3JlZGlyZWN0KGRlbnRyeSwgZmFsc2Up OwotCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CisJb3ZsX3JldmVydF9jcmVkcyhkZW50cnktPmRf c2IsIG9sZF9jcmVkKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC04NTEsNyArODUyLDcgQEAgc3Rh dGljIGludCBvdmxfZG9fcmVtb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgYm9vbCBpc19kaXIp CiAJCWVyciA9IG92bF9yZW1vdmVfdXBwZXIoZGVudHJ5LCBpc19kaXIsICZsaXN0KTsKIAllbHNl CiAJCWVyciA9IG92bF9yZW1vdmVfYW5kX3doaXRlb3V0KGRlbnRyeSwgJmxpc3QpOwotCXJldmVy dF9jcmVkcyhvbGRfY3JlZCk7CisJb3ZsX3JldmVydF9jcmVkcyhkZW50cnktPmRfc2IsIG9sZF9j cmVkKTsKIAlpZiAoIWVycikgewogCQlpZiAoaXNfZGlyKQogCQkJY2xlYXJfbmxpbmsoZGVudHJ5 LT5kX2lub2RlKTsKQEAgLTEyMjEsNyArMTIyMiw3IEBAIHN0YXRpYyBpbnQgb3ZsX3JlbmFtZShz dHJ1Y3QgaW5vZGUgKm9sZGRpciwgc3RydWN0IGRlbnRyeSAqb2xkLAogb3V0X3VubG9jazoKIAl1 bmxvY2tfcmVuYW1lKG5ld191cHBlcmRpciwgb2xkX3VwcGVyZGlyKTsKIG91dF9yZXZlcnRfY3Jl ZHM6Ci0JcmV2ZXJ0X2NyZWRzKG9sZF9jcmVkKTsKKwlvdmxfcmV2ZXJ0X2NyZWRzKG9sZC0+ZF9z Yiwgb2xkX2NyZWQpOwogCWlmICh1cGRhdGVfbmxpbmspCiAJCW92bF9ubGlua19lbmQobmV3KTsK IG91dF9kcm9wX3dyaXRlOgpkaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL2ZpbGUuYyBiL2ZzL292 ZXJsYXlmcy9maWxlLmMKaW5kZXggZTIzNWE2MzVkOWVjLi5kOTRkNmVjNzg1YTcgMTAwNjQ0Ci0t LSBhL2ZzL292ZXJsYXlmcy9maWxlLmMKKysrIGIvZnMvb3ZlcmxheWZzL2ZpbGUuYwpAQCAtMzIs NyArMzIsNyBAQCBzdGF0aWMgc3RydWN0IGZpbGUgKm92bF9vcGVuX3JlYWxmaWxlKGNvbnN0IHN0 cnVjdCBmaWxlICpmaWxlLAogCW9sZF9jcmVkID0gb3ZsX292ZXJyaWRlX2NyZWRzKGlub2RlLT5p X3NiKTsKIAlyZWFsZmlsZSA9IG9wZW5fd2l0aF9mYWtlX3BhdGgoJmZpbGUtPmZfcGF0aCwgZmxh Z3MsIHJlYWxpbm9kZSwKIAkJCQkgICAgICAgY3VycmVudF9jcmVkKCkpOwotCXJldmVydF9jcmVk cyhvbGRfY3JlZCk7CisJb3ZsX3JldmVydF9jcmVkcyhpbm9kZS0+aV9zYiwgb2xkX2NyZWQpOwog CiAJcHJfZGVidWcoIm9wZW4oJXBbJXBEMi8lY10sIDAlbykgLT4gKCVwLCAwJW8pXG4iLAogCQkg ZmlsZSwgZmlsZSwgb3ZsX3doYXRpc2l0KGlub2RlLCByZWFsaW5vZGUpLCBmaWxlLT5mX2ZsYWdz LApAQCAtMTc2LDcgKzE3Niw3IEBAIHN0YXRpYyBsb2ZmX3Qgb3ZsX2xsc2VlayhzdHJ1Y3QgZmls ZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkKIAogCW9sZF9jcmVkID0gb3ZsX292 ZXJyaWRlX2NyZWRzKGlub2RlLT5pX3NiKTsKIAlyZXQgPSB2ZnNfbGxzZWVrKHJlYWwuZmlsZSwg b2Zmc2V0LCB3aGVuY2UpOwotCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CisJb3ZsX3JldmVydF9j cmVkcyhpbm9kZS0+aV9zYiwgb2xkX2NyZWQpOwogCiAJZmlsZS0+Zl9wb3MgPSByZWFsLmZpbGUt PmZfcG9zOwogCWlub2RlX3VubG9jayhpbm9kZSk7CkBAIC0yNDIsNyArMjQyLDcgQEAgc3RhdGlj IHNzaXplX3Qgb3ZsX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRl ciAqaXRlcikKIAlvbGRfY3JlZCA9IG92bF9vdmVycmlkZV9jcmVkcyhmaWxlX2lub2RlKGZpbGUp LT5pX3NiKTsKIAlyZXQgPSB2ZnNfaXRlcl9yZWFkKHJlYWwuZmlsZSwgaXRlciwgJmlvY2ItPmtp X3BvcywKIAkJCSAgICBvdmxfaW9jYl90b19yd2YoaW9jYikpOwotCXJldmVydF9jcmVkcyhvbGRf Y3JlZCk7CisJb3ZsX3JldmVydF9jcmVkcyhmaWxlX2lub2RlKGZpbGUpLT5pX3NiLCBvbGRfY3Jl ZCk7CiAKIAlvdmxfZmlsZV9hY2Nlc3NlZChmaWxlKTsKIApAQCAtMjc4LDcgKzI3OCw3IEBAIHN0 YXRpYyBzc2l6ZV90IG92bF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlv dl9pdGVyICppdGVyKQogCXJldCA9IHZmc19pdGVyX3dyaXRlKHJlYWwuZmlsZSwgaXRlciwgJmlv Y2ItPmtpX3BvcywKIAkJCSAgICAgb3ZsX2lvY2JfdG9fcndmKGlvY2IpKTsKIAlmaWxlX2VuZF93 cml0ZShyZWFsLmZpbGUpOwotCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CisJb3ZsX3JldmVydF9j cmVkcyhmaWxlX2lub2RlKGZpbGUpLT5pX3NiLCBvbGRfY3JlZCk7CiAKIAkvKiBVcGRhdGUgc2l6 ZSAqLwogCW92bF9jb3B5YXR0cihvdmxfaW5vZGVfcmVhbChpbm9kZSksIGlub2RlKTsKQEAgLTMw NSw3ICszMDUsNyBAQCBzdGF0aWMgaW50IG92bF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9m Zl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCiAJaWYgKGZpbGVfaW5vZGUocmVh bC5maWxlKSA9PSBvdmxfaW5vZGVfdXBwZXIoZmlsZV9pbm9kZShmaWxlKSkpIHsKIAkJb2xkX2Ny ZWQgPSBvdmxfb3ZlcnJpZGVfY3JlZHMoZmlsZV9pbm9kZShmaWxlKS0+aV9zYik7CiAJCXJldCA9 IHZmc19mc3luY19yYW5nZShyZWFsLmZpbGUsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTsKLQkJcmV2 ZXJ0X2NyZWRzKG9sZF9jcmVkKTsKKwkJb3ZsX3JldmVydF9jcmVkcyhmaWxlX2lub2RlKGZpbGUp LT5pX3NiLCBvbGRfY3JlZCk7CiAJfQogCiAJZmRwdXQocmVhbCk7CkBAIC0zMjksNyArMzI5LDcg QEAgc3RhdGljIGludCBvdmxfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEpCiAKIAlvbGRfY3JlZCA9IG92bF9vdmVycmlkZV9jcmVkcyhmaWxlX2lub2Rl KGZpbGUpLT5pX3NiKTsKIAlyZXQgPSBjYWxsX21tYXAodm1hLT52bV9maWxlLCB2bWEpOwotCXJl dmVydF9jcmVkcyhvbGRfY3JlZCk7CisJb3ZsX3JldmVydF9jcmVkcyhmaWxlX2lub2RlKGZpbGUp LT5pX3NiLCBvbGRfY3JlZCk7CiAKIAlpZiAocmV0KSB7CiAJCS8qIERyb3AgcmVmZXJlbmNlIGNv dW50IGZyb20gbmV3IHZtX2ZpbGUgdmFsdWUgKi8KQEAgLTM1Nyw3ICszNTcsNyBAQCBzdGF0aWMg bG9uZyBvdmxfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9m ZnNldCwgbG9mZl90IGxlbgogCiAJb2xkX2NyZWQgPSBvdmxfb3ZlcnJpZGVfY3JlZHMoZmlsZV9p bm9kZShmaWxlKS0+aV9zYik7CiAJcmV0ID0gdmZzX2ZhbGxvY2F0ZShyZWFsLmZpbGUsIG1vZGUs IG9mZnNldCwgbGVuKTsKLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3Jl ZHMoZmlsZV9pbm9kZShmaWxlKS0+aV9zYiwgb2xkX2NyZWQpOwogCiAJLyogVXBkYXRlIHNpemUg Ki8KIAlvdmxfY29weWF0dHIob3ZsX2lub2RlX3JlYWwoaW5vZGUpLCBpbm9kZSk7CkBAIC0zNzks NyArMzc5LDcgQEAgc3RhdGljIGludCBvdmxfZmFkdmlzZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9m Zl90IG9mZnNldCwgbG9mZl90IGxlbiwgaW50IGFkdmljZSkKIAogCW9sZF9jcmVkID0gb3ZsX292 ZXJyaWRlX2NyZWRzKGZpbGVfaW5vZGUoZmlsZSktPmlfc2IpOwogCXJldCA9IHZmc19mYWR2aXNl KHJlYWwuZmlsZSwgb2Zmc2V0LCBsZW4sIGFkdmljZSk7Ci0JcmV2ZXJ0X2NyZWRzKG9sZF9jcmVk KTsKKwlvdmxfcmV2ZXJ0X2NyZWRzKGZpbGVfaW5vZGUoZmlsZSktPmlfc2IsIG9sZF9jcmVkKTsK IAogCWZkcHV0KHJlYWwpOwogCkBAIC0zOTksNyArMzk5LDcgQEAgc3RhdGljIGxvbmcgb3ZsX3Jl YWxfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAKIAlvbGRfY3Jl ZCA9IG92bF9vdmVycmlkZV9jcmVkcyhmaWxlX2lub2RlKGZpbGUpLT5pX3NiKTsKIAlyZXQgPSB2 ZnNfaW9jdGwocmVhbC5maWxlLCBjbWQsIGFyZyk7Ci0JcmV2ZXJ0X2NyZWRzKG9sZF9jcmVkKTsK KwlvdmxfcmV2ZXJ0X2NyZWRzKGZpbGVfaW5vZGUoZmlsZSktPmlfc2IsIG9sZF9jcmVkKTsKIAog CWZkcHV0KHJlYWwpOwogCkBAIC01ODksNyArNTg5LDcgQEAgc3RhdGljIGxvZmZfdCBvdmxfY29w eWZpbGUoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sCiAJCQkJCQlmbGFncyk7 CiAJCWJyZWFrOwogCX0KLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3Jl ZHMoZmlsZV9pbm9kZShmaWxlX291dCktPmlfc2IsIG9sZF9jcmVkKTsKIAogCS8qIFVwZGF0ZSBz aXplICovCiAJb3ZsX2NvcHlhdHRyKG92bF9pbm9kZV9yZWFsKGlub2RlX291dCksIGlub2RlX291 dCk7CmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvaW5vZGUuYyBiL2ZzL292ZXJsYXlmcy9pbm9k ZS5jCmluZGV4IDFiZjExYWU0NDMxMy4uZmMxODI4YWEzMGVkIDEwMDY0NAotLS0gYS9mcy9vdmVy bGF5ZnMvaW5vZGUuYworKysgYi9mcy9vdmVybGF5ZnMvaW5vZGUuYwpAQCAtNjEsNyArNjEsNyBA QCBpbnQgb3ZsX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0 dHIpCiAJCWlub2RlX2xvY2sodXBwZXJkZW50cnktPmRfaW5vZGUpOwogCQlvbGRfY3JlZCA9IG92 bF9vdmVycmlkZV9jcmVkcyhkZW50cnktPmRfc2IpOwogCQllcnIgPSBub3RpZnlfY2hhbmdlKHVw cGVyZGVudHJ5LCBhdHRyLCBOVUxMKTsKLQkJcmV2ZXJ0X2NyZWRzKG9sZF9jcmVkKTsKKwkJb3Zs X3JldmVydF9jcmVkcyhkZW50cnktPmRfc2IsIG9sZF9jcmVkKTsKIAkJaWYgKCFlcnIpCiAJCQlv dmxfY29weWF0dHIodXBwZXJkZW50cnktPmRfaW5vZGUsIGRlbnRyeS0+ZF9pbm9kZSk7CiAJCWlu b2RlX3VubG9jayh1cHBlcmRlbnRyeS0+ZF9pbm9kZSk7CkBAIC0yNTcsNyArMjU3LDcgQEAgaW50 IG92bF9nZXRhdHRyKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQs CiAJCXN0YXQtPm5saW5rID0gZGVudHJ5LT5kX2lub2RlLT5pX25saW5rOwogCiBvdXQ6Ci0JcmV2 ZXJ0X2NyZWRzKG9sZF9jcmVkKTsKKwlvdmxfcmV2ZXJ0X2NyZWRzKGRlbnRyeS0+ZF9zYiwgb2xk X2NyZWQpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTI5MSw3ICsyOTEsNyBAQCBpbnQgb3ZsX3Bl cm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiAJCW1hc2sgfD0gTUFZX1JF QUQ7CiAJfQogCWVyciA9IGlub2RlX3Blcm1pc3Npb24ocmVhbGlub2RlLCBtYXNrKTsKLQlyZXZl cnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3JlZHMoaW5vZGUtPmlfc2IsIG9sZF9j cmVkKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0zMDgsNyArMzA4LDcgQEAgc3RhdGljIGNvbnN0 IGNoYXIgKm92bF9nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAKIAlvbGRfY3JlZCA9 IG92bF9vdmVycmlkZV9jcmVkcyhkZW50cnktPmRfc2IpOwogCXAgPSB2ZnNfZ2V0X2xpbmsob3Zs X2RlbnRyeV9yZWFsKGRlbnRyeSksIGRvbmUpOwotCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CisJ b3ZsX3JldmVydF9jcmVkcyhkZW50cnktPmRfc2IsIG9sZF9jcmVkKTsKIAlyZXR1cm4gcDsKIH0K IApAQCAtMzUxLDcgKzM1MSw3IEBAIGludCBvdmxfeGF0dHJfc2V0KHN0cnVjdCBkZW50cnkgKmRl bnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKIAkJV0FSTl9PTihm bGFncyAhPSBYQVRUUl9SRVBMQUNFKTsKIAkJZXJyID0gdmZzX3JlbW92ZXhhdHRyKHJlYWxkZW50 cnksIG5hbWUpOwogCX0KLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3Jl ZHMoZGVudHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAKIAkvKiBjb3B5IGMvbXRpbWUgKi8KIAlvdmxf Y29weWF0dHIoZF9pbm9kZShyZWFsZGVudHJ5KSwgaW5vZGUpOwpAQCAtMzczLDcgKzM3Myw3IEBA IGludCBvdmxfeGF0dHJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICpp bm9kZSwgY29uc3QgY2hhciAqbmFtZSwKIAlvbGRfY3JlZCA9IG92bF9vdmVycmlkZV9jcmVkcyhk ZW50cnktPmRfc2IpOwogCXJlcyA9IF9fdmZzX2dldHhhdHRyKHJlYWxkZW50cnksIGRfaW5vZGUo cmVhbGRlbnRyeSksIG5hbWUsCiAJCQkgICAgIHZhbHVlLCBzaXplLCBmbGFncyk7Ci0JcmV2ZXJ0 X2NyZWRzKG9sZF9jcmVkKTsKKwlvdmxfcmV2ZXJ0X2NyZWRzKGRlbnRyeS0+ZF9zYiwgb2xkX2Ny ZWQpOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTM5Nyw3ICszOTcsNyBAQCBzc2l6ZV90IG92bF9s aXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpsaXN0LCBzaXplX3Qgc2l6ZSkK IAogCW9sZF9jcmVkID0gb3ZsX292ZXJyaWRlX2NyZWRzKGRlbnRyeS0+ZF9zYik7CiAJcmVzID0g dmZzX2xpc3R4YXR0cihyZWFsZGVudHJ5LCBsaXN0LCBzaXplKTsKLQlyZXZlcnRfY3JlZHMob2xk X2NyZWQpOworCW92bF9yZXZlcnRfY3JlZHMoZGVudHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAJaWYg KHJlcyA8PSAwIHx8IHNpemUgPT0gMCkKIAkJcmV0dXJuIHJlczsKIApAQCAtNDMyLDcgKzQzMiw3 IEBAIHN0cnVjdCBwb3NpeF9hY2wgKm92bF9nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGlu dCB0eXBlKQogCiAJb2xkX2NyZWQgPSBvdmxfb3ZlcnJpZGVfY3JlZHMoaW5vZGUtPmlfc2IpOwog CWFjbCA9IGdldF9hY2wocmVhbGlub2RlLCB0eXBlKTsKLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQp OworCW92bF9yZXZlcnRfY3JlZHMoaW5vZGUtPmlfc2IsIG9sZF9jcmVkKTsKIAogCXJldHVybiBh Y2w7CiB9CkBAIC00NzAsNyArNDcwLDcgQEAgc3RhdGljIGludCBvdmxfZmllbWFwKHN0cnVjdCBp bm9kZSAqaW5vZGUsIHN0cnVjdCBmaWVtYXBfZXh0ZW50X2luZm8gKmZpZWluZm8sCiAJCWZpbGVt YXBfd3JpdGVfYW5kX3dhaXQocmVhbGlub2RlLT5pX21hcHBpbmcpOwogCiAJZXJyID0gcmVhbGlu b2RlLT5pX29wLT5maWVtYXAocmVhbGlub2RlLCBmaWVpbmZvLCBzdGFydCwgbGVuKTsKLQlyZXZl cnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3JlZHMoaW5vZGUtPmlfc2IsIG9sZF9j cmVkKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvbmFtZWku YyBiL2ZzL292ZXJsYXlmcy9uYW1laS5jCmluZGV4IGE0YTQ1MmM0ODlmYS4uYmFiMWY5N2RjMjAx IDEwMDY0NAotLS0gYS9mcy9vdmVybGF5ZnMvbmFtZWkuYworKysgYi9mcy9vdmVybGF5ZnMvbmFt ZWkuYwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAgc3RydWN0IGRlbnRyeSAqb3ZsX2xvb2t1cChzdHJ1 Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJZ290byBvdXRfZnJlZV9v ZTsKIAl9CiAKLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3JlZHMoZGVu dHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAJaWYgKG9yaWdpbl9wYXRoKSB7CiAJCWRwdXQob3JpZ2lu X3BhdGgtPmRlbnRyeSk7CiAJCWtmcmVlKG9yaWdpbl9wYXRoKTsKQEAgLTExMDYsNyArMTEwNiw3 IEBAIHN0cnVjdCBkZW50cnkgKm92bF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBk ZW50cnkgKmRlbnRyeSwKIAlrZnJlZSh1cHBlcnJlZGlyZWN0KTsKIG91dDoKIAlrZnJlZShkLnJl ZGlyZWN0KTsKLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3JlZHMoZGVu dHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIApAQCAtMTE2 MCw3ICsxMTYwLDcgQEAgYm9vbCBvdmxfbG93ZXJfcG9zaXRpdmUoc3RydWN0IGRlbnRyeSAqZGVu dHJ5KQogCQkJZHB1dCh0aGlzKTsKIAkJfQogCX0KLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQpOwor CW92bF9yZXZlcnRfY3JlZHMoZGVudHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAKIAlyZXR1cm4gcG9z aXRpdmU7CiB9CmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvb3ZlcmxheWZzLmggYi9mcy9vdmVy bGF5ZnMvb3ZlcmxheWZzLmgKaW5kZXggOWQyNmQ4NzU4NTEzLi5hZDFhMTFlN2VjYmQgMTAwNjQ0 Ci0tLSBhL2ZzL292ZXJsYXlmcy9vdmVybGF5ZnMuaAorKysgYi9mcy9vdmVybGF5ZnMvb3Zlcmxh eWZzLmgKQEAgLTIwNSw2ICsyMDUsNyBAQCBpbnQgb3ZsX3dhbnRfd3JpdGUoc3RydWN0IGRlbnRy eSAqZGVudHJ5KTsKIHZvaWQgb3ZsX2Ryb3Bfd3JpdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsK IHN0cnVjdCBkZW50cnkgKm92bF93b3JrZGlyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBjb25z dCBzdHJ1Y3QgY3JlZCAqb3ZsX292ZXJyaWRlX2NyZWRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2Ip Owordm9pZCBvdmxfcmV2ZXJ0X2NyZWRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0 cnVjdCBjcmVkICpvbGRjcmVkKTsKIHNzaXplX3Qgb3ZsX2RvX3Zmc19nZXR4YXR0cihzdHJ1Y3Qg ZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZiwKIAkJCSAgICBzaXpl X3Qgc2l6ZSk7CiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKm92bF9zYW1lX3NiKHN0cnVjdCBzdXBlcl9i bG9jayAqc2IpOwpkaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL292bF9lbnRyeS5oIGIvZnMvb3Zl cmxheWZzL292bF9lbnRyeS5oCmluZGV4IDI4YTJkMTJhMTAyOS4uMjYzN2M1YWFkZjdmIDEwMDY0 NAotLS0gYS9mcy9vdmVybGF5ZnMvb3ZsX2VudHJ5LmgKKysrIGIvZnMvb3ZlcmxheWZzL292bF9l bnRyeS5oCkBAIC0xNyw2ICsxNyw3IEBAIHN0cnVjdCBvdmxfY29uZmlnIHsKIAlib29sIG5mc19l eHBvcnQ7CiAJaW50IHhpbm87CiAJYm9vbCBtZXRhY29weTsKKwlib29sIG92ZXJyaWRlX2NyZWRz OwogfTsKIAogc3RydWN0IG92bF9zYiB7CmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvcmVhZGRp ci5jIGIvZnMvb3ZlcmxheWZzL3JlYWRkaXIuYwppbmRleCA0N2E5MWM5NzMzYTUuLjg3NGExYjNm Zjk5YSAxMDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL3JlYWRkaXIuYworKysgYi9mcy9vdmVybGF5 ZnMvcmVhZGRpci5jCkBAIC0yODYsNyArMjg2LDcgQEAgc3RhdGljIGludCBvdmxfY2hlY2tfd2hp dGVvdXRzKHN0cnVjdCBkZW50cnkgKmRpciwgc3RydWN0IG92bF9yZWFkZGlyX2RhdGEgKnJkZCkK IAkJfQogCQlpbm9kZV91bmxvY2soZGlyLT5kX2lub2RlKTsKIAl9Ci0JcmV2ZXJ0X2NyZWRzKG9s ZF9jcmVkKTsKKwlvdmxfcmV2ZXJ0X2NyZWRzKHJkZC0+ZGVudHJ5LT5kX3NiLCBvbGRfY3JlZCk7 CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtOTE4LDcgKzkxOCw3IEBAIGludCBvdmxfY2hlY2tfZW1w dHlfZGlyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIAog CW9sZF9jcmVkID0gb3ZsX292ZXJyaWRlX2NyZWRzKGRlbnRyeS0+ZF9zYik7CiAJZXJyID0gb3Zs X2Rpcl9yZWFkX21lcmdlZChkZW50cnksIGxpc3QsICZyb290KTsKLQlyZXZlcnRfY3JlZHMob2xk X2NyZWQpOworCW92bF9yZXZlcnRfY3JlZHMoZGVudHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAJaWYg KGVycikKIAkJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL3N1cGVyLmMg Yi9mcy9vdmVybGF5ZnMvc3VwZXIuYwppbmRleCA2ZjA0MWUxZmNlZGEuLjJjMTI3ODQ1MWYzOCAx MDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL3N1cGVyLmMKKysrIGIvZnMvb3ZlcmxheWZzL3N1cGVy LmMKQEAgLTUzLDYgKzUzLDExIEBAIG1vZHVsZV9wYXJhbV9uYW1lZCh4aW5vX2F1dG8sIG92bF94 aW5vX2F1dG9fZGVmLCBib29sLCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoeGlub19hdXRvLAog CQkgIkF1dG8gZW5hYmxlIHhpbm8gZmVhdHVyZSIpOwogCitzdGF0aWMgYm9vbCBfX3JlYWRfbW9z dGx5IG92bF9vdmVycmlkZV9jcmVkc19kZWYgPSB0cnVlOworbW9kdWxlX3BhcmFtX25hbWVkKG92 ZXJyaWRlX2NyZWRzLCBvdmxfb3ZlcnJpZGVfY3JlZHNfZGVmLCBib29sLCAwNjQ0KTsKK01PRFVM RV9QQVJNX0RFU0Mob3ZsX292ZXJyaWRlX2NyZWRzX2RlZiwKKwkJICJVc2UgbW91bnRlcidzIGNy ZWRlbnRpYWxzIGZvciBhY2Nlc3NlcyIpOworCiBzdGF0aWMgdm9pZCBvdmxfZW50cnlfc3RhY2tf ZnJlZShzdHJ1Y3Qgb3ZsX2VudHJ5ICpvZSkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTM2Miw2 ICszNjcsOSBAQCBzdGF0aWMgaW50IG92bF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpt LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJaWYgKG9mcy0+Y29uZmlnLm1ldGFjb3B5ICE9IG92 bF9tZXRhY29weV9kZWYpCiAJCXNlcV9wcmludGYobSwgIixtZXRhY29weT0lcyIsCiAJCQkgICBv ZnMtPmNvbmZpZy5tZXRhY29weSA/ICJvbiIgOiAib2ZmIik7CisJaWYgKG9mcy0+Y29uZmlnLm92 ZXJyaWRlX2NyZWRzICE9IG92bF9vdmVycmlkZV9jcmVkc19kZWYpCisJCXNlcV9zaG93X29wdGlv bihtLCAib3ZlcnJpZGVfY3JlZHMiLAorCQkJCW9mcy0+Y29uZmlnLm92ZXJyaWRlX2NyZWRzID8g Im9uIiA6ICJvZmYiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDAyLDYgKzQxMCw4IEBAIGVudW0g ewogCU9QVF9YSU5PX0FVVE8sCiAJT1BUX01FVEFDT1BZX09OLAogCU9QVF9NRVRBQ09QWV9PRkYs CisJT1BUX09WRVJSSURFX0NSRURTX09OLAorCU9QVF9PVkVSUklERV9DUkVEU19PRkYsCiAJT1BU X0VSUiwKIH07CiAKQEAgLTQyMCw2ICs0MzAsOCBAQCBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVf dCBvdmxfdG9rZW5zID0gewogCXtPUFRfWElOT19BVVRPLAkJCSJ4aW5vPWF1dG8ifSwKIAl7T1BU X01FVEFDT1BZX09OLAkJIm1ldGFjb3B5PW9uIn0sCiAJe09QVF9NRVRBQ09QWV9PRkYsCQkibWV0 YWNvcHk9b2ZmIn0sCisJe09QVF9PVkVSUklERV9DUkVEU19PTiwJCSJvdmVycmlkZV9jcmVkcz1v biJ9LAorCXtPUFRfT1ZFUlJJREVfQ1JFRFNfT0ZGLAkib3ZlcnJpZGVfY3JlZHM9b2ZmIn0sCiAJ e09QVF9FUlIsCQkJTlVMTH0KIH07CiAKQEAgLTQ3OCw2ICs0OTAsNyBAQCBzdGF0aWMgaW50IG92 bF9wYXJzZV9vcHQoY2hhciAqb3B0LCBzdHJ1Y3Qgb3ZsX2NvbmZpZyAqY29uZmlnKQogCWNvbmZp Zy0+cmVkaXJlY3RfbW9kZSA9IGtzdHJkdXAob3ZsX3JlZGlyZWN0X21vZGVfZGVmKCksIEdGUF9L RVJORUwpOwogCWlmICghY29uZmlnLT5yZWRpcmVjdF9tb2RlKQogCQlyZXR1cm4gLUVOT01FTTsK Kwljb25maWctPm92ZXJyaWRlX2NyZWRzID0gb3ZsX292ZXJyaWRlX2NyZWRzX2RlZjsKIAogCXdo aWxlICgocCA9IG92bF9uZXh0X29wdCgmb3B0KSkgIT0gTlVMTCkgewogCQlpbnQgdG9rZW47CkBA IC01NTgsNiArNTcxLDE0IEBAIHN0YXRpYyBpbnQgb3ZsX3BhcnNlX29wdChjaGFyICpvcHQsIHN0 cnVjdCBvdmxfY29uZmlnICpjb25maWcpCiAJCQljb25maWctPm1ldGFjb3B5ID0gZmFsc2U7CiAJ CQlicmVhazsKIAorCQljYXNlIE9QVF9PVkVSUklERV9DUkVEU19PTjoKKwkJCWNvbmZpZy0+b3Zl cnJpZGVfY3JlZHMgPSB0cnVlOworCQkJYnJlYWs7CisKKwkJY2FzZSBPUFRfT1ZFUlJJREVfQ1JF RFNfT0ZGOgorCQkJY29uZmlnLT5vdmVycmlkZV9jcmVkcyA9IGZhbHNlOworCQkJYnJlYWs7CisK IAkJZGVmYXVsdDoKIAkJCXByX2Vycigib3ZlcmxheWZzOiB1bnJlY29nbml6ZWQgbW91bnQgb3B0 aW9uIFwiJXNcIiBvciBtaXNzaW5nIHZhbHVlXG4iLCBwKTsKIAkJCXJldHVybiAtRUlOVkFMOwpA QCAtMTY3NCw3ICsxNjk1LDYgQEAgc3RhdGljIGludCBvdmxfZmlsbF9zdXBlcihzdHJ1Y3Qgc3Vw ZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQogCQkgICAgICAgb3ZsX2RlbnRy eV9sb3dlcihyb290X2RlbnRyeSksIE5VTEwpOwogCiAJc2ItPnNfcm9vdCA9IHJvb3RfZGVudHJ5 OwotCiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlX29lOgpkaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZz L3V0aWwuYyBiL2ZzL292ZXJsYXlmcy91dGlsLmMKaW5kZXggYzU4OGMwZDY2ZDhjLi45ZTk3ZTc4 NWU0NGMgMTAwNjQ0Ci0tLSBhL2ZzL292ZXJsYXlmcy91dGlsLmMKKysrIGIvZnMvb3ZlcmxheWZz L3V0aWwuYwpAQCAtMzcsOSArMzcsMTcgQEAgY29uc3Qgc3RydWN0IGNyZWQgKm92bF9vdmVycmlk ZV9jcmVkcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCBvdmxfZnMgKm9mcyA9 IHNiLT5zX2ZzX2luZm87CiAKKwlpZiAoIW9mcy0+Y29uZmlnLm92ZXJyaWRlX2NyZWRzKQorCQly ZXR1cm4gTlVMTDsKIAlyZXR1cm4gb3ZlcnJpZGVfY3JlZHMob2ZzLT5jcmVhdG9yX2NyZWQpOwog fQogCit2b2lkIG92bF9yZXZlcnRfY3JlZHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qg c3RydWN0IGNyZWQgKm9sZF9jcmVkKQoreworCWlmIChvbGRfY3JlZCkKKwkJcmV2ZXJ0X2NyZWRz KG9sZF9jcmVkKTsKK30KKwogc3NpemVfdCBvdmxfZG9fdmZzX2dldHhhdHRyKHN0cnVjdCBkZW50 cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmLAogCQkJICAgIHNpemVfdCBz aXplKQogewpAQCAtNzk4LDcgKzgwNiw3IEBAIGludCBvdmxfbmxpbmtfc3RhcnQoc3RydWN0IGRl bnRyeSAqZGVudHJ5KQogCSAqIHZhbHVlIHJlbGF0aXZlIHRvIHRoZSB1cHBlciBpbm9kZSBubGlu ayBpbiBhbiB1cHBlciBpbm9kZSB4YXR0ci4KIAkgKi8KIAllcnIgPSBvdmxfc2V0X25saW5rX3Vw cGVyKGRlbnRyeSk7Ci0JcmV2ZXJ0X2NyZWRzKG9sZF9jcmVkKTsKKwlvdmxfcmV2ZXJ0X2NyZWRz KGRlbnRyeS0+ZF9zYiwgb2xkX2NyZWQpOwogCiBvdXQ6CiAJaWYgKGVycikKQEAgLTgxNiw3ICs4 MjQsNyBAQCB2b2lkIG92bF9ubGlua19lbmQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCiAJCW9s ZF9jcmVkID0gb3ZsX292ZXJyaWRlX2NyZWRzKGRlbnRyeS0+ZF9zYik7CiAJCW92bF9jbGVhbnVw X2luZGV4KGRlbnRyeSk7Ci0JCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CisJCW92bF9yZXZlcnRf Y3JlZHMoZGVudHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAJfQogCiAJb3ZsX2lub2RlX3VubG9jayhp bm9kZSk7Ci0tIAoyLjIyLjAuNzcwLmcwZjJjNGEzN2ZkLWdvb2cKCgoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtZjJmcy1kZXZlbCBtYWlsaW5n IGxpc3QKTGludXgtZjJmcy1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKaHR0cHM6Ly9saXN0 cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vbGludXgtZjJmcy1kZXZlbAo= 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,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 CE8C3C433FF for ; Wed, 31 Jul 2019 17:01:06 +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 91E0821852 for ; Wed, 31 Jul 2019 17:01:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="sZGinwBa"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=android.com header.i=@android.com header.b="NxNTAM7e" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 91E0821852 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=GWFlhXelL+b54yzssSbeAnMjFss1H645ARSHEUHrcro=; b=sZGinwBavtk4JX Eeb0ASZ6htLbswqQ8EfYC9+AXqjC8aarTMm3xQGM3n1br5xROdWVh87/55wBCexFNPML5bgEKsHlM ExSX9+lwDT/JnBjTq9Qa1sQcJHvjrmm6Brp2F8G2X92qlwOkmjaP/7nX57O/4czxt9emt1CjCbT4q DFQF1DACkSs/yg2X6kB6hbD1hoPxJ1xL/1dFQ8zazv5Gb53OEU+0z+2YbtHgOgnlSdPGt4Sm7AQTa h/sNCANrmOXx7TMUmRRgJ7LJPKvMTYRlvm5q16xbVQ3Ydi/6zOi6r44ojqlDzn545Ss+jkNf7muUI PXQnkQL0IxBlnYAGhpoQ==; 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 1hsry5-0002YI-Ks; Wed, 31 Jul 2019 17:00:49 +0000 Received: from mail-pl1-x643.google.com ([2607:f8b0:4864:20::643]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hsrwK-00081Z-6R for linux-mtd@lists.infradead.org; Wed, 31 Jul 2019 16:59:18 +0000 Received: by mail-pl1-x643.google.com with SMTP id m9so30635927pls.8 for ; Wed, 31 Jul 2019 09:59:00 -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=ddnpbwfJp/Jg1pT3kuq1L6l9gRs3Cs0gd96QxcsmyTc=; b=NxNTAM7ePY8xngcq2yrLiNdxT7CuMygtVKpGXjyTP1843Lxq3fuRcpO356BEw65bML cslir7uf6cvVuCP9q4xsk5uosGElWGirNimNzKrc650HUmz1fcBB61CoIH5xL+D6t+CN lkgiXjR28DexwU9n5MUD3Rjni5SxfQKoEMJtAXxirw4R0yG+pAisAOWmheolYpwp53ID 4zZ50cuVIfn/XOJq39llAkPYw0YtG0AM8a81+qWkiTu+RGung173hM1OoZAbjwJnu0ik UAxNyUzM3oGCOwLas54+/ewVgWOJ+RFTHxNEgnLne0IkbzKnN487Iy0JoBLRQK2Hoy+6 RnyQ== 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=ddnpbwfJp/Jg1pT3kuq1L6l9gRs3Cs0gd96QxcsmyTc=; b=kwFRTM3JSOlIEq22zfOcUfrtT+9/9gIQ8wDdXD3GBphBM/cjzMIndD+3umcCZxBA3+ eGIRQ7jOl9H5sazj81mCUv9E7vT68bpIAnZ8/2J2yELW20Q73vXJ9Yjq//hKcX/wIKhx zHwi4oy0XFm5kbQqFY6KqJMSd8evmRmsp3efoE04S8oKDfc1UWmBWrXrPC52xocPvAL0 IwCQR6pt3/vaTZgPuSTq99bzLK/8KUTDARsHX23hkmOLTvUtXdEYbobVVCVQV6Ja+5Zx zusTp0Jd4C7FzmoHF56hsWok96lz/YDWLiO4mXbIaZdzG5ZGc23iKpQJOc1NMCedW4UV Gm/Q== X-Gm-Message-State: APjAAAU2l0rDQkx1l/MQJ8mx9gUiIYI0oPAENITyFbIRE546qxf0N0vB 6hnRRE0vVDoVZrIvuaghaEU= X-Google-Smtp-Source: APXvYqw/fnityvjNohJ2x3SxdKBfN0+54rDA11lGujd0yUSK2/q6bwTxrbWfMZk+DO1MQPqz4TBhTA== X-Received: by 2002:a17:902:694a:: with SMTP id k10mr120262361plt.255.1564592339473; Wed, 31 Jul 2019 09:58:59 -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.57 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Wed, 31 Jul 2019 09:58:58 -0700 (PDT) From: Mark Salyzyn To: linux-kernel@vger.kernel.org Subject: [PATCH v13 5/5] overlayfs: override_creds=off option bypass creator_cred Date: Wed, 31 Jul 2019 09:58:00 -0700 Message-Id: <20190731165803.4755-6-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_095900_530793_38FF2771 X-CRM114-Status: GOOD ( 24.46 ) 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-doc@vger.kernel.org, Martin Brandenburg , samba-technical@lists.samba.org, Dominique Martinet , Amir Goldstein , David Howells , Chris Mason , "David S . Miller" , Andreas Dilger , ocfs2-devel@oss.oracle.com, 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, Vyacheslav Dubeyko , v9fs-developer@lists.sourceforge.net, Ilya Dryomov , linux-ext4@vger.kernel.org, Stephen Smalley , linux-mm@kvack.org, Vivek Goyal , 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 , 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 QnkgZGVmYXVsdCwgYWxsIGFjY2VzcyB0byB0aGUgdXBwZXIsIGxvd2VyIGFuZCB3b3JrIGRpcmVj dG9yaWVzIGlzIHRoZQpyZWNvcmRlZCBtb3VudGVyJ3MgTUFDIGFuZCBEQUMgY3JlZGVudGlhbHMu ICBUaGUgaW5jb21pbmcgYWNjZXNzZXMgYXJlCmNoZWNrZWQgYWdhaW5zdCB0aGUgY2FsbGVyJ3Mg Y3JlZGVudGlhbHMuCgpJZiB0aGUgcHJpbmNpcGxlcyBvZiBsZWFzdCBwcml2aWxlZ2UgYXJlIGFw cGxpZWQsIHRoZSBtb3VudGVyJ3MKY3JlZGVudGlhbHMgbWlnaHQgbm90IG92ZXJsYXAgdGhlIGNy ZWRlbnRpYWxzIG9mIHRoZSBjYWxsZXIncyB3aGVuCmFjY2Vzc2luZyB0aGUgb3ZlcmxheWZzIGZp bGVzeXN0ZW0uICBGb3IgZXhhbXBsZSwgYSBmaWxlIHRoYXQgYSBsb3dlcgpEQUMgcHJpdmlsZWdl ZCBjYWxsZXIgY2FuIGV4ZWN1dGUsIGlzIE1BQyBkZW5pZWQgdG8gdGhlIGdlbmVyYWxseQpoaWdo ZXIgREFDIHByaXZpbGVnZWQgbW91bnRlciwgdG8gcHJldmVudCBhbiBhdHRhY2sgdmVjdG9yLgoK V2UgYWRkIHRoZSBvcHRpb24gdG8gdHVybiBvZmYgb3ZlcnJpZGVfY3JlZHMgaW4gdGhlIG1vdW50 IG9wdGlvbnM7IGFsbApzdWJzZXF1ZW50IG9wZXJhdGlvbnMgYWZ0ZXIgbW91bnQgb24gdGhlIGZp bGVzeXN0ZW0gd2lsbCBiZSBvbmx5IHRoZQpjYWxsZXIncyBjcmVkZW50aWFscy4gIFRoZSBtb2R1 bGUgYm9vbGVhbiBwYXJhbWV0ZXIgYW5kIG1vdW50IG9wdGlvbgpvdmVycmlkZV9jcmVkcyBpcyBh bHNvIGFkZGVkIGFzIGEgcHJlc2VuY2UgY2hlY2sgZm9yIHRoaXMgImZlYXR1cmUiLApleGlzdGVu Y2Ugb2YgL3N5cy9tb2R1bGUvb3ZlcmxheS9wYXJhbWV0ZXJzL292ZXJyaWRlX2NyZWRzLgoKSXQg d2FzIG5vdCBhbHdheXMgdGhpcyB3YXkuICBDaXJjYSA0LjYgdGhlcmUgd2FzIG5vIHJlY29yZGVk IG1vdW50ZXIncwpjcmVkZW50aWFscywgaW5zdGVhZCBwcml2aWxlZ2VkIGFjY2VzcyB0byB1cHBl ciBvciB3b3JrIGRpcmVjdG9yaWVzCndlcmUgdGVtcG9yYXJpbHkgaW5jcmVhc2VkIHRvIHBlcmZv cm0gdGhlIG9wZXJhdGlvbnMuICBUaGUgTUFDCihzZWxpbnV4KSBwb2xpY2llcyB3ZXJlIGNhbGxl cidzIGluIGFsbCBjYXNlcy4gIG92ZXJyaWRlX2NyZWRzPW9mZgpwYXJ0aWFsbHkgcmV0dXJucyB1 cyB0byB0aGlzIG9sZGVyIGFjY2VzcyBtb2RlbCBtaW51cyB0aGUgaW5zZWN1cmUKdGVtcG9yYXJ5 IGNyZWRlbnRpYWwgaW5jcmVhc2VzLiAgVGhpcyBpcyB0byBwZXJtaXQgdXNlIGluIGEgc3lzdGVt CndpdGggbm9uLW92ZXJsYXBwaW5nIHNlY3VyaXR5IG1vZGVscyBmb3IgZWFjaCBleGVjdXRhYmxl IGluY2x1ZGluZwp0aGUgYWdlbnQgdGhhdCBtb3VudHMgdGhlIG92ZXJsYXlmcyBmaWxlc3lzdGVt LiAgSW4gQW5kcm9pZAp0aGlzIGlzIHRoZSBjYXNlIHNpbmNlIGluaXQsIHdoaWNoIHBlcmZvcm1z IHRoZSBtb3VudCBvcGVyYXRpb25zLApoYXMgYSBtaW5pbWFsIE1BQyBzZXQgb2YgcHJpdmlsZWdl cyB0byByZWR1Y2UgYW55IGF0dGFjayBzdXJmYWNlLAphbmQgc2VydmljZXMgdGhhdCB1c2UgdGhl IGNvbnRlbnQgaGF2ZSBhIGRpZmZlcmVudCBzZXQgb2YgTUFDCnByaXZpbGVnZXMgKGVnOiByZWFk LCBmb3IgdmVuZG9yIGxhYmVsbGVkIGNvbmZpZ3VyYXRpb24sIGV4ZWN1dGUgZm9yCnZlbmRvciBs aWJyYXJpZXMgYW5kIG1vZHVsZXMpLiAgVGhlIGNhdmVhdHMgYXJlIG5vdCBhIHByb2JsZW0gaW4K dGhlIEFuZHJvaWQgdXNhZ2UgbW9kZWwsIGhvd2V2ZXIgdGhleSBzaG91bGQgYmUgZml4ZWQgZm9y CmNvbXBsZXRlbmVzcyBhbmQgZm9yIGdlbmVyYWwgdXNlIGluIHRpbWUuCgpTaWduZWQtb2ZmLWJ5 OiBNYXJrIFNhbHl6eW4gPHNhbHl6eW5AYW5kcm9pZC5jb20+CkNjOiBNaWtsb3MgU3plcmVkaSA8 bWlrbG9zQHN6ZXJlZGkuaHU+CkNjOiBKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgpD YzogVml2ZWsgR295YWwgPHZnb3lhbEByZWRoYXQuY29tPgpDYzogRXJpYyBXLiBCaWVkZXJtYW4g PGViaWVkZXJtQHhtaXNzaW9uLmNvbT4KQ2M6IEFtaXIgR29sZHN0ZWluIDxhbWlyNzNpbEBnbWFp bC5jb20+CkNjOiBSYW5keSBEdW5sYXAgPHJkdW5sYXBAaW5mcmFkZWFkLm9yZz4KQ2M6IFN0ZXBo ZW4gU21hbGxleSA8c2RzQHR5Y2hvLm5zYS5nb3Y+CkNjOiBsaW51eC11bmlvbmZzQHZnZXIua2Vy bmVsLm9yZwpDYzogbGludXgtZG9jQHZnZXIua2VybmVsLm9yZwpDYzogbGludXgta2VybmVsQHZn ZXIua2VybmVsLm9yZwpDYzoga2VybmVsLXRlYW1AYW5kcm9pZC5jb20KQ2M6IEVyaWMgVmFuIEhl bnNiZXJnZW4gPGVyaWN2aEBnbWFpbC5jb20+CkNjOiBMYXRjaGVzYXIgSW9ua292IDxsdWNob0Bp b25rb3YubmV0PgpDYzogRG9taW5pcXVlIE1hcnRpbmV0IDxhc21hZGV1c0Bjb2Rld3JlY2sub3Jn PgpDYzogRGF2aWQgSG93ZWxscyA8ZGhvd2VsbHNAcmVkaGF0LmNvbT4KQ2M6IENocmlzIE1hc29u IDxjbG1AZmIuY29tPgpDYzogSm9zZWYgQmFjaWsgPGpvc2VmQHRveGljcGFuZGEuY29tPgpDYzog RGF2aWQgU3RlcmJhIDxkc3RlcmJhQHN1c2UuY29tPgpDYzogSmVmZiBMYXl0b24gPGpsYXl0b25A a2VybmVsLm9yZz4KQ2M6IFNhZ2UgV2VpbCA8c2FnZUByZWRoYXQuY29tPgpDYzogSWx5YSBEcnlv bW92IDxpZHJ5b21vdkBnbWFpbC5jb20+CkNjOiBTdGV2ZSBGcmVuY2ggPHNmcmVuY2hAc2FtYmEu b3JnPgpDYzogVHlsZXIgSGlja3MgPHR5aGlja3NAY2Fub25pY2FsLmNvbT4KQ2M6IEphbiBLYXJh IDxqYWNrQHN1c2UuY29tPgpDYzogVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KQ2M6IEFu ZHJlYXMgRGlsZ2VyIDxhZGlsZ2VyLmtlcm5lbEBkaWxnZXIuY2E+CkNjOiBKYWVnZXVrIEtpbSA8 amFlZ2V1a0BrZXJuZWwub3JnPgpDYzogQ2hhbyBZdSA8eXVjaGFvMEBodWF3ZWkuY29tPgpDYzog Qm9iIFBldGVyc29uIDxycGV0ZXJzb0ByZWRoYXQuY29tPgpDYzogQW5kcmVhcyBHcnVlbmJhY2hl ciA8YWdydWVuYmFAcmVkaGF0LmNvbT4KQ2M6IERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFk ZWFkLm9yZz4KQ2M6IFJpY2hhcmQgV2VpbmJlcmdlciA8cmljaGFyZEBub2QuYXQ+CkNjOiBEYXZl IEtsZWlrYW1wIDxzaGFnZ3lAa2VybmVsLm9yZz4KQ2M6IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3Jl Z2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+CkNjOiBUZWp1biBIZW8gPHRqQGtlcm5lbC5vcmc+CkNj OiBUcm9uZCBNeWtsZWJ1c3QgPHRyb25kLm15a2xlYnVzdEBoYW1tZXJzcGFjZS5jb20+CkNjOiBB bm5hIFNjaHVtYWtlciA8YW5uYS5zY2h1bWFrZXJAbmV0YXBwLmNvbT4KQ2M6IE1hcmsgRmFzaGVo IDxtYXJrQGZhc2hlaC5jb20+CkNjOiBKb2VsIEJlY2tlciA8amxiZWNAZXZpbHBsYW4ub3JnPgpD YzogSm9zZXBoIFFpIDxqb3NlcGgucWlAbGludXguYWxpYmFiYS5jb20+CkNjOiBNaWtlIE1hcnNo YWxsIDxodWJjYXBAb21uaWJvbmQuY29tPgpDYzogTWFydGluIEJyYW5kZW5idXJnIDxtYXJ0aW5A b21uaWJvbmQuY29tPgpDYzogQWxleGFuZGVyIFZpcm8gPHZpcm9AemVuaXYubGludXgub3JnLnVr PgpDYzogUGhpbGxpcCBMb3VnaGVyIDxwaGlsbGlwQHNxdWFzaGZzLm9yZy51az4KQ2M6IERhcnJp Y2sgSi4gV29uZyA8ZGFycmljay53b25nQG9yYWNsZS5jb20+CkNjOiBsaW51eC14ZnNAdmdlci5r ZXJuZWwub3JnCkNjOiBIdWdoIERpY2tpbnMgPGh1Z2hkQGdvb2dsZS5jb20+CkNjOiBEYXZpZCBT LiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CkNjOiBBbmRyZXcgTW9ydG9uIDxha3BtQGxp bnV4LWZvdW5kYXRpb24ub3JnPgpDYzogTWF0aGlldSBNYWxhdGVycmUgPG1hbGF0QGRlYmlhbi5v cmc+CkNjOiBFcm5lc3RvIEEuIEZlcm7DoW5kZXogPGVybmVzdG8ubW5kLmZlcm5hbmRlekBnbWFp bC5jb20+CkNjOiBWeWFjaGVzbGF2IER1YmV5a28gPHNsYXZhQGR1YmV5a28uY29tPgpDYzogdjlm cy1kZXZlbG9wZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CkNjOiBsaW51eC1hZnNAbGlzdHMuaW5m cmFkZWFkLm9yZwpDYzogbGludXgtYnRyZnNAdmdlci5rZXJuZWwub3JnCkNjOiBjZXBoLWRldmVs QHZnZXIua2VybmVsLm9yZwpDYzogbGludXgtY2lmc0B2Z2VyLmtlcm5lbC5vcmcKQ2M6IHNhbWJh LXRlY2huaWNhbEBsaXN0cy5zYW1iYS5vcmcKQ2M6IGVjcnlwdGZzQHZnZXIua2VybmVsLm9yZwpD YzogbGludXgtZXh0NEB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGxpbnV4LWYyZnMtZGV2ZWxAbGlzdHMu c291cmNlZm9yZ2UubmV0CkNjOiBsaW51eC1mc2RldmVsQHZnZXIua2VybmVsLm9yZwpDYzogY2x1 c3Rlci1kZXZlbEByZWRoYXQuY29tCkNjOiBsaW51eC1tdGRAbGlzdHMuaW5mcmFkZWFkLm9yZwpD YzogamZzLWRpc2N1c3Npb25AbGlzdHMuc291cmNlZm9yZ2UubmV0CkNjOiBsaW51eC1uZnNAdmdl ci5rZXJuZWwub3JnCkNjOiBvY2ZzMi1kZXZlbEBvc3Mub3JhY2xlLmNvbQpDYzogZGV2ZWxAbGlz dHMub3JhbmdlZnMub3JnCkNjOiByZWlzZXJmcy1kZXZlbEB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGxp bnV4LW1tQGt2YWNrLm9yZwpDYzogbmV0ZGV2QHZnZXIua2VybmVsLm9yZwpDYzogbGludXgtc2Vj dXJpdHktbW9kdWxlQHZnZXIua2VybmVsLm9yZwpDYzogc3RhYmxlQHZnZXIua2VybmVsLm9yZyAj IDQuNCwgNC45LCA0LjE0ICYgNC4xOSBOQjogdGhpcyBpcyBhIGRlc2lyZWQgZmVhdHVyZQotLS0K djEyICsgdjEzOgotIFJlYmFzZQoKdjExOgotIGFkZCBzYiBhcmd1bWVudCB0byBvdmxfcmV2ZXJ0 X2NyZWRzIHRvIG1hdGNoIGZ1dHVyZSB3b3JrCgp2MTA6Ci0gUmViYXNlIChhbmQgZXhwYW5kIGJl Y2F1c2Ugb2YgaW5jcmVhc2VkIHJldmVydF9jcmVkIHVzYWdlKQoKdjk6Ci0gQWRkIHRvIHRoZSBj YXZlYXRzCgp2ODoKLSBkcm9wIHByX3dhcm4gbWVzc2FnZSBhZnRlciBzdHJhdyBwb2xsIHRvIHJl bW92ZSBpdC4KLSBhZGRlZCBhIHVzZSBjYXNlIGluIHRoZSBjb21taXQgbWVzc2FnZQoKdjc6Ci0g Y2hhbmdlIG5hbWUgb2YgaW50ZXJuYWwgcGFyYW1ldGVyIHRvIG92bF9vdmVycmlkZV9jcmVkc19k ZWYKLSByZXBvcnQgb3ZlcnJpZGVfY3JlZHMgb25seSBpZiBkaWZmZXJlbnQgdGhhbiBkZWZhdWx0 Cgp2NjoKLSBEcm9wIENPTkZJR19PVkVSTEFZX0ZTX09WRVJSSURFX0NSRURTLgotIERvIGJldHRl ciB3aXRoIHRoZSBkb2N1bWVudGF0aW9uLgotIHByX3dhcm4gbWVzc2FnZSBhZGp1c3RlZCB0byBy ZXBvcnQgY29uc2VxdWVuY2VzLgoKdjU6Ci0gYmVlZmVkIHVwIHRoZSBjYXZlYXRzIGluIHRoZSBE b2N1bWVudGF0aW9uCi0gSXMgZGVwZW5kZW50IG9uCiAgIm92ZXJsYXlmczogY2hlY2sgQ0FQX0RB Q19SRUFEX1NFQVJDSCBiZWZvcmUgaXNzdWluZyBleHBvcnRmc19kZWNvZGVfZmgiCiAgIm92ZXJs YXlmczogY2hlY2sgQ0FQX01LTk9EIGJlZm9yZSBpc3N1aW5nIHZmc193aGl0ZW91dCIKLSBBZGRl ZCBwcndhcm4gd2hlbiBvdmVycmlkZV9jcmVkcz1vZmYKCnY0OgotIHNwZWxsaW5nIGFuZCBncmFt bWFyIGVycm9ycyBpbiB0ZXh0Cgp2MzoKLSBDaGFuZ2UgbmFtZSBmcm9tIGNhbGxlcl9jcmVkZW50 aWFscyAvIGNyZWF0b3JfY3JlZGVudGlhbHMgdG8gdGhlCiAgYm9vbGVhbiBvdmVycmlkZV9jcmVk cy4KLSBDaGFuZ2VkIGZyb20gY3JlYXRvciB0byBtb3VudGVyIGNyZWRlbnRpYWxzLgotIFVwZGF0 ZWQgYW5kIGZvcnRpZmllZCB0aGUgZG9jdW1lbnRhdGlvbi4KLSBBZGRlZCBDT05GSUdfT1ZFUkxB WV9GU19PVkVSUklERV9DUkVEUwoKdjI6Ci0gRm9yd2FyZCBwb3J0IGNoYW5nZWQgYXR0ciB0byBz dGF0LCByZXN1bHRpbmcgaW4gYSBidWlsZCBlcnJvci4KLSBhbHRlcmVkIGNvbW1pdCBtZXNzYWdl LgotLS0KIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb3ZlcmxheWZzLnR4dCB8IDIzICsrKysr KysrKysrKysrKysrKysrKysrCiBmcy9vdmVybGF5ZnMvY29weV91cC5jICAgICAgICAgICAgICAg ICAgfCAgMiArLQogZnMvb3ZlcmxheWZzL2Rpci5jICAgICAgICAgICAgICAgICAgICAgIHwgMTEg KysrKysrLS0tLS0KIGZzL292ZXJsYXlmcy9maWxlLmMgICAgICAgICAgICAgICAgICAgICB8IDIw ICsrKysrKysrKystLS0tLS0tLS0tCiBmcy9vdmVybGF5ZnMvaW5vZGUuYyAgICAgICAgICAgICAg ICAgICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KIGZzL292ZXJsYXlmcy9uYW1laS5jICAgICAg ICAgICAgICAgICAgICB8ICA2ICsrKy0tLQogZnMvb3ZlcmxheWZzL292ZXJsYXlmcy5oICAgICAg ICAgICAgICAgIHwgIDEgKwogZnMvb3ZlcmxheWZzL292bF9lbnRyeS5oICAgICAgICAgICAgICAg IHwgIDEgKwogZnMvb3ZlcmxheWZzL3JlYWRkaXIuYyAgICAgICAgICAgICAgICAgIHwgIDQgKyst LQogZnMvb3ZlcmxheWZzL3N1cGVyLmMgICAgICAgICAgICAgICAgICAgIHwgMjIgKysrKysrKysr KysrKysrKysrKysrLQogZnMvb3ZlcmxheWZzL3V0aWwuYyAgICAgICAgICAgICAgICAgICAgIHwg MTIgKysrKysrKysrKy0tCiAxMSBmaWxlcyBjaGFuZ2VkLCA4NyBpbnNlcnRpb25zKCspLCAzMyBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL292ZXJs YXlmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL292ZXJsYXlmcy50eHQKaW5kZXgg MWRhMmYxNjY4ZjA4Li5kNDgxMjUwNzY2MDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmls ZXN5c3RlbXMvb3ZlcmxheWZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL292 ZXJsYXlmcy50eHQKQEAgLTEwMiw2ICsxMDIsMjkgQEAgT25seSB0aGUgbGlzdHMgb2YgbmFtZXMg ZnJvbSBkaXJlY3RvcmllcyBhcmUgbWVyZ2VkLiAgT3RoZXIgY29udGVudAogc3VjaCBhcyBtZXRh ZGF0YSBhbmQgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgcmVwb3J0ZWQgZm9yIHRoZSB1cHBlcgog ZGlyZWN0b3J5IG9ubHkuICBUaGVzZSBhdHRyaWJ1dGVzIG9mIHRoZSBsb3dlciBkaXJlY3Rvcnkg YXJlIGhpZGRlbi4KIAorY3JlZGVudGlhbHMKKy0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQsIGFs bCBhY2Nlc3MgdG8gdGhlIHVwcGVyLCBsb3dlciBhbmQgd29yayBkaXJlY3RvcmllcyBpcyB0aGUK K3JlY29yZGVkIG1vdW50ZXIncyBNQUMgYW5kIERBQyBjcmVkZW50aWFscy4gIFRoZSBpbmNvbWlu ZyBhY2Nlc3NlcyBhcmUKK2NoZWNrZWQgYWdhaW5zdCB0aGUgY2FsbGVyJ3MgY3JlZGVudGlhbHMu CisKK0luIHRoZSBjYXNlIHdoZXJlIGNhbGxlciBNQUMgb3IgREFDIGNyZWRlbnRpYWxzIGRvIG5v dCBvdmVybGFwLCBhCit1c2UgY2FzZSBhdmFpbGFibGUgaW4gb2xkZXIgdmVyc2lvbnMgb2YgdGhl IGRyaXZlciwgdGhlCitvdmVycmlkZV9jcmVkcyBtb3VudCBmbGFnIGNhbiBiZSB0dXJuZWQgb2Zm IGFuZCBoZWxwIHdoZW4gdGhlIHVzZQorcGF0dGVybiBoYXMgY2FsbGVyIHdpdGggbGVnaXRpbWF0 ZSBjcmVkZW50aWFscyB3aGVyZSB0aGUgbW91bnRlcgorZG9lcyBub3QuICBTZXZlcmFsIHVuaW50 ZW5kZWQgc2lkZSBlZmZlY3RzIHdpbGwgb2NjdXIgdGhvdWdoLiAgVGhlCitjYWxsZXIgd2l0aG91 dCBjZXJ0YWluIGtleSBjYXBhYmlsaXRpZXMgb3IgbG93ZXIgcHJpdmlsZWdlIHdpbGwgbm90Cith bHdheXMgYmUgYWJsZSB0byBkZWxldGUgZmlsZXMgb3IgZGlyZWN0b3JpZXMsIGNyZWF0ZSBub2Rl cywgb3IKK3NlYXJjaCBzb21lIHJlc3RyaWN0ZWQgZGlyZWN0b3JpZXMuICBUaGUgYWJpbGl0eSB0 byBzZWFyY2ggYW5kIHJlYWQKK2EgZGlyZWN0b3J5IGVudHJ5IGlzIHNwb3R0eSBhcyBhIHJlc3Vs dCBvZiB0aGUgY2FjaGUgbWVjaGFuaXNtIG5vdAorcmV0ZXN0aW5nIHRoZSBjcmVkZW50aWFscyBi ZWNhdXNlIG9mIHRoZSBhc3N1bXB0aW9uLCBhIHByaXZpbGVnZWQKK2NhbGxlciBjYW4gZmlsbCBj YWNoZSwgdGhlbiBhIGxvd2VyIHByaXZpbGVnZSBjYW4gcmVhZCB0aGUgZGlyZWN0b3J5CitjYWNo ZS4gIFRoZSB1bmV2ZW4gc2VjdXJpdHkgbW9kZWwgd2hlcmUgY2FjaGUsIHVwcGVyZGlyIGFuZCB3 b3JrZGlyCithcmUgb3BlbmVkIGF0IHByaXZpbGVnZSwgYnV0IGFjY2Vzc2VkIHdpdGhvdXQgY3Jl YXRpbmcgYSBmb3JtIG9mCitwcml2aWxlZ2UgZXNjYWxhdGlvbiwgc2hvdWxkIG9ubHkgYmUgdXNl ZCB3aXRoIHN0cmljdCB1bmRlcnN0YW5kaW5nCitvZiB0aGUgc2lkZSBlZmZlY3RzIGFuZCBvZiB0 aGUgc2VjdXJpdHkgcG9saWNpZXMuCisKIHdoaXRlb3V0cyBhbmQgb3BhcXVlIGRpcmVjdG9yaWVz CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9mcy9vdmVy bGF5ZnMvY29weV91cC5jIGIvZnMvb3ZlcmxheWZzL2NvcHlfdXAuYwppbmRleCBiODAxYzYzNTMx MDAuLjFjMWI5NDE1ZTUzMyAxMDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL2NvcHlfdXAuYworKysg Yi9mcy9vdmVybGF5ZnMvY29weV91cC5jCkBAIC04ODYsNyArODg2LDcgQEAgaW50IG92bF9jb3B5 X3VwX2ZsYWdzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGZsYWdzKQogCQlkcHV0KHBhcmVu dCk7CiAJCWRwdXQobmV4dCk7CiAJfQotCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CisJb3ZsX3Jl dmVydF9jcmVkcyhkZW50cnktPmRfc2IsIG9sZF9jcmVkKTsKIAogCXJldHVybiBlcnI7CiB9CmRp ZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvZGlyLmMgYi9mcy9vdmVybGF5ZnMvZGlyLmMKaW5kZXgg NzAyYWE2M2Y2Nzc0Li40OWI4ZmZjMTI5NGYgMTAwNjQ0Ci0tLSBhL2ZzL292ZXJsYXlmcy9kaXIu YworKysgYi9mcy9vdmVybGF5ZnMvZGlyLmMKQEAgLTU2Myw3ICs1NjMsOCBAQCBzdGF0aWMgaW50 IG92bF9jcmVhdGVfb3JfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAq aW5vZGUsCiAJCW92ZXJyaWRlX2NyZWQtPmZzZ2lkID0gaW5vZGUtPmlfZ2lkOwogCQlpZiAoIWF0 dHItPmhhcmRsaW5rKSB7CiAJCQllcnIgPSBzZWN1cml0eV9kZW50cnlfY3JlYXRlX2ZpbGVzX2Fz KGRlbnRyeSwKLQkJCQkJYXR0ci0+bW9kZSwgJmRlbnRyeS0+ZF9uYW1lLCBvbGRfY3JlZCwKKwkJ CQkJYXR0ci0+bW9kZSwgJmRlbnRyeS0+ZF9uYW1lLAorCQkJCQlvbGRfY3JlZCA/IG9sZF9jcmVk IDogY3VycmVudF9jcmVkKCksCiAJCQkJCW92ZXJyaWRlX2NyZWQpOwogCQkJaWYgKGVycikgewog CQkJCXB1dF9jcmVkKG92ZXJyaWRlX2NyZWQpOwpAQCAtNTc5LDcgKzU4MCw3IEBAIHN0YXRpYyBp bnQgb3ZsX2NyZWF0ZV9vcl9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2Rl ICppbm9kZSwKIAkJCWVyciA9IG92bF9jcmVhdGVfb3Zlcl93aGl0ZW91dChkZW50cnksIGlub2Rl LCBhdHRyKTsKIAl9CiBvdXRfcmV2ZXJ0X2NyZWRzOgotCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7 CisJb3ZsX3JldmVydF9jcmVkcyhkZW50cnktPmRfc2IsIG9sZF9jcmVkKTsKIAlyZXR1cm4gZXJy OwogfQogCkBAIC02NTUsNyArNjU2LDcgQEAgc3RhdGljIGludCBvdmxfc2V0X2xpbmtfcmVkaXJl Y3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCiAJb2xkX2NyZWQgPSBvdmxfb3ZlcnJpZGVfY3Jl ZHMoZGVudHJ5LT5kX3NiKTsKIAllcnIgPSBvdmxfc2V0X3JlZGlyZWN0KGRlbnRyeSwgZmFsc2Up OwotCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CisJb3ZsX3JldmVydF9jcmVkcyhkZW50cnktPmRf c2IsIG9sZF9jcmVkKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC04NTEsNyArODUyLDcgQEAgc3Rh dGljIGludCBvdmxfZG9fcmVtb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgYm9vbCBpc19kaXIp CiAJCWVyciA9IG92bF9yZW1vdmVfdXBwZXIoZGVudHJ5LCBpc19kaXIsICZsaXN0KTsKIAllbHNl CiAJCWVyciA9IG92bF9yZW1vdmVfYW5kX3doaXRlb3V0KGRlbnRyeSwgJmxpc3QpOwotCXJldmVy dF9jcmVkcyhvbGRfY3JlZCk7CisJb3ZsX3JldmVydF9jcmVkcyhkZW50cnktPmRfc2IsIG9sZF9j cmVkKTsKIAlpZiAoIWVycikgewogCQlpZiAoaXNfZGlyKQogCQkJY2xlYXJfbmxpbmsoZGVudHJ5 LT5kX2lub2RlKTsKQEAgLTEyMjEsNyArMTIyMiw3IEBAIHN0YXRpYyBpbnQgb3ZsX3JlbmFtZShz dHJ1Y3QgaW5vZGUgKm9sZGRpciwgc3RydWN0IGRlbnRyeSAqb2xkLAogb3V0X3VubG9jazoKIAl1 bmxvY2tfcmVuYW1lKG5ld191cHBlcmRpciwgb2xkX3VwcGVyZGlyKTsKIG91dF9yZXZlcnRfY3Jl ZHM6Ci0JcmV2ZXJ0X2NyZWRzKG9sZF9jcmVkKTsKKwlvdmxfcmV2ZXJ0X2NyZWRzKG9sZC0+ZF9z Yiwgb2xkX2NyZWQpOwogCWlmICh1cGRhdGVfbmxpbmspCiAJCW92bF9ubGlua19lbmQobmV3KTsK IG91dF9kcm9wX3dyaXRlOgpkaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL2ZpbGUuYyBiL2ZzL292 ZXJsYXlmcy9maWxlLmMKaW5kZXggZTIzNWE2MzVkOWVjLi5kOTRkNmVjNzg1YTcgMTAwNjQ0Ci0t LSBhL2ZzL292ZXJsYXlmcy9maWxlLmMKKysrIGIvZnMvb3ZlcmxheWZzL2ZpbGUuYwpAQCAtMzIs NyArMzIsNyBAQCBzdGF0aWMgc3RydWN0IGZpbGUgKm92bF9vcGVuX3JlYWxmaWxlKGNvbnN0IHN0 cnVjdCBmaWxlICpmaWxlLAogCW9sZF9jcmVkID0gb3ZsX292ZXJyaWRlX2NyZWRzKGlub2RlLT5p X3NiKTsKIAlyZWFsZmlsZSA9IG9wZW5fd2l0aF9mYWtlX3BhdGgoJmZpbGUtPmZfcGF0aCwgZmxh Z3MsIHJlYWxpbm9kZSwKIAkJCQkgICAgICAgY3VycmVudF9jcmVkKCkpOwotCXJldmVydF9jcmVk cyhvbGRfY3JlZCk7CisJb3ZsX3JldmVydF9jcmVkcyhpbm9kZS0+aV9zYiwgb2xkX2NyZWQpOwog CiAJcHJfZGVidWcoIm9wZW4oJXBbJXBEMi8lY10sIDAlbykgLT4gKCVwLCAwJW8pXG4iLAogCQkg ZmlsZSwgZmlsZSwgb3ZsX3doYXRpc2l0KGlub2RlLCByZWFsaW5vZGUpLCBmaWxlLT5mX2ZsYWdz LApAQCAtMTc2LDcgKzE3Niw3IEBAIHN0YXRpYyBsb2ZmX3Qgb3ZsX2xsc2VlayhzdHJ1Y3QgZmls ZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkKIAogCW9sZF9jcmVkID0gb3ZsX292 ZXJyaWRlX2NyZWRzKGlub2RlLT5pX3NiKTsKIAlyZXQgPSB2ZnNfbGxzZWVrKHJlYWwuZmlsZSwg b2Zmc2V0LCB3aGVuY2UpOwotCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CisJb3ZsX3JldmVydF9j cmVkcyhpbm9kZS0+aV9zYiwgb2xkX2NyZWQpOwogCiAJZmlsZS0+Zl9wb3MgPSByZWFsLmZpbGUt PmZfcG9zOwogCWlub2RlX3VubG9jayhpbm9kZSk7CkBAIC0yNDIsNyArMjQyLDcgQEAgc3RhdGlj IHNzaXplX3Qgb3ZsX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRl ciAqaXRlcikKIAlvbGRfY3JlZCA9IG92bF9vdmVycmlkZV9jcmVkcyhmaWxlX2lub2RlKGZpbGUp LT5pX3NiKTsKIAlyZXQgPSB2ZnNfaXRlcl9yZWFkKHJlYWwuZmlsZSwgaXRlciwgJmlvY2ItPmtp X3BvcywKIAkJCSAgICBvdmxfaW9jYl90b19yd2YoaW9jYikpOwotCXJldmVydF9jcmVkcyhvbGRf Y3JlZCk7CisJb3ZsX3JldmVydF9jcmVkcyhmaWxlX2lub2RlKGZpbGUpLT5pX3NiLCBvbGRfY3Jl ZCk7CiAKIAlvdmxfZmlsZV9hY2Nlc3NlZChmaWxlKTsKIApAQCAtMjc4LDcgKzI3OCw3IEBAIHN0 YXRpYyBzc2l6ZV90IG92bF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlv dl9pdGVyICppdGVyKQogCXJldCA9IHZmc19pdGVyX3dyaXRlKHJlYWwuZmlsZSwgaXRlciwgJmlv Y2ItPmtpX3BvcywKIAkJCSAgICAgb3ZsX2lvY2JfdG9fcndmKGlvY2IpKTsKIAlmaWxlX2VuZF93 cml0ZShyZWFsLmZpbGUpOwotCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CisJb3ZsX3JldmVydF9j cmVkcyhmaWxlX2lub2RlKGZpbGUpLT5pX3NiLCBvbGRfY3JlZCk7CiAKIAkvKiBVcGRhdGUgc2l6 ZSAqLwogCW92bF9jb3B5YXR0cihvdmxfaW5vZGVfcmVhbChpbm9kZSksIGlub2RlKTsKQEAgLTMw NSw3ICszMDUsNyBAQCBzdGF0aWMgaW50IG92bF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9m Zl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCiAJaWYgKGZpbGVfaW5vZGUocmVh bC5maWxlKSA9PSBvdmxfaW5vZGVfdXBwZXIoZmlsZV9pbm9kZShmaWxlKSkpIHsKIAkJb2xkX2Ny ZWQgPSBvdmxfb3ZlcnJpZGVfY3JlZHMoZmlsZV9pbm9kZShmaWxlKS0+aV9zYik7CiAJCXJldCA9 IHZmc19mc3luY19yYW5nZShyZWFsLmZpbGUsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTsKLQkJcmV2 ZXJ0X2NyZWRzKG9sZF9jcmVkKTsKKwkJb3ZsX3JldmVydF9jcmVkcyhmaWxlX2lub2RlKGZpbGUp LT5pX3NiLCBvbGRfY3JlZCk7CiAJfQogCiAJZmRwdXQocmVhbCk7CkBAIC0zMjksNyArMzI5LDcg QEAgc3RhdGljIGludCBvdmxfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEpCiAKIAlvbGRfY3JlZCA9IG92bF9vdmVycmlkZV9jcmVkcyhmaWxlX2lub2Rl KGZpbGUpLT5pX3NiKTsKIAlyZXQgPSBjYWxsX21tYXAodm1hLT52bV9maWxlLCB2bWEpOwotCXJl dmVydF9jcmVkcyhvbGRfY3JlZCk7CisJb3ZsX3JldmVydF9jcmVkcyhmaWxlX2lub2RlKGZpbGUp LT5pX3NiLCBvbGRfY3JlZCk7CiAKIAlpZiAocmV0KSB7CiAJCS8qIERyb3AgcmVmZXJlbmNlIGNv dW50IGZyb20gbmV3IHZtX2ZpbGUgdmFsdWUgKi8KQEAgLTM1Nyw3ICszNTcsNyBAQCBzdGF0aWMg bG9uZyBvdmxfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9m ZnNldCwgbG9mZl90IGxlbgogCiAJb2xkX2NyZWQgPSBvdmxfb3ZlcnJpZGVfY3JlZHMoZmlsZV9p bm9kZShmaWxlKS0+aV9zYik7CiAJcmV0ID0gdmZzX2ZhbGxvY2F0ZShyZWFsLmZpbGUsIG1vZGUs IG9mZnNldCwgbGVuKTsKLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3Jl ZHMoZmlsZV9pbm9kZShmaWxlKS0+aV9zYiwgb2xkX2NyZWQpOwogCiAJLyogVXBkYXRlIHNpemUg Ki8KIAlvdmxfY29weWF0dHIob3ZsX2lub2RlX3JlYWwoaW5vZGUpLCBpbm9kZSk7CkBAIC0zNzks NyArMzc5LDcgQEAgc3RhdGljIGludCBvdmxfZmFkdmlzZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9m Zl90IG9mZnNldCwgbG9mZl90IGxlbiwgaW50IGFkdmljZSkKIAogCW9sZF9jcmVkID0gb3ZsX292 ZXJyaWRlX2NyZWRzKGZpbGVfaW5vZGUoZmlsZSktPmlfc2IpOwogCXJldCA9IHZmc19mYWR2aXNl KHJlYWwuZmlsZSwgb2Zmc2V0LCBsZW4sIGFkdmljZSk7Ci0JcmV2ZXJ0X2NyZWRzKG9sZF9jcmVk KTsKKwlvdmxfcmV2ZXJ0X2NyZWRzKGZpbGVfaW5vZGUoZmlsZSktPmlfc2IsIG9sZF9jcmVkKTsK IAogCWZkcHV0KHJlYWwpOwogCkBAIC0zOTksNyArMzk5LDcgQEAgc3RhdGljIGxvbmcgb3ZsX3Jl YWxfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAKIAlvbGRfY3Jl ZCA9IG92bF9vdmVycmlkZV9jcmVkcyhmaWxlX2lub2RlKGZpbGUpLT5pX3NiKTsKIAlyZXQgPSB2 ZnNfaW9jdGwocmVhbC5maWxlLCBjbWQsIGFyZyk7Ci0JcmV2ZXJ0X2NyZWRzKG9sZF9jcmVkKTsK KwlvdmxfcmV2ZXJ0X2NyZWRzKGZpbGVfaW5vZGUoZmlsZSktPmlfc2IsIG9sZF9jcmVkKTsKIAog CWZkcHV0KHJlYWwpOwogCkBAIC01ODksNyArNTg5LDcgQEAgc3RhdGljIGxvZmZfdCBvdmxfY29w eWZpbGUoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sCiAJCQkJCQlmbGFncyk7 CiAJCWJyZWFrOwogCX0KLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3Jl ZHMoZmlsZV9pbm9kZShmaWxlX291dCktPmlfc2IsIG9sZF9jcmVkKTsKIAogCS8qIFVwZGF0ZSBz aXplICovCiAJb3ZsX2NvcHlhdHRyKG92bF9pbm9kZV9yZWFsKGlub2RlX291dCksIGlub2RlX291 dCk7CmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvaW5vZGUuYyBiL2ZzL292ZXJsYXlmcy9pbm9k ZS5jCmluZGV4IDFiZjExYWU0NDMxMy4uZmMxODI4YWEzMGVkIDEwMDY0NAotLS0gYS9mcy9vdmVy bGF5ZnMvaW5vZGUuYworKysgYi9mcy9vdmVybGF5ZnMvaW5vZGUuYwpAQCAtNjEsNyArNjEsNyBA QCBpbnQgb3ZsX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0 dHIpCiAJCWlub2RlX2xvY2sodXBwZXJkZW50cnktPmRfaW5vZGUpOwogCQlvbGRfY3JlZCA9IG92 bF9vdmVycmlkZV9jcmVkcyhkZW50cnktPmRfc2IpOwogCQllcnIgPSBub3RpZnlfY2hhbmdlKHVw cGVyZGVudHJ5LCBhdHRyLCBOVUxMKTsKLQkJcmV2ZXJ0X2NyZWRzKG9sZF9jcmVkKTsKKwkJb3Zs X3JldmVydF9jcmVkcyhkZW50cnktPmRfc2IsIG9sZF9jcmVkKTsKIAkJaWYgKCFlcnIpCiAJCQlv dmxfY29weWF0dHIodXBwZXJkZW50cnktPmRfaW5vZGUsIGRlbnRyeS0+ZF9pbm9kZSk7CiAJCWlu b2RlX3VubG9jayh1cHBlcmRlbnRyeS0+ZF9pbm9kZSk7CkBAIC0yNTcsNyArMjU3LDcgQEAgaW50 IG92bF9nZXRhdHRyKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQs CiAJCXN0YXQtPm5saW5rID0gZGVudHJ5LT5kX2lub2RlLT5pX25saW5rOwogCiBvdXQ6Ci0JcmV2 ZXJ0X2NyZWRzKG9sZF9jcmVkKTsKKwlvdmxfcmV2ZXJ0X2NyZWRzKGRlbnRyeS0+ZF9zYiwgb2xk X2NyZWQpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTI5MSw3ICsyOTEsNyBAQCBpbnQgb3ZsX3Bl cm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiAJCW1hc2sgfD0gTUFZX1JF QUQ7CiAJfQogCWVyciA9IGlub2RlX3Blcm1pc3Npb24ocmVhbGlub2RlLCBtYXNrKTsKLQlyZXZl cnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3JlZHMoaW5vZGUtPmlfc2IsIG9sZF9j cmVkKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0zMDgsNyArMzA4LDcgQEAgc3RhdGljIGNvbnN0 IGNoYXIgKm92bF9nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAKIAlvbGRfY3JlZCA9 IG92bF9vdmVycmlkZV9jcmVkcyhkZW50cnktPmRfc2IpOwogCXAgPSB2ZnNfZ2V0X2xpbmsob3Zs X2RlbnRyeV9yZWFsKGRlbnRyeSksIGRvbmUpOwotCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CisJ b3ZsX3JldmVydF9jcmVkcyhkZW50cnktPmRfc2IsIG9sZF9jcmVkKTsKIAlyZXR1cm4gcDsKIH0K IApAQCAtMzUxLDcgKzM1MSw3IEBAIGludCBvdmxfeGF0dHJfc2V0KHN0cnVjdCBkZW50cnkgKmRl bnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKIAkJV0FSTl9PTihm bGFncyAhPSBYQVRUUl9SRVBMQUNFKTsKIAkJZXJyID0gdmZzX3JlbW92ZXhhdHRyKHJlYWxkZW50 cnksIG5hbWUpOwogCX0KLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3Jl ZHMoZGVudHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAKIAkvKiBjb3B5IGMvbXRpbWUgKi8KIAlvdmxf Y29weWF0dHIoZF9pbm9kZShyZWFsZGVudHJ5KSwgaW5vZGUpOwpAQCAtMzczLDcgKzM3Myw3IEBA IGludCBvdmxfeGF0dHJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICpp bm9kZSwgY29uc3QgY2hhciAqbmFtZSwKIAlvbGRfY3JlZCA9IG92bF9vdmVycmlkZV9jcmVkcyhk ZW50cnktPmRfc2IpOwogCXJlcyA9IF9fdmZzX2dldHhhdHRyKHJlYWxkZW50cnksIGRfaW5vZGUo cmVhbGRlbnRyeSksIG5hbWUsCiAJCQkgICAgIHZhbHVlLCBzaXplLCBmbGFncyk7Ci0JcmV2ZXJ0 X2NyZWRzKG9sZF9jcmVkKTsKKwlvdmxfcmV2ZXJ0X2NyZWRzKGRlbnRyeS0+ZF9zYiwgb2xkX2Ny ZWQpOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTM5Nyw3ICszOTcsNyBAQCBzc2l6ZV90IG92bF9s aXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpsaXN0LCBzaXplX3Qgc2l6ZSkK IAogCW9sZF9jcmVkID0gb3ZsX292ZXJyaWRlX2NyZWRzKGRlbnRyeS0+ZF9zYik7CiAJcmVzID0g dmZzX2xpc3R4YXR0cihyZWFsZGVudHJ5LCBsaXN0LCBzaXplKTsKLQlyZXZlcnRfY3JlZHMob2xk X2NyZWQpOworCW92bF9yZXZlcnRfY3JlZHMoZGVudHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAJaWYg KHJlcyA8PSAwIHx8IHNpemUgPT0gMCkKIAkJcmV0dXJuIHJlczsKIApAQCAtNDMyLDcgKzQzMiw3 IEBAIHN0cnVjdCBwb3NpeF9hY2wgKm92bF9nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGlu dCB0eXBlKQogCiAJb2xkX2NyZWQgPSBvdmxfb3ZlcnJpZGVfY3JlZHMoaW5vZGUtPmlfc2IpOwog CWFjbCA9IGdldF9hY2wocmVhbGlub2RlLCB0eXBlKTsKLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQp OworCW92bF9yZXZlcnRfY3JlZHMoaW5vZGUtPmlfc2IsIG9sZF9jcmVkKTsKIAogCXJldHVybiBh Y2w7CiB9CkBAIC00NzAsNyArNDcwLDcgQEAgc3RhdGljIGludCBvdmxfZmllbWFwKHN0cnVjdCBp bm9kZSAqaW5vZGUsIHN0cnVjdCBmaWVtYXBfZXh0ZW50X2luZm8gKmZpZWluZm8sCiAJCWZpbGVt YXBfd3JpdGVfYW5kX3dhaXQocmVhbGlub2RlLT5pX21hcHBpbmcpOwogCiAJZXJyID0gcmVhbGlu b2RlLT5pX29wLT5maWVtYXAocmVhbGlub2RlLCBmaWVpbmZvLCBzdGFydCwgbGVuKTsKLQlyZXZl cnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3JlZHMoaW5vZGUtPmlfc2IsIG9sZF9j cmVkKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvbmFtZWku YyBiL2ZzL292ZXJsYXlmcy9uYW1laS5jCmluZGV4IGE0YTQ1MmM0ODlmYS4uYmFiMWY5N2RjMjAx IDEwMDY0NAotLS0gYS9mcy9vdmVybGF5ZnMvbmFtZWkuYworKysgYi9mcy9vdmVybGF5ZnMvbmFt ZWkuYwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAgc3RydWN0IGRlbnRyeSAqb3ZsX2xvb2t1cChzdHJ1 Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJZ290byBvdXRfZnJlZV9v ZTsKIAl9CiAKLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3JlZHMoZGVu dHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAJaWYgKG9yaWdpbl9wYXRoKSB7CiAJCWRwdXQob3JpZ2lu X3BhdGgtPmRlbnRyeSk7CiAJCWtmcmVlKG9yaWdpbl9wYXRoKTsKQEAgLTExMDYsNyArMTEwNiw3 IEBAIHN0cnVjdCBkZW50cnkgKm92bF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBk ZW50cnkgKmRlbnRyeSwKIAlrZnJlZSh1cHBlcnJlZGlyZWN0KTsKIG91dDoKIAlrZnJlZShkLnJl ZGlyZWN0KTsKLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQpOworCW92bF9yZXZlcnRfY3JlZHMoZGVu dHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIApAQCAtMTE2 MCw3ICsxMTYwLDcgQEAgYm9vbCBvdmxfbG93ZXJfcG9zaXRpdmUoc3RydWN0IGRlbnRyeSAqZGVu dHJ5KQogCQkJZHB1dCh0aGlzKTsKIAkJfQogCX0KLQlyZXZlcnRfY3JlZHMob2xkX2NyZWQpOwor CW92bF9yZXZlcnRfY3JlZHMoZGVudHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAKIAlyZXR1cm4gcG9z aXRpdmU7CiB9CmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvb3ZlcmxheWZzLmggYi9mcy9vdmVy bGF5ZnMvb3ZlcmxheWZzLmgKaW5kZXggOWQyNmQ4NzU4NTEzLi5hZDFhMTFlN2VjYmQgMTAwNjQ0 Ci0tLSBhL2ZzL292ZXJsYXlmcy9vdmVybGF5ZnMuaAorKysgYi9mcy9vdmVybGF5ZnMvb3Zlcmxh eWZzLmgKQEAgLTIwNSw2ICsyMDUsNyBAQCBpbnQgb3ZsX3dhbnRfd3JpdGUoc3RydWN0IGRlbnRy eSAqZGVudHJ5KTsKIHZvaWQgb3ZsX2Ryb3Bfd3JpdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsK IHN0cnVjdCBkZW50cnkgKm92bF93b3JrZGlyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBjb25z dCBzdHJ1Y3QgY3JlZCAqb3ZsX292ZXJyaWRlX2NyZWRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2Ip Owordm9pZCBvdmxfcmV2ZXJ0X2NyZWRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0 cnVjdCBjcmVkICpvbGRjcmVkKTsKIHNzaXplX3Qgb3ZsX2RvX3Zmc19nZXR4YXR0cihzdHJ1Y3Qg ZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZiwKIAkJCSAgICBzaXpl X3Qgc2l6ZSk7CiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKm92bF9zYW1lX3NiKHN0cnVjdCBzdXBlcl9i bG9jayAqc2IpOwpkaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL292bF9lbnRyeS5oIGIvZnMvb3Zl cmxheWZzL292bF9lbnRyeS5oCmluZGV4IDI4YTJkMTJhMTAyOS4uMjYzN2M1YWFkZjdmIDEwMDY0 NAotLS0gYS9mcy9vdmVybGF5ZnMvb3ZsX2VudHJ5LmgKKysrIGIvZnMvb3ZlcmxheWZzL292bF9l bnRyeS5oCkBAIC0xNyw2ICsxNyw3IEBAIHN0cnVjdCBvdmxfY29uZmlnIHsKIAlib29sIG5mc19l eHBvcnQ7CiAJaW50IHhpbm87CiAJYm9vbCBtZXRhY29weTsKKwlib29sIG92ZXJyaWRlX2NyZWRz OwogfTsKIAogc3RydWN0IG92bF9zYiB7CmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvcmVhZGRp ci5jIGIvZnMvb3ZlcmxheWZzL3JlYWRkaXIuYwppbmRleCA0N2E5MWM5NzMzYTUuLjg3NGExYjNm Zjk5YSAxMDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL3JlYWRkaXIuYworKysgYi9mcy9vdmVybGF5 ZnMvcmVhZGRpci5jCkBAIC0yODYsNyArMjg2LDcgQEAgc3RhdGljIGludCBvdmxfY2hlY2tfd2hp dGVvdXRzKHN0cnVjdCBkZW50cnkgKmRpciwgc3RydWN0IG92bF9yZWFkZGlyX2RhdGEgKnJkZCkK IAkJfQogCQlpbm9kZV91bmxvY2soZGlyLT5kX2lub2RlKTsKIAl9Ci0JcmV2ZXJ0X2NyZWRzKG9s ZF9jcmVkKTsKKwlvdmxfcmV2ZXJ0X2NyZWRzKHJkZC0+ZGVudHJ5LT5kX3NiLCBvbGRfY3JlZCk7 CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtOTE4LDcgKzkxOCw3IEBAIGludCBvdmxfY2hlY2tfZW1w dHlfZGlyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIAog CW9sZF9jcmVkID0gb3ZsX292ZXJyaWRlX2NyZWRzKGRlbnRyeS0+ZF9zYik7CiAJZXJyID0gb3Zs X2Rpcl9yZWFkX21lcmdlZChkZW50cnksIGxpc3QsICZyb290KTsKLQlyZXZlcnRfY3JlZHMob2xk X2NyZWQpOworCW92bF9yZXZlcnRfY3JlZHMoZGVudHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAJaWYg KGVycikKIAkJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL3N1cGVyLmMg Yi9mcy9vdmVybGF5ZnMvc3VwZXIuYwppbmRleCA2ZjA0MWUxZmNlZGEuLjJjMTI3ODQ1MWYzOCAx MDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL3N1cGVyLmMKKysrIGIvZnMvb3ZlcmxheWZzL3N1cGVy LmMKQEAgLTUzLDYgKzUzLDExIEBAIG1vZHVsZV9wYXJhbV9uYW1lZCh4aW5vX2F1dG8sIG92bF94 aW5vX2F1dG9fZGVmLCBib29sLCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoeGlub19hdXRvLAog CQkgIkF1dG8gZW5hYmxlIHhpbm8gZmVhdHVyZSIpOwogCitzdGF0aWMgYm9vbCBfX3JlYWRfbW9z dGx5IG92bF9vdmVycmlkZV9jcmVkc19kZWYgPSB0cnVlOworbW9kdWxlX3BhcmFtX25hbWVkKG92 ZXJyaWRlX2NyZWRzLCBvdmxfb3ZlcnJpZGVfY3JlZHNfZGVmLCBib29sLCAwNjQ0KTsKK01PRFVM RV9QQVJNX0RFU0Mob3ZsX292ZXJyaWRlX2NyZWRzX2RlZiwKKwkJICJVc2UgbW91bnRlcidzIGNy ZWRlbnRpYWxzIGZvciBhY2Nlc3NlcyIpOworCiBzdGF0aWMgdm9pZCBvdmxfZW50cnlfc3RhY2tf ZnJlZShzdHJ1Y3Qgb3ZsX2VudHJ5ICpvZSkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTM2Miw2 ICszNjcsOSBAQCBzdGF0aWMgaW50IG92bF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpt LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJaWYgKG9mcy0+Y29uZmlnLm1ldGFjb3B5ICE9IG92 bF9tZXRhY29weV9kZWYpCiAJCXNlcV9wcmludGYobSwgIixtZXRhY29weT0lcyIsCiAJCQkgICBv ZnMtPmNvbmZpZy5tZXRhY29weSA/ICJvbiIgOiAib2ZmIik7CisJaWYgKG9mcy0+Y29uZmlnLm92 ZXJyaWRlX2NyZWRzICE9IG92bF9vdmVycmlkZV9jcmVkc19kZWYpCisJCXNlcV9zaG93X29wdGlv bihtLCAib3ZlcnJpZGVfY3JlZHMiLAorCQkJCW9mcy0+Y29uZmlnLm92ZXJyaWRlX2NyZWRzID8g Im9uIiA6ICJvZmYiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDAyLDYgKzQxMCw4IEBAIGVudW0g ewogCU9QVF9YSU5PX0FVVE8sCiAJT1BUX01FVEFDT1BZX09OLAogCU9QVF9NRVRBQ09QWV9PRkYs CisJT1BUX09WRVJSSURFX0NSRURTX09OLAorCU9QVF9PVkVSUklERV9DUkVEU19PRkYsCiAJT1BU X0VSUiwKIH07CiAKQEAgLTQyMCw2ICs0MzAsOCBAQCBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVf dCBvdmxfdG9rZW5zID0gewogCXtPUFRfWElOT19BVVRPLAkJCSJ4aW5vPWF1dG8ifSwKIAl7T1BU X01FVEFDT1BZX09OLAkJIm1ldGFjb3B5PW9uIn0sCiAJe09QVF9NRVRBQ09QWV9PRkYsCQkibWV0 YWNvcHk9b2ZmIn0sCisJe09QVF9PVkVSUklERV9DUkVEU19PTiwJCSJvdmVycmlkZV9jcmVkcz1v biJ9LAorCXtPUFRfT1ZFUlJJREVfQ1JFRFNfT0ZGLAkib3ZlcnJpZGVfY3JlZHM9b2ZmIn0sCiAJ e09QVF9FUlIsCQkJTlVMTH0KIH07CiAKQEAgLTQ3OCw2ICs0OTAsNyBAQCBzdGF0aWMgaW50IG92 bF9wYXJzZV9vcHQoY2hhciAqb3B0LCBzdHJ1Y3Qgb3ZsX2NvbmZpZyAqY29uZmlnKQogCWNvbmZp Zy0+cmVkaXJlY3RfbW9kZSA9IGtzdHJkdXAob3ZsX3JlZGlyZWN0X21vZGVfZGVmKCksIEdGUF9L RVJORUwpOwogCWlmICghY29uZmlnLT5yZWRpcmVjdF9tb2RlKQogCQlyZXR1cm4gLUVOT01FTTsK Kwljb25maWctPm92ZXJyaWRlX2NyZWRzID0gb3ZsX292ZXJyaWRlX2NyZWRzX2RlZjsKIAogCXdo aWxlICgocCA9IG92bF9uZXh0X29wdCgmb3B0KSkgIT0gTlVMTCkgewogCQlpbnQgdG9rZW47CkBA IC01NTgsNiArNTcxLDE0IEBAIHN0YXRpYyBpbnQgb3ZsX3BhcnNlX29wdChjaGFyICpvcHQsIHN0 cnVjdCBvdmxfY29uZmlnICpjb25maWcpCiAJCQljb25maWctPm1ldGFjb3B5ID0gZmFsc2U7CiAJ CQlicmVhazsKIAorCQljYXNlIE9QVF9PVkVSUklERV9DUkVEU19PTjoKKwkJCWNvbmZpZy0+b3Zl cnJpZGVfY3JlZHMgPSB0cnVlOworCQkJYnJlYWs7CisKKwkJY2FzZSBPUFRfT1ZFUlJJREVfQ1JF RFNfT0ZGOgorCQkJY29uZmlnLT5vdmVycmlkZV9jcmVkcyA9IGZhbHNlOworCQkJYnJlYWs7CisK IAkJZGVmYXVsdDoKIAkJCXByX2Vycigib3ZlcmxheWZzOiB1bnJlY29nbml6ZWQgbW91bnQgb3B0 aW9uIFwiJXNcIiBvciBtaXNzaW5nIHZhbHVlXG4iLCBwKTsKIAkJCXJldHVybiAtRUlOVkFMOwpA QCAtMTY3NCw3ICsxNjk1LDYgQEAgc3RhdGljIGludCBvdmxfZmlsbF9zdXBlcihzdHJ1Y3Qgc3Vw ZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQogCQkgICAgICAgb3ZsX2RlbnRy eV9sb3dlcihyb290X2RlbnRyeSksIE5VTEwpOwogCiAJc2ItPnNfcm9vdCA9IHJvb3RfZGVudHJ5 OwotCiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlX29lOgpkaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZz L3V0aWwuYyBiL2ZzL292ZXJsYXlmcy91dGlsLmMKaW5kZXggYzU4OGMwZDY2ZDhjLi45ZTk3ZTc4 NWU0NGMgMTAwNjQ0Ci0tLSBhL2ZzL292ZXJsYXlmcy91dGlsLmMKKysrIGIvZnMvb3ZlcmxheWZz L3V0aWwuYwpAQCAtMzcsOSArMzcsMTcgQEAgY29uc3Qgc3RydWN0IGNyZWQgKm92bF9vdmVycmlk ZV9jcmVkcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCBvdmxfZnMgKm9mcyA9 IHNiLT5zX2ZzX2luZm87CiAKKwlpZiAoIW9mcy0+Y29uZmlnLm92ZXJyaWRlX2NyZWRzKQorCQly ZXR1cm4gTlVMTDsKIAlyZXR1cm4gb3ZlcnJpZGVfY3JlZHMob2ZzLT5jcmVhdG9yX2NyZWQpOwog fQogCit2b2lkIG92bF9yZXZlcnRfY3JlZHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qg c3RydWN0IGNyZWQgKm9sZF9jcmVkKQoreworCWlmIChvbGRfY3JlZCkKKwkJcmV2ZXJ0X2NyZWRz KG9sZF9jcmVkKTsKK30KKwogc3NpemVfdCBvdmxfZG9fdmZzX2dldHhhdHRyKHN0cnVjdCBkZW50 cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmLAogCQkJICAgIHNpemVfdCBz aXplKQogewpAQCAtNzk4LDcgKzgwNiw3IEBAIGludCBvdmxfbmxpbmtfc3RhcnQoc3RydWN0IGRl bnRyeSAqZGVudHJ5KQogCSAqIHZhbHVlIHJlbGF0aXZlIHRvIHRoZSB1cHBlciBpbm9kZSBubGlu ayBpbiBhbiB1cHBlciBpbm9kZSB4YXR0ci4KIAkgKi8KIAllcnIgPSBvdmxfc2V0X25saW5rX3Vw cGVyKGRlbnRyeSk7Ci0JcmV2ZXJ0X2NyZWRzKG9sZF9jcmVkKTsKKwlvdmxfcmV2ZXJ0X2NyZWRz KGRlbnRyeS0+ZF9zYiwgb2xkX2NyZWQpOwogCiBvdXQ6CiAJaWYgKGVycikKQEAgLTgxNiw3ICs4 MjQsNyBAQCB2b2lkIG92bF9ubGlua19lbmQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCiAJCW9s ZF9jcmVkID0gb3ZsX292ZXJyaWRlX2NyZWRzKGRlbnRyeS0+ZF9zYik7CiAJCW92bF9jbGVhbnVw X2luZGV4KGRlbnRyeSk7Ci0JCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CisJCW92bF9yZXZlcnRf Y3JlZHMoZGVudHJ5LT5kX3NiLCBvbGRfY3JlZCk7CiAJfQogCiAJb3ZsX2lub2RlX3VubG9jayhp bm9kZSk7Ci0tIAoyLjIyLjAuNzcwLmcwZjJjNGEzN2ZkLWdvb2cKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXggTVREIGRpc2N1c3Np b24gbWFpbGluZyBsaXN0Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGlu Zm8vbGludXgtbXRkLwo= 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 78949C433FF for ; Wed, 31 Jul 2019 16:59:03 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 132B720C01 for ; Wed, 31 Jul 2019 16:59:03 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=android.com header.i=@android.com header.b="NxNTAM7e" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 132B720C01 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 A9A5B8E000A; Wed, 31 Jul 2019 12:59:02 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A24018E0001; Wed, 31 Jul 2019 12:59:02 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 876EB8E000A; Wed, 31 Jul 2019 12:59:02 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by kanga.kvack.org (Postfix) with ESMTP id 441218E0001 for ; Wed, 31 Jul 2019 12:59:02 -0400 (EDT) Received: by mail-pg1-f200.google.com with SMTP id q10so20057331pgi.9 for ; Wed, 31 Jul 2019 09:59:02 -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=ddnpbwfJp/Jg1pT3kuq1L6l9gRs3Cs0gd96QxcsmyTc=; b=WA9w3sQ7sbrcwjcHnfKi5VzCjPfTSOnpHeXJlLSiBK7x8KY/3ZJJeL+QXEvBKtP/wR 7Y1DN9QdkOyyd+RgppyAMCTbSmGVQ21U6rSj89LOZrlQ7mhRUfNh5no0gjFbItdYyjGy cJU4lT8TNuHSZJuzagb9EPYJROFKeGMp3vmKJ4c2yzKFJ5omdv3JolNlVZJgPD32hdsk cXxmHN+Q8c9izHVnXVTGrKqaaN59ZZBJkYtWypzQ2SwLBEk3sXKtD6KC9+/hEhpgpcH3 mlJEpP0DbYP5wuauUMCPO2ksUI+Y1Xr0ctmJVWY0vQ5Ijmgzec1/bxY+K6sB0UpB16yH NdvQ== X-Gm-Message-State: APjAAAXcbn4FoQuW5gJzAUfyg7anhUZxWdDEUh7qBq83V6IxMzGKZ1oo v3JElkwnik3FWj+p504XKLXi03LdntDF/yTyWoK2tCTnniUZKytw4d3mgk9DBDSV1SDeeuB8c2C RAoRyrGO58vP2thCvGsLEwSD0RR1jBvimVvKMIGo47LwIjUpZQZBUOcAm/wyCpfnN3Q== X-Received: by 2002:a63:4522:: with SMTP id s34mr113811677pga.362.1564592341680; Wed, 31 Jul 2019 09:59:01 -0700 (PDT) X-Received: by 2002:a63:4522:: with SMTP id s34mr113811604pga.362.1564592339996; Wed, 31 Jul 2019 09:58:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564592339; cv=none; d=google.com; s=arc-20160816; b=HoiubgFNeagk9xHKPxpU9IFzqCdqbw3eFH9fK0cyxMQMnYe0zDZ0km4f+XvdmOWunx hlJ6wfsHpNV/XkpqpGQWJVlA5DoRLgjaqq/rwFtzSbmU9H9EaKv+tppmnWeU6qUuQsIh JHIdFlf9DJ3BIZOUJ2CidQFhy5C62iaRJwjm3nqlFsfZuN5ZVkHj12HGcW1QuOFRFLSm aCYtqOlO4F4Ti4+GrFVms6u9DmaA3vyDgc7QXoB6gqqcMByR60pmd0KFgwHKYpOoc+IR qmpLzpKkGZhB1jbX7YGg0+zz1am0SET0uAEKUxn9/punVXLJaQnWMer4Go8LNDus3YFT 7UAg== 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=ddnpbwfJp/Jg1pT3kuq1L6l9gRs3Cs0gd96QxcsmyTc=; b=qSYFx3eth8Lawj71Cc1DwBC37HWjxlD56h098/Z6lZw8WA5s3teUj1Onf7VMYah1ep OhcGy9Qs9HDWSoFAhRm8K62G1yW+ypuBpHHFYnwvkOs4K/J9jcgIfbyaFjpklt0jGwnk JQl9eMvnD6frc8YxRkzyey1Bwkf5ntrpxAhLkaLMXHQd9LWAZm57obVUAObbEqLM+tY+ KiYsf1XmLhplXba0+q5jypkdP7++ftOr0pIs/NTn3ie5OgzDEIO5XSEHaVgu2PlLwr6z eL227urHsGUd6OVPAO5+E4i7dGCm4AHXb3BgmsPmy7cWtC2wLkoW4DqOo5q1dQSrjLYE o4Ng== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@android.com header.s=20161025 header.b=NxNTAM7e; 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 f9sor82460297plr.31.2019.07.31.09.58.59 for (Google Transport Security); Wed, 31 Jul 2019 09:58:59 -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=NxNTAM7e; 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=ddnpbwfJp/Jg1pT3kuq1L6l9gRs3Cs0gd96QxcsmyTc=; b=NxNTAM7ePY8xngcq2yrLiNdxT7CuMygtVKpGXjyTP1843Lxq3fuRcpO356BEw65bML cslir7uf6cvVuCP9q4xsk5uosGElWGirNimNzKrc650HUmz1fcBB61CoIH5xL+D6t+CN lkgiXjR28DexwU9n5MUD3Rjni5SxfQKoEMJtAXxirw4R0yG+pAisAOWmheolYpwp53ID 4zZ50cuVIfn/XOJq39llAkPYw0YtG0AM8a81+qWkiTu+RGung173hM1OoZAbjwJnu0ik UAxNyUzM3oGCOwLas54+/ewVgWOJ+RFTHxNEgnLne0IkbzKnN487Iy0JoBLRQK2Hoy+6 RnyQ== X-Google-Smtp-Source: APXvYqw/fnityvjNohJ2x3SxdKBfN0+54rDA11lGujd0yUSK2/q6bwTxrbWfMZk+DO1MQPqz4TBhTA== X-Received: by 2002:a17:902:694a:: with SMTP id k10mr120262361plt.255.1564592339473; Wed, 31 Jul 2019 09:58:59 -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.57 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Wed, 31 Jul 2019 09:58:58 -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 Subject: [PATCH v13 5/5] overlayfs: override_creds=off option bypass creator_cred Date: Wed, 31 Jul 2019 09:58:00 -0700 Message-Id: <20190731165803.4755-6-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: By default, all access to the upper, lower and work directories is the recorded mounter's MAC and DAC credentials. The incoming accesses are checked against the caller's credentials. If the principles of least privilege are applied, the mounter's credentials might not overlap the credentials of the caller's when accessing the overlayfs filesystem. For example, a file that a lower DAC privileged caller can execute, is MAC denied to the generally higher DAC privileged mounter, to prevent an attack vector. We add the option to turn off override_creds in the mount options; all subsequent operations after mount on the filesystem will be only the caller's credentials. The module boolean parameter and mount option override_creds is also added as a presence check for this "feature", existence of /sys/module/overlay/parameters/override_creds. It was not always this way. Circa 4.6 there was no recorded mounter's credentials, instead privileged access to upper or work directories were temporarily increased to perform the operations. The MAC (selinux) policies were caller's in all cases. override_creds=off partially returns us to this older access model minus the insecure temporary credential increases. This is to permit use in a system with non-overlapping security models for each executable including the agent that mounts the overlayfs filesystem. In Android this is the case since init, which performs the mount operations, has a minimal MAC set of privileges to reduce any attack surface, and services that use the content have a different set of MAC privileges (eg: read, for vendor labelled configuration, execute for vendor libraries and modules). The caveats are not a problem in the Android usage model, however they should be fixed for completeness and for general use in time. 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 NB: this is a desired feature --- v12 + v13: - Rebase v11: - add sb argument to ovl_revert_creds to match future work v10: - Rebase (and expand because of increased revert_cred usage) v9: - Add to the caveats v8: - drop pr_warn message after straw poll to remove it. - added a use case in the commit message v7: - change name of internal parameter to ovl_override_creds_def - report override_creds only if different than default v6: - Drop CONFIG_OVERLAY_FS_OVERRIDE_CREDS. - Do better with the documentation. - pr_warn message adjusted to report consequences. v5: - beefed up the caveats in the Documentation - Is dependent on "overlayfs: check CAP_DAC_READ_SEARCH before issuing exportfs_decode_fh" "overlayfs: check CAP_MKNOD before issuing vfs_whiteout" - Added prwarn when override_creds=off v4: - spelling and grammar errors in text v3: - Change name from caller_credentials / creator_credentials to the boolean override_creds. - Changed from creator to mounter credentials. - Updated and fortified the documentation. - Added CONFIG_OVERLAY_FS_OVERRIDE_CREDS v2: - Forward port changed attr to stat, resulting in a build error. - altered commit message. --- Documentation/filesystems/overlayfs.txt | 23 +++++++++++++++++++++++ fs/overlayfs/copy_up.c | 2 +- fs/overlayfs/dir.c | 11 ++++++----- fs/overlayfs/file.c | 20 ++++++++++---------- fs/overlayfs/inode.c | 18 +++++++++--------- fs/overlayfs/namei.c | 6 +++--- fs/overlayfs/overlayfs.h | 1 + fs/overlayfs/ovl_entry.h | 1 + fs/overlayfs/readdir.c | 4 ++-- fs/overlayfs/super.c | 22 +++++++++++++++++++++- fs/overlayfs/util.c | 12 ++++++++++-- 11 files changed, 87 insertions(+), 33 deletions(-) diff --git a/Documentation/filesystems/overlayfs.txt b/Documentation/filesystems/overlayfs.txt index 1da2f1668f08..d48125076602 100644 --- a/Documentation/filesystems/overlayfs.txt +++ b/Documentation/filesystems/overlayfs.txt @@ -102,6 +102,29 @@ Only the lists of names from directories are merged. Other content such as metadata and extended attributes are reported for the upper directory only. These attributes of the lower directory are hidden. +credentials +----------- + +By default, all access to the upper, lower and work directories is the +recorded mounter's MAC and DAC credentials. The incoming accesses are +checked against the caller's credentials. + +In the case where caller MAC or DAC credentials do not overlap, a +use case available in older versions of the driver, the +override_creds mount flag can be turned off and help when the use +pattern has caller with legitimate credentials where the mounter +does not. Several unintended side effects will occur though. The +caller without certain key capabilities or lower privilege will not +always be able to delete files or directories, create nodes, or +search some restricted directories. The ability to search and read +a directory entry is spotty as a result of the cache mechanism not +retesting the credentials because of the assumption, a privileged +caller can fill cache, then a lower privilege can read the directory +cache. The uneven security model where cache, upperdir and workdir +are opened at privilege, but accessed without creating a form of +privilege escalation, should only be used with strict understanding +of the side effects and of the security policies. + whiteouts and opaque directories -------------------------------- diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c index b801c6353100..1c1b9415e533 100644 --- a/fs/overlayfs/copy_up.c +++ b/fs/overlayfs/copy_up.c @@ -886,7 +886,7 @@ int ovl_copy_up_flags(struct dentry *dentry, int flags) dput(parent); dput(next); } - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return err; } diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c index 702aa63f6774..49b8ffc1294f 100644 --- a/fs/overlayfs/dir.c +++ b/fs/overlayfs/dir.c @@ -563,7 +563,8 @@ static int ovl_create_or_link(struct dentry *dentry, struct inode *inode, override_cred->fsgid = inode->i_gid; if (!attr->hardlink) { err = security_dentry_create_files_as(dentry, - attr->mode, &dentry->d_name, old_cred, + attr->mode, &dentry->d_name, + old_cred ? old_cred : current_cred(), override_cred); if (err) { put_cred(override_cred); @@ -579,7 +580,7 @@ static int ovl_create_or_link(struct dentry *dentry, struct inode *inode, err = ovl_create_over_whiteout(dentry, inode, attr); } out_revert_creds: - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return err; } @@ -655,7 +656,7 @@ static int ovl_set_link_redirect(struct dentry *dentry) old_cred = ovl_override_creds(dentry->d_sb); err = ovl_set_redirect(dentry, false); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return err; } @@ -851,7 +852,7 @@ static int ovl_do_remove(struct dentry *dentry, bool is_dir) err = ovl_remove_upper(dentry, is_dir, &list); else err = ovl_remove_and_whiteout(dentry, &list); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); if (!err) { if (is_dir) clear_nlink(dentry->d_inode); @@ -1221,7 +1222,7 @@ static int ovl_rename(struct inode *olddir, struct dentry *old, out_unlock: unlock_rename(new_upperdir, old_upperdir); out_revert_creds: - revert_creds(old_cred); + ovl_revert_creds(old->d_sb, old_cred); if (update_nlink) ovl_nlink_end(new); out_drop_write: diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c index e235a635d9ec..d94d6ec785a7 100644 --- a/fs/overlayfs/file.c +++ b/fs/overlayfs/file.c @@ -32,7 +32,7 @@ static struct file *ovl_open_realfile(const struct file *file, old_cred = ovl_override_creds(inode->i_sb); realfile = open_with_fake_path(&file->f_path, flags, realinode, current_cred()); - revert_creds(old_cred); + ovl_revert_creds(inode->i_sb, old_cred); pr_debug("open(%p[%pD2/%c], 0%o) -> (%p, 0%o)\n", file, file, ovl_whatisit(inode, realinode), file->f_flags, @@ -176,7 +176,7 @@ static loff_t ovl_llseek(struct file *file, loff_t offset, int whence) old_cred = ovl_override_creds(inode->i_sb); ret = vfs_llseek(real.file, offset, whence); - revert_creds(old_cred); + ovl_revert_creds(inode->i_sb, old_cred); file->f_pos = real.file->f_pos; inode_unlock(inode); @@ -242,7 +242,7 @@ static ssize_t ovl_read_iter(struct kiocb *iocb, struct iov_iter *iter) old_cred = ovl_override_creds(file_inode(file)->i_sb); ret = vfs_iter_read(real.file, iter, &iocb->ki_pos, ovl_iocb_to_rwf(iocb)); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); ovl_file_accessed(file); @@ -278,7 +278,7 @@ static ssize_t ovl_write_iter(struct kiocb *iocb, struct iov_iter *iter) ret = vfs_iter_write(real.file, iter, &iocb->ki_pos, ovl_iocb_to_rwf(iocb)); file_end_write(real.file); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); /* Update size */ ovl_copyattr(ovl_inode_real(inode), inode); @@ -305,7 +305,7 @@ static int ovl_fsync(struct file *file, loff_t start, loff_t end, int datasync) if (file_inode(real.file) == ovl_inode_upper(file_inode(file))) { old_cred = ovl_override_creds(file_inode(file)->i_sb); ret = vfs_fsync_range(real.file, start, end, datasync); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); } fdput(real); @@ -329,7 +329,7 @@ static int ovl_mmap(struct file *file, struct vm_area_struct *vma) old_cred = ovl_override_creds(file_inode(file)->i_sb); ret = call_mmap(vma->vm_file, vma); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); if (ret) { /* Drop reference count from new vm_file value */ @@ -357,7 +357,7 @@ static long ovl_fallocate(struct file *file, int mode, loff_t offset, loff_t len old_cred = ovl_override_creds(file_inode(file)->i_sb); ret = vfs_fallocate(real.file, mode, offset, len); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); /* Update size */ ovl_copyattr(ovl_inode_real(inode), inode); @@ -379,7 +379,7 @@ static int ovl_fadvise(struct file *file, loff_t offset, loff_t len, int advice) old_cred = ovl_override_creds(file_inode(file)->i_sb); ret = vfs_fadvise(real.file, offset, len, advice); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); fdput(real); @@ -399,7 +399,7 @@ static long ovl_real_ioctl(struct file *file, unsigned int cmd, old_cred = ovl_override_creds(file_inode(file)->i_sb); ret = vfs_ioctl(real.file, cmd, arg); - revert_creds(old_cred); + ovl_revert_creds(file_inode(file)->i_sb, old_cred); fdput(real); @@ -589,7 +589,7 @@ static loff_t ovl_copyfile(struct file *file_in, loff_t pos_in, flags); break; } - revert_creds(old_cred); + ovl_revert_creds(file_inode(file_out)->i_sb, old_cred); /* Update size */ ovl_copyattr(ovl_inode_real(inode_out), inode_out); diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c index 1bf11ae44313..fc1828aa30ed 100644 --- a/fs/overlayfs/inode.c +++ b/fs/overlayfs/inode.c @@ -61,7 +61,7 @@ int ovl_setattr(struct dentry *dentry, struct iattr *attr) inode_lock(upperdentry->d_inode); old_cred = ovl_override_creds(dentry->d_sb); err = notify_change(upperdentry, attr, NULL); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); if (!err) ovl_copyattr(upperdentry->d_inode, dentry->d_inode); inode_unlock(upperdentry->d_inode); @@ -257,7 +257,7 @@ int ovl_getattr(const struct path *path, struct kstat *stat, stat->nlink = dentry->d_inode->i_nlink; out: - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return err; } @@ -291,7 +291,7 @@ int ovl_permission(struct inode *inode, int mask) mask |= MAY_READ; } err = inode_permission(realinode, mask); - revert_creds(old_cred); + ovl_revert_creds(inode->i_sb, old_cred); return err; } @@ -308,7 +308,7 @@ static const char *ovl_get_link(struct dentry *dentry, old_cred = ovl_override_creds(dentry->d_sb); p = vfs_get_link(ovl_dentry_real(dentry), done); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return p; } @@ -351,7 +351,7 @@ int ovl_xattr_set(struct dentry *dentry, struct inode *inode, const char *name, WARN_ON(flags != XATTR_REPLACE); err = vfs_removexattr(realdentry, name); } - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); /* copy c/mtime */ ovl_copyattr(d_inode(realdentry), inode); @@ -373,7 +373,7 @@ int ovl_xattr_get(struct dentry *dentry, struct inode *inode, const char *name, old_cred = ovl_override_creds(dentry->d_sb); res = __vfs_getxattr(realdentry, d_inode(realdentry), name, value, size, flags); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return res; } @@ -397,7 +397,7 @@ ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size) old_cred = ovl_override_creds(dentry->d_sb); res = vfs_listxattr(realdentry, list, size); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); if (res <= 0 || size == 0) return res; @@ -432,7 +432,7 @@ struct posix_acl *ovl_get_acl(struct inode *inode, int type) old_cred = ovl_override_creds(inode->i_sb); acl = get_acl(realinode, type); - revert_creds(old_cred); + ovl_revert_creds(inode->i_sb, old_cred); return acl; } @@ -470,7 +470,7 @@ static int ovl_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, filemap_write_and_wait(realinode->i_mapping); err = realinode->i_op->fiemap(realinode, fieinfo, start, len); - revert_creds(old_cred); + ovl_revert_creds(inode->i_sb, old_cred); return err; } diff --git a/fs/overlayfs/namei.c b/fs/overlayfs/namei.c index a4a452c489fa..bab1f97dc201 100644 --- a/fs/overlayfs/namei.c +++ b/fs/overlayfs/namei.c @@ -1079,7 +1079,7 @@ struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry, goto out_free_oe; } - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); if (origin_path) { dput(origin_path->dentry); kfree(origin_path); @@ -1106,7 +1106,7 @@ struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry, kfree(upperredirect); out: kfree(d.redirect); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return ERR_PTR(err); } @@ -1160,7 +1160,7 @@ bool ovl_lower_positive(struct dentry *dentry) dput(this); } } - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); return positive; } diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h index 9d26d8758513..ad1a11e7ecbd 100644 --- a/fs/overlayfs/overlayfs.h +++ b/fs/overlayfs/overlayfs.h @@ -205,6 +205,7 @@ int ovl_want_write(struct dentry *dentry); void ovl_drop_write(struct dentry *dentry); struct dentry *ovl_workdir(struct dentry *dentry); const struct cred *ovl_override_creds(struct super_block *sb); +void ovl_revert_creds(struct super_block *sb, const struct cred *oldcred); ssize_t ovl_do_vfs_getxattr(struct dentry *dentry, const char *name, void *buf, size_t size); struct super_block *ovl_same_sb(struct super_block *sb); diff --git a/fs/overlayfs/ovl_entry.h b/fs/overlayfs/ovl_entry.h index 28a2d12a1029..2637c5aadf7f 100644 --- a/fs/overlayfs/ovl_entry.h +++ b/fs/overlayfs/ovl_entry.h @@ -17,6 +17,7 @@ struct ovl_config { bool nfs_export; int xino; bool metacopy; + bool override_creds; }; struct ovl_sb { diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c index 47a91c9733a5..874a1b3ff99a 100644 --- a/fs/overlayfs/readdir.c +++ b/fs/overlayfs/readdir.c @@ -286,7 +286,7 @@ static int ovl_check_whiteouts(struct dentry *dir, struct ovl_readdir_data *rdd) } inode_unlock(dir->d_inode); } - revert_creds(old_cred); + ovl_revert_creds(rdd->dentry->d_sb, old_cred); return err; } @@ -918,7 +918,7 @@ int ovl_check_empty_dir(struct dentry *dentry, struct list_head *list) old_cred = ovl_override_creds(dentry->d_sb); err = ovl_dir_read_merged(dentry, list, &root); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); if (err) return err; diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index 6f041e1fceda..2c1278451f38 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -53,6 +53,11 @@ module_param_named(xino_auto, ovl_xino_auto_def, bool, 0644); MODULE_PARM_DESC(xino_auto, "Auto enable xino feature"); +static bool __read_mostly ovl_override_creds_def = true; +module_param_named(override_creds, ovl_override_creds_def, bool, 0644); +MODULE_PARM_DESC(ovl_override_creds_def, + "Use mounter's credentials for accesses"); + static void ovl_entry_stack_free(struct ovl_entry *oe) { unsigned int i; @@ -362,6 +367,9 @@ static int ovl_show_options(struct seq_file *m, struct dentry *dentry) if (ofs->config.metacopy != ovl_metacopy_def) seq_printf(m, ",metacopy=%s", ofs->config.metacopy ? "on" : "off"); + if (ofs->config.override_creds != ovl_override_creds_def) + seq_show_option(m, "override_creds", + ofs->config.override_creds ? "on" : "off"); return 0; } @@ -402,6 +410,8 @@ enum { OPT_XINO_AUTO, OPT_METACOPY_ON, OPT_METACOPY_OFF, + OPT_OVERRIDE_CREDS_ON, + OPT_OVERRIDE_CREDS_OFF, OPT_ERR, }; @@ -420,6 +430,8 @@ static const match_table_t ovl_tokens = { {OPT_XINO_AUTO, "xino=auto"}, {OPT_METACOPY_ON, "metacopy=on"}, {OPT_METACOPY_OFF, "metacopy=off"}, + {OPT_OVERRIDE_CREDS_ON, "override_creds=on"}, + {OPT_OVERRIDE_CREDS_OFF, "override_creds=off"}, {OPT_ERR, NULL} }; @@ -478,6 +490,7 @@ static int ovl_parse_opt(char *opt, struct ovl_config *config) config->redirect_mode = kstrdup(ovl_redirect_mode_def(), GFP_KERNEL); if (!config->redirect_mode) return -ENOMEM; + config->override_creds = ovl_override_creds_def; while ((p = ovl_next_opt(&opt)) != NULL) { int token; @@ -558,6 +571,14 @@ static int ovl_parse_opt(char *opt, struct ovl_config *config) config->metacopy = false; break; + case OPT_OVERRIDE_CREDS_ON: + config->override_creds = true; + break; + + case OPT_OVERRIDE_CREDS_OFF: + config->override_creds = false; + break; + default: pr_err("overlayfs: unrecognized mount option \"%s\" or missing value\n", p); return -EINVAL; @@ -1674,7 +1695,6 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) ovl_dentry_lower(root_dentry), NULL); sb->s_root = root_dentry; - return 0; out_free_oe: diff --git a/fs/overlayfs/util.c b/fs/overlayfs/util.c index c588c0d66d8c..9e97e785e44c 100644 --- a/fs/overlayfs/util.c +++ b/fs/overlayfs/util.c @@ -37,9 +37,17 @@ const struct cred *ovl_override_creds(struct super_block *sb) { struct ovl_fs *ofs = sb->s_fs_info; + if (!ofs->config.override_creds) + return NULL; return override_creds(ofs->creator_cred); } +void ovl_revert_creds(struct super_block *sb, const struct cred *old_cred) +{ + if (old_cred) + revert_creds(old_cred); +} + ssize_t ovl_do_vfs_getxattr(struct dentry *dentry, const char *name, void *buf, size_t size) { @@ -798,7 +806,7 @@ int ovl_nlink_start(struct dentry *dentry) * value relative to the upper inode nlink in an upper inode xattr. */ err = ovl_set_nlink_upper(dentry); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); out: if (err) @@ -816,7 +824,7 @@ void ovl_nlink_end(struct dentry *dentry) old_cred = ovl_override_creds(dentry->d_sb); ovl_cleanup_index(dentry); - revert_creds(old_cred); + ovl_revert_creds(dentry->d_sb, old_cred); } ovl_inode_unlock(inode); -- 2.22.0.770.g0f2c4a37fd-goog