Received: by 2002:ac0:aed5:0:0:0:0:0 with SMTP id t21csp715724imb; Fri, 1 Mar 2019 12:01:40 -0800 (PST) X-Google-Smtp-Source: APXvYqzwNbim9aVyytDATjM60PtDi19+BA+NjWTxafLDOrtbPK8NxT1loDY7iQimTFiCezN2pPAE X-Received: by 2002:a63:6841:: with SMTP id d62mr6571479pgc.133.1551470500530; Fri, 01 Mar 2019 12:01:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551470500; cv=none; d=google.com; s=arc-20160816; b=ws7HnotYgbIPv4+ak7PRoZco7+KbZoMD3bDMO4r4u5bYhaVl5zOTXqba4tHtYfrLOO 6zhw100aW8T6LrnnILL3BdGt3qfSHBKLL80Z+YG+UQOQfRoYaFUo+aMjfN0mhxf+8CvS sEhRd6Qa5U4CxuTRsphtuClHeLDmGuoN91LO4TeRLtiTR9XjOGLCZNNXdv5/bX2TP+Qa 2g4AZzCMMxRKO3VA4fkuSqACsNaO7hx/DVezhVXlX6/p4JBlR20nDtx2LDjoIsJlv/Zg dV+xCEMqKKifwq03IJj8tPfNMt3LQRqr7isyjQ/jiv7fbzgvoO+FioIfND0Ph/Ts2oHS kHhQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=Go0nouczJ2whwjFBqb4dM2tDQiotRWex0rQYXX9OquA=; b=BzEbr6FCuKrKCOuGIFR7iSeRQRYJJNhZL57v5iql94Dy63unpn+Swem2RdjEPatxtn xjSRrUsrpLBYzAoAehf5JKBS3cxAY5LlQKmSQL2qKI9xEcWCGeD1tc0nv+rhnJtDgGt4 xA7WkshjdQZm0KfH9uz1gcvOtabo3f4A16xActnow4DZz2FBq7KwmwzapQRENC3fWsVJ zyhPyxoZKAgKyE8EvrjIbXuSuFSh8Gt3iXaefrpHQ9py3M+qaFf0S2P7L8EsH+LUuMbS 7fFb2yBG6PatkMS+dkApl+Db3+yWVdrBNHHk3SvnKq/6OFYNyCK95u5z733Y2NomSFzY uVzw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="U1/ptRAz"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b9si22836566plb.350.2019.03.01.12.01.23; Fri, 01 Mar 2019 12:01:40 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="U1/ptRAz"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726104AbfCAT7i (ORCPT + 99 others); Fri, 1 Mar 2019 14:59:38 -0500 Received: from mail.kernel.org ([198.145.29.99]:51316 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725962AbfCAT7i (ORCPT ); Fri, 1 Mar 2019 14:59:38 -0500 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 14C642087E for ; Fri, 1 Mar 2019 19:59:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1551470377; bh=KQoQlydgbnJEhwe6xSFRI9D3gi8ShQe1rnF0AanqJvA=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=U1/ptRAzGXpfk0E66aa8M2mPVw8Zn0gDjLLQnsV2ePAaDqmZJXxZlnLbXnjHRM3Md eSuvz5s2v9tQLUhBQMOADiHwgiAtlvlhvJp1JOd8N2gCam9j/kPPBDwkEjdSNYZUAQ Nj4qgHZinaDh5w5bPPKGkmvmv95Ofkj9su6WF11g= Received: by mail-wm1-f44.google.com with SMTP id z84so13348566wmg.4 for ; Fri, 01 Mar 2019 11:59:37 -0800 (PST) X-Gm-Message-State: APjAAAUDj+Nctkz1lHHEfTAQadwh9dwREwv4oIr4l9l6VVeHa3+/st8/ VJRwwyaIOD4uzqIb8AfftoMVuZJjRoTfOC7ERMk7Qg== X-Received: by 2002:a1c:eb14:: with SMTP id j20mr4502373wmh.32.1551470375493; Fri, 01 Mar 2019 11:59:35 -0800 (PST) MIME-Version: 1.0 References: <20190301001806.154271-1-smuckle@google.com> In-Reply-To: <20190301001806.154271-1-smuckle@google.com> From: Andy Lutomirski Date: Fri, 1 Mar 2019 11:59:24 -0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH] selftests: x86: add version check in test_syscall_vdso To: Steve Muckle Cc: Shuah Khan , Andy Lutomirski , Thomas Gleixner , "open list:KERNEL SELFTEST FRAMEWORK" , LKML , Android Kernel Team Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > On Feb 28, 2019, at 4:18 PM, Steve Muckle wrote: > > Since 4.17 registers r8-r11 are not clobbered/zeroed by a 64-bit kernel > handling a 32-bit syscall and this behavior is enforced by the > test_syscall_vdso testcase. See commit 8bb2610bc496 > ("x86/entry/64/compat: Preserve r8-r11 in int $0x80"). > > Permit the old behavior in the testcase for kernels prior to 4.17. NAK. If you want an old buggy kernel to pass a test, please either patch the kernel or run an old test. > > Signed-off-by: Steve Muckle > --- > .../testing/selftests/x86/test_syscall_vdso.c | 30 +++++++++++++++++++ > 1 file changed, 30 insertions(+) > > diff --git a/tools/testing/selftests/x86/test_syscall_vdso.c b/tools/testing/selftests/x86/test_syscall_vdso.c > index c9c3281077bc..f7284dc4c32b 100644 > --- a/tools/testing/selftests/x86/test_syscall_vdso.c > +++ b/tools/testing/selftests/x86/test_syscall_vdso.c > @@ -30,6 +30,7 @@ > #include > #include > #include > +#include > #include > > #if !defined(__i386__) > @@ -71,6 +72,7 @@ struct regs64 { > }; > struct regs64 regs64; > int kernel_is_64bit; > +int clobber_ok; > > asm ( > " .pushsection .text\n" > @@ -130,6 +132,28 @@ void print_regs64(void) > printf("12:%016llx 13:%016llx 14:%016llx 15:%016llx\n", regs64.r12, regs64.r13, regs64.r14, regs64.r15); > } > > +static void get_kernel_version(int *version, int *patchlevel) > +{ > + int ret, sublevel; > + struct utsname utsname; > + > + ret = uname(&utsname); > + if (ret) { > + perror("uname"); > + exit(1); > + } > + > + ret = sscanf(utsname.release, "%d.%d.%d", version, patchlevel, > + &sublevel); > + if (ret < 0) { > + perror("sscanf"); > + exit(1); > + } else if (ret != 3) { > + printf("Malformed kernel version %s\n", &utsname.release); > + exit(1); > + } > +} > + > int check_regs64(void) > { > int err = 0; > @@ -166,6 +190,8 @@ int check_regs64(void) > * Historically (and probably unintentionally), they > * were clobbered or zeroed. > */ > + if (clobber_ok && *r64 == 0 && num <= 11) > + continue; > } > printf("[FAIL]\tR%d has changed:%016llx\n", num, *r64); > err++; > @@ -385,6 +411,7 @@ int main(int argc, char **argv, char **envp) > { > int exitcode = 0; > int cs; > + int version, patchlevel; > > asm("\n" > " movl %%cs, %%eax\n" > @@ -394,6 +421,9 @@ int main(int argc, char **argv, char **envp) > if (!kernel_is_64bit) > printf("[NOTE]\tNot a 64-bit kernel, won't test R8..R15 leaks\n"); > > + get_kernel_version(&version, &patchlevel); > + clobber_ok = version < 4 || (version == 4 && patchlevel < 17); > + > /* This only works for non-static builds: > * syscall_addr = dlsym(dlopen("linux-gate.so.1", RTLD_NOW), "__kernel_vsyscall"); > */ > -- > 2.21.0.352.gf09ad66450-goog >