[LTP] [PATCH] umip_basic_test.c: update umip basic test for new kernel v5.4

Pengfei Xu pengfei.xu@intel.com
Sun Sep 29 08:34:55 CEST 2019


Hi Li Wang,

  My feedback is as below, thanks!

On 2019-09-29 at 11:47:21 +0800, Li Wang wrote:
> On Fri, Sep 27, 2019 at 11:39 AM Pengfei Xu <pengfei.xu@intel.com> wrote:
> 
> > After linux kernel v5.4 mainline, 64bit SGDT SIDT SMSW will return
> > dummy value and not trigger SIGSEGV due to kernel code change.
> > For detailed kernel update info, you could check v5.4 commit:
> > x86/umip: Add emulation (spoofing) for UMIP covered instructions in
> > 64-bit processes as well
> >
> > Signed-off-by: Pengfei Xu <pengfei.xu@intel.com>
> > ---
> >  testcases/kernel/security/umip/umip_basic_test.c | 25
> > ++++++++++++++++++++++--
> >  1 file changed, 23 insertions(+), 2 deletions(-)
> >
> > diff --git a/testcases/kernel/security/umip/umip_basic_test.c
> > b/testcases/kernel/security/umip/umip_basic_test.c
> > index 37850ef9f..278ae92f6 100644
> > --- a/testcases/kernel/security/umip/umip_basic_test.c
> > +++ b/testcases/kernel/security/umip/umip_basic_test.c
> > @@ -21,6 +21,7 @@
> >  #include <string.h>
> >  #include <sys/wait.h>
> >  #include <signal.h>
> > +#include <linux/version.h>
> >
> >  #include "tst_test.h"
> >  #include "tst_safe_stdio.h"
> > @@ -112,11 +113,31 @@ static void verify_umip_instruction(unsigned int n)
> >
> >         SAFE_WAITPID(pid, &status, 0);
> >
> > +       switch (n) {
> > +       case 0:
> > +       case 1:
> > +       case 3:
> > +               /* after linux kernel v5.4 mainline, 64bit SGDT SIDT SMSW
> > will return
> > +                  dummy value and not trigger SIGSEGV due to kernel code
> > change */
> > +               #if LINUX_VERSION_CODE >= KERNEL_VERSION(5,4,0)
> > +                       tst_res(TINFO, "Linux kernel version is after than
> > v5.4");
> > +                       if (WIFSIGNALED(status) && WTERMSIG(status) ==
> > SIGSEGV) {
> > +                               tst_res(TFAIL, "Got SIGSEGV\n\n");
> > +                               return;
> > +                       }
> > +                       tst_res(TPASS, "Didn't receive SIGSEGV, child
> > exited with %s\n\n",
> > +                               tst_strstatus(status));
> > +                               return;
> > +               #else
> > +                       tst_res(TINFO, "Linux kernel version is before
> > than v5.4");
> >
> 
> Thank you for fixing this.
> 
> My concern is that if an LTS distro backports the patch(commit e86c2c8b93),
> then it will break this hardcode kernel-version comparing.
> 
> 
  Ok, let's wait to confirm umip patch merged into Linux kernel main line,
  and then merge the patch into LTP. :)
  Thanks for your advice!

> 
> > +               #endif
> > +       }
> > +
> >         if (WIFSIGNALED(status) && WTERMSIG(status) == SIGSEGV) {
> > -               tst_res(TPASS, "Got SIGSEGV");
> > +               tst_res(TPASS, "Got SIGSEGV\n\n");
> >
> 
> Why we need two '\n' here?
> 
  Because it could help to split umip cases in LTP, there are 5 umip cases
  in LTP tests, and we could check each umip case easily in LTP log,
  like as below:
  
"
 # ./umip_basic_test
 tst_kconfig.c:62: INFO: Parsing kernel config '/lib/kernel/config-5.3.0-xsuper+'
 tst_test.c:1118: INFO: Timeout per run is 0h 05m 00s
 umip_basic_test.c:160: INFO: cpuinfo contains umip, CPU supports umip
 umip_basic_test.c:41: INFO: TEST sgdt, sgdt result save at [0x7fff930bda8e]
 umip_basic_test.c:132: INFO: Linux kernel version is before v5.4
 umip_basic_test.c:137: PASS: Got SIGSEGV


 umip_basic_test.c:51: INFO: TEST sidt, sidt result save at [0x7fff930bda8e]

 umip_basic_test.c:132: INFO: Linux kernel version is before v5.4
 umip_basic_test.c:137: PASS: Got SIGSEGV


 umip_basic_test.c:60: INFO: TEST sldt, sldt result save at [0x7fff930bda80]

 umip_basic_test.c:137: PASS: Got SIGSEGV


 umip_basic_test.c:69: INFO: TEST smsw, smsw result save at [0x7fff930bda80]

 umip_basic_test.c:132: INFO: Linux kernel version is before v5.4
 umip_basic_test.c:137: PASS: Got SIGSEGV
"
Thanks! :)
> 
> >                 return;
> >         }
> > -       tst_res(TFAIL, "Didn't receive SIGSEGV, child exited with %s",
> > +       tst_res(TFAIL, "Didn't receive SIGSEGV, child exited with %s\n\n",
> >                 tst_strstatus(status));
> >  }
> >
> > --
> > 2.14.1
> >
> >
> > --
> > Mailing list info: https://lists.linux.it/listinfo/ltp
> >
> 
> 
> -- 
> Regards,
> Li Wang


More information about the ltp mailing list