On Sunday, November 11, 2018 11:08:59 AM EST [email protected]
wrote:
> Mark Asselstine:
> > As stated in tools/objtool/Documentation/stack-validation.txt the use
> > of "Dynamic jumps and jumps to undefined symbols" has several
> > conditions, neither of which we meet. The use of .label to dictate
> > which label we 'goto' can be implemented in several ways that will be
> > 'safe' from the stack validation point of view. Here we drop the
> > .label and instead are able to use the .flags to decide which label to
> > goto. This results in the same end result while ensuring we are a good
> > citizen with respect to the stack validation.
>
> Thank you for the patch.
> Actually I made very similar fix when linux-v4.6-rc1 was released (two
> years ago), but the commit stays in my local development branch and has
> not released. It was my GIT-work mistake.
> Here is my fix, and I am going to release on next Monday.
>
>
> J. R. Okajima
Easy enough mistake, especially given that this has little bearing on
functionality. Very similar change. Thanks for getting the fix merged.
Mark
>
>
> diff --git a/fs/aufs/cpup.c b/fs/aufs/cpup.c
> index 9ff0963..3c74d6f 100644
> --- a/fs/aufs/cpup.c
> +++ b/fs/aufs/cpup.c
> @@ -366,18 +366,15 @@ static int au_cp_regular(struct au_cp_generic *cpg)
> struct dentry *dentry;
> int force_wr;
> struct file *file;
> - void *label;
> } *f, file[] = {
> {
> .bindex = cpg->bsrc,
> .flags = O_RDONLY | O_NOATIME | O_LARGEFILE,
> - .label = &&out
> },
> {
> .bindex = cpg->bdst,
> .flags = O_WRONLY | O_NOATIME | O_LARGEFILE,
> .force_wr = !!au_ftest_cpup(cpg->flags, RWDST),
> - .label = &&out_src
> }
> };
> struct super_block *sb;
> @@ -391,8 +388,12 @@ static int au_cp_regular(struct au_cp_generic *cpg)
> f->file = au_h_open(cpg->dentry, f->bindex, f->flags,
> /*file*/NULL, f->force_wr);
> err = PTR_ERR(f->file);
> - if (IS_ERR(f->file))
> - goto *f->label;
> + if (IS_ERR(f->file)) {
> + if (i == SRC)
> + goto out;
> + else
> + goto out_src;
> + }
> }
>
> /* try stopping to update while we copyup */