On 2018-11-06 1:00 p.m., Mark Asselstine wrote:
If you build with CONFIG_STACK_VALIDATION you will get

   CC      fs/aufs/cpup.o
   fs/aufs/cpup.o: warning: objtool: au_cp_regular()+0x24c: sibling call from 
callable instruction with modified stack frame

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.

Signed-off-by: Mark Asselstine <mark.asselst...@windriver.com>
---

This has been sent to the aufs-users ML and will hopefully be merged
upstream for upcoming releases. This patch is created for 4.18.y but
should apply (with possibly some fuzz) to 4.19.x.

merged.

Bruce


  fs/aufs/cpup.c | 10 ++++++----
  1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/fs/aufs/cpup.c b/fs/aufs/cpup.c
index 93d6496aaf68..9a77b1217933 100644
--- a/fs/aufs/cpup.c
+++ b/fs/aufs/cpup.c
@@ -438,13 +438,11 @@ static int au_cp_regular(struct au_cp_generic *cpg)
                {
                        .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, *h_src_sb;
@@ -459,8 +457,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 (f->flags & O_RDONLY)
+                               goto out;
+                       else
+                               goto out_src;
+               }
        }
/* try stopping to update while we copyup */


--
_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to