Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp3545530imu; Mon, 7 Jan 2019 05:24:58 -0800 (PST) X-Google-Smtp-Source: ALg8bN7uUbEhejabkpWxlFnwXPmytVA1hcyKmbvt5aoAf+95fxF348pGZljmabKnWX/bmsMj3o3B X-Received: by 2002:a17:902:bc44:: with SMTP id t4mr60633451plz.260.1546867498785; Mon, 07 Jan 2019 05:24:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1546867498; cv=none; d=google.com; s=arc-20160816; b=A7PuTPdUX74hzZY8HuEwr4VHmeXfYXUVH460WCjyb71Ov4al9jV8v8t2fHlrLDRdwe SaPccfsa5S+SCppf6QZFenKiB4LVxympsDg1ggEFuJGgThBaO4GHwtLXPmhnUJhPYppA zsIMeX/P/btJllCjXhqg5YuEjYfzdMtKDTTGaVPK2mJrnVTKhGyiYyONkC1dmiBWieUn dlR3zwO/cQraeXrAWGusYLnpVxJcdjuS2ZV5fZDL7qNm9S1jKB0b57cyV2HQCC8PsrBz ijU5ftqHLlUx7pHZiRMqnoLFKGY6T9JHSUM+n8fXcWlb5oic0rH+XWumBDlbm0dRh8so M6KA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=C4glgdSNNKSUArVr3OTLOrkJfO7dr/ZiNaM2bv39pzo=; b=fXWptDJOGeDVkIjwfAVoTWKy6MvIsk/dLT5a2ziR4Ig1vslH6mgFkOwHE0k7SMUGFk 03pketl/Nkl48KHNf4gTiofDP/sTwJVwrfPF3tVP1DD7zueQtSg8ddokc35upUtufBIB PgpO/D22jx/D3om0tnGG93jWeMmmMIW4BpxLmSjoRgV6UoNRPfNm4FBFPCRZpeKh9ph1 RN6S9gamVlp/9Tj/wdArAJDRRjvzEue/Yqpu0k7TGbi3lbUR+OLxq3DeIYgG4+PvNLcl 2yt5J2Cy8CqC6L2TBbzNDDa7cRjxf2jLpfOTH7U4o7fv81eVXN6ww1tfEzPQw4XN1UtY xAIA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=przdI4Pp; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p14si7963745plq.25.2019.01.07.05.24.43; Mon, 07 Jan 2019 05:24:58 -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=przdI4Pp; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730144AbfAGNVv (ORCPT + 99 others); Mon, 7 Jan 2019 08:21:51 -0500 Received: from mail.kernel.org ([198.145.29.99]:33458 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728625AbfAGMon (ORCPT ); Mon, 7 Jan 2019 07:44:43 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 1A48E20449; Mon, 7 Jan 2019 12:44:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1546865082; bh=3dj2VOo390HEGcj9n0sFkKJul1F+9lTk6dA/4fUCia4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=przdI4Pp9S/icJbklgnEiyDG+sdOj2LvXdidhxBPLMwSlqdpKa9wk9E5gLs20ZWcR CaaAyZ5PxQh9x8N8DJrvaG8f4FwpI4xOpWYXMo9Yhmh0hM2zQm+fRPmaWfbv7EUuf2 Ppqpy/tAJvHukgYY1bcO7bZJmRtYGJ9+GAceBgqw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Pi-Hsun Shih , Dave Martin , Will Deacon Subject: [PATCH 4.20 142/145] arm64: compat: Dont pull syscall number from regs in arm_compat_syscall Date: Mon, 7 Jan 2019 13:32:59 +0100 Message-Id: <20190107104455.739374594@linuxfoundation.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190107104437.308206189@linuxfoundation.org> References: <20190107104437.308206189@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.20-stable review patch. If anyone has any objections, please let me know. ------------------ From: Will Deacon commit 53290432145a8eb143fe29e06e9c1465d43dc723 upstream. The syscall number may have been changed by a tracer, so we should pass the actual number in from the caller instead of pulling it from the saved r7 value directly. Cc: Cc: Pi-Hsun Shih Reviewed-by: Dave Martin Signed-off-by: Will Deacon Signed-off-by: Greg Kroah-Hartman --- arch/arm64/kernel/sys_compat.c | 9 ++++----- arch/arm64/kernel/syscall.c | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-) --- a/arch/arm64/kernel/sys_compat.c +++ b/arch/arm64/kernel/sys_compat.c @@ -66,12 +66,11 @@ do_compat_cache_op(unsigned long start, /* * Handle all unrecognised system calls. */ -long compat_arm_syscall(struct pt_regs *regs) +long compat_arm_syscall(struct pt_regs *regs, int scno) { - unsigned int no = regs->regs[7]; void __user *addr; - switch (no) { + switch (scno) { /* * Flush a region from virtual address 'r0' to virtual address 'r1' * _exclusive_. There is no alignment requirement on either address; @@ -107,7 +106,7 @@ long compat_arm_syscall(struct pt_regs * * way the calling program can gracefully determine whether * a feature is supported. */ - if (no < __ARM_NR_COMPAT_END) + if (scno < __ARM_NR_COMPAT_END) return -ENOSYS; break; } @@ -116,6 +115,6 @@ long compat_arm_syscall(struct pt_regs * (compat_thumb_mode(regs) ? 2 : 4); arm64_notify_die("Oops - bad compat syscall(2)", regs, - SIGILL, ILL_ILLTRP, addr, no); + SIGILL, ILL_ILLTRP, addr, scno); return 0; } --- a/arch/arm64/kernel/syscall.c +++ b/arch/arm64/kernel/syscall.c @@ -13,16 +13,15 @@ #include #include -long compat_arm_syscall(struct pt_regs *regs); - +long compat_arm_syscall(struct pt_regs *regs, int scno); long sys_ni_syscall(void); -asmlinkage long do_ni_syscall(struct pt_regs *regs) +static long do_ni_syscall(struct pt_regs *regs, int scno) { #ifdef CONFIG_COMPAT long ret; if (is_compat_task()) { - ret = compat_arm_syscall(regs); + ret = compat_arm_syscall(regs, scno); if (ret != -ENOSYS) return ret; } @@ -47,7 +46,7 @@ static void invoke_syscall(struct pt_reg syscall_fn = syscall_table[array_index_nospec(scno, sc_nr)]; ret = __invoke_syscall(regs, syscall_fn); } else { - ret = do_ni_syscall(regs); + ret = do_ni_syscall(regs, scno); } regs->regs[0] = ret;