From patchwork Wed Apr 14 05:52:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrei Vagin X-Patchwork-Id: 1466002 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2001:8b0:10b:1:d65d:64ff:fe57:4e05; helo=desiato.infradead.org; envelope-from=linux-um-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=desiato.20200630 header.b=rMqpvdj6; dkim=fail reason="signature verification failed" (2048-bit key; secure) header.d=infradead.org header.i=@infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=XmUxY18Y; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=gAzbxW5m; dkim-atps=neutral Received: from desiato.infradead.org (desiato.infradead.org [IPv6:2001:8b0:10b:1:d65d:64ff:fe57:4e05]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4FKsBt6bzNz9sRf for ; Wed, 14 Apr 2021 15:55:18 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=/2mnA2DAJAghsWZ3avGQij9P51iInXQwlne0hExCsnI=; b=rMqpvdj6voZ6XD/c6LHrYmaaE LsRR6fZA7Wk3K6syPA3ybombFbu7lghzXHBtMhofagMQZO87deYwGUF3z9JFxPKvzCJXxZ3khrie6 RABw/BWhVnYPhvO0C61FlSKKAOjEqohOHjEImReMfr5pUaXVU0nK1PCUIyvu0GcouSRc9oq8g9Tvb fMOb6TS8dJPM/BR2YLzkxNTTv40IYkj2yguMIACUkF7WAXQ1xb+0QLOYQKV6LYyB0R9c0gxvO0rjh iMNn0x/FJIllV3qhKPrD2bonwtcQ6qbi5n0Vszop2dPikEKuQahU2dXdgOV3RFwRkPRyw+A4XtZsE oVyo51xjA==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lWYUT-00BaeT-Tl; Wed, 14 Apr 2021 05:55:06 +0000 Received: from bombadil.infradead.org ([2607:7c80:54:e::133]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lWYUM-00Badq-IQ for linux-um@desiato.infradead.org; Wed, 14 Apr 2021 05:54:58 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender :Reply-To:Content-Type:Content-ID:Content-Description; bh=kz+2y2O3gxdpZ0DuYw6Aqbtz8RqP4p8r4SUXEVxAEjc=; b=XmUxY18YazVlyyCpV36p9dg67C g4waCGfCRYETFGxJf6/zz47UZfVyALRUdRq6tJaD30mDQZZ78drlIih8nteY4o3f2tw8WIqlKvjwR JzpztkarpRG0+8R+JUKBm+jUN6dnECPr13yMXHHlErXXqc32Aa2B4tEReZrRbJ222iZQ1XtIqop2S IHBFiMzedGlo0X9F33iK270II0ptDl74/J+QjV118wbjXsQR9wSNeVyImE6sGarVfc8Tlond8p9lf SJw5hj4v2FWMvI3VSA0lsyLzKegghTI7dQhJh9DoEKQsTeP4WxS4e2I4sWB72y4AqDejPcfTKWVea dJSUHVeA==; Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lWYUJ-007VY2-TJ for linux-um@lists.infradead.org; Wed, 14 Apr 2021 05:54:57 +0000 Received: by mail-pg1-x52b.google.com with SMTP id t22so13670716pgu.0 for ; Tue, 13 Apr 2021 22:54:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=kz+2y2O3gxdpZ0DuYw6Aqbtz8RqP4p8r4SUXEVxAEjc=; b=gAzbxW5mGOxCiuogT7ZmDaQeABjlxmLbc9dFUuv/vUNLgVbEgZIzH/U4JQCETVBH0R wi8JTjPXSv51Np6samyY61aeyWtlFstkUoWu0dPAwVdaoTqFmfE8pzkbDB35Dicbzmsw wGzXMWqxc+u8mraJzUvYRIyQ1pp0Q520rOVjs05qspQzSBhS24Cx1Y8X3OWrZUmVwCER zmiEuZBfbEzLfS15NHq06AU6s6k03Rc9zp2+p2wNGKfd9qsF2oMKYRG9wazsX1Bbz7ti TbPnmEVHtOfY+Ck2DuzwH6pK4pSLAJn5Czxz8JuveDLrAn/svBks4WZxroBtXUl41dI4 tVVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kz+2y2O3gxdpZ0DuYw6Aqbtz8RqP4p8r4SUXEVxAEjc=; b=RJYcBAVfVPgsPqa6OVj/xU2gAXHOV1mfe0NhbavSWjYo4sPSercNeBG3F/R8c6k0DI lEUCQxF3PLU9jOxnyLm+5OhOR2eYWbZpi/VzJtzVblAP3M9jPdnqMwrCbRjm7ZhvR63/ 7viZCI6JDaRuZBu9k9ONS6T6c7nrCjj6Csig+Um3FTNfGRTPkjyTSv2HwG1P6O4kcgKG oJnAnUfODOFzkvgK05GmNgTa0V7ISli6qneDo7Z9QdvcmA0482plIMscmuXbNzKV0S5H k78ZjFvNxYFEVgf7hayirXeKNJrzS0QgjOb4EShaEMDbH48wivpngsrl7nSHgIqF869u vsZg== X-Gm-Message-State: AOAM532DybRgrzdJEqClxDIxz3yOOt8fF4M6HkPRNv0WhT68PPKITcd3 gKtI36Ebk0PZdg3XJ9nBXDg= X-Google-Smtp-Source: ABdhPJxeGX/lbWAFOpxLwjjnPfOzM9aCexo0emH5GWQfuu+lpIogaOnY38Jq+PTKfqA9j70+OBRHsA== X-Received: by 2002:a63:ee54:: with SMTP id n20mr19101537pgk.415.1618379694969; Tue, 13 Apr 2021 22:54:54 -0700 (PDT) Received: from laptop.hsd1.wa.comcast.net ([2601:600:8500:5f14:d627:c51e:516e:a105]) by smtp.gmail.com with ESMTPSA id u17sm13728969pfm.113.2021.04.13.22.54.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 Apr 2021 22:54:54 -0700 (PDT) From: Andrei Vagin To: linux-kernel@vger.kernel.org, linux-api@vger.kernel.org Cc: linux-um@lists.infradead.org, criu@openvz.org, avagin@google.com, Andrei Vagin , Andrew Morton , Andy Lutomirski , Anton Ivanov , Christian Brauner , Dmitry Safonov <0x7f454c46@gmail.com>, Ingo Molnar , Jeff Dike , Mike Rapoport , Michael Kerrisk , Oleg Nesterov , Peter Zijlstra , Richard Weinberger , Thomas Gleixner Subject: [PATCH 1/4] signal: add a helper to restore a process state from sigcontex Date: Tue, 13 Apr 2021 22:52:14 -0700 Message-Id: <20210414055217.543246-2-avagin@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210414055217.543246-1-avagin@gmail.com> References: <20210414055217.543246-1-avagin@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210413_225455_964492_447FA769 X-CRM114-Status: GOOD ( 14.47 ) X-Spam-Score: -0.2 (/) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: It will be used to implement process_vm_exec. Signed-off-by: Andrei Vagin --- arch/x86/kernel/signal.c | 78 ++++++++++++++++++++++ 1 file changed, 43 insertions(+), 35 deletions(-) Content analysis details: (-0.2 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:52b listed in] [list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [avagin[at]gmail.com] -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain X-BeenThere: linux-um@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-um" Errors-To: linux-um-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org It will be used to implement process_vm_exec. Signed-off-by: Andrei Vagin --- arch/x86/kernel/signal.c | 78 ++++++++++++++++++++++------------------ 1 file changed, 43 insertions(+), 35 deletions(-) diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c index be0d7d4152ec..cc269a20dd5f 100644 --- a/arch/x86/kernel/signal.c +++ b/arch/x86/kernel/signal.c @@ -79,51 +79,43 @@ static void force_valid_ss(struct pt_regs *regs) # define CONTEXT_COPY_SIZE sizeof(struct sigcontext) #endif -static int restore_sigcontext(struct pt_regs *regs, - struct sigcontext __user *usc, +static int __restore_sigcontext(struct pt_regs *regs, + struct sigcontext __user *sc, unsigned long uc_flags) { - struct sigcontext sc; - - /* Always make any pending restarted system calls return -EINTR */ - current->restart_block.fn = do_no_restart_syscall; - - if (copy_from_user(&sc, usc, CONTEXT_COPY_SIZE)) - return -EFAULT; - #ifdef CONFIG_X86_32 - set_user_gs(regs, sc.gs); - regs->fs = sc.fs; - regs->es = sc.es; - regs->ds = sc.ds; + set_user_gs(regs, sc->gs); + regs->fs = sc->fs; + regs->es = sc->es; + regs->ds = sc->ds; #endif /* CONFIG_X86_32 */ - regs->bx = sc.bx; - regs->cx = sc.cx; - regs->dx = sc.dx; - regs->si = sc.si; - regs->di = sc.di; - regs->bp = sc.bp; - regs->ax = sc.ax; - regs->sp = sc.sp; - regs->ip = sc.ip; + regs->bx = sc->bx; + regs->cx = sc->cx; + regs->dx = sc->dx; + regs->si = sc->si; + regs->di = sc->di; + regs->bp = sc->bp; + regs->ax = sc->ax; + regs->sp = sc->sp; + regs->ip = sc->ip; #ifdef CONFIG_X86_64 - regs->r8 = sc.r8; - regs->r9 = sc.r9; - regs->r10 = sc.r10; - regs->r11 = sc.r11; - regs->r12 = sc.r12; - regs->r13 = sc.r13; - regs->r14 = sc.r14; - regs->r15 = sc.r15; + regs->r8 = sc->r8; + regs->r9 = sc->r9; + regs->r10 = sc->r10; + regs->r11 = sc->r11; + regs->r12 = sc->r12; + regs->r13 = sc->r13; + regs->r14 = sc->r14; + regs->r15 = sc->r15; #endif /* CONFIG_X86_64 */ /* Get CS/SS and force CPL3 */ - regs->cs = sc.cs | 0x03; - regs->ss = sc.ss | 0x03; + regs->cs = sc->cs | 0x03; + regs->ss = sc->ss | 0x03; - regs->flags = (regs->flags & ~FIX_EFLAGS) | (sc.flags & FIX_EFLAGS); + regs->flags = (regs->flags & ~FIX_EFLAGS) | (sc->flags & FIX_EFLAGS); /* disable syscall checks */ regs->orig_ax = -1; @@ -136,10 +128,26 @@ static int restore_sigcontext(struct pt_regs *regs, force_valid_ss(regs); #endif - return fpu__restore_sig((void __user *)sc.fpstate, + return fpu__restore_sig((void __user *)sc->fpstate, IS_ENABLED(CONFIG_X86_32)); } +static int restore_sigcontext(struct pt_regs *regs, + struct sigcontext __user *usc, + unsigned long uc_flags) +{ + struct sigcontext sc; + + /* Always make any pending restarted system calls return -EINTR */ + current->restart_block.fn = do_no_restart_syscall; + + if (copy_from_user(&sc, usc, CONTEXT_COPY_SIZE)) + return -EFAULT; + + return __restore_sigcontext(regs, &sc, uc_flags); +} + + static __always_inline int __unsafe_setup_sigcontext(struct sigcontext __user *sc, void __user *fpstate, struct pt_regs *regs, unsigned long mask)