[LTP] [PATCH] umip_basic_test.c: update umip basic test for new kernel v5.4
Li Wang
liwang@redhat.com
Sun Sep 29 05:47:21 CEST 2019
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.
> + #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?
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linux.it/pipermail/ltp/attachments/20190929/3280a602/attachment.htm>
More information about the ltp
mailing list