Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp5034812ybl; Tue, 14 Jan 2020 02:21:27 -0800 (PST) X-Google-Smtp-Source: APXvYqxgsUg/d/N6wbh7HVxOvmjP0D6Os/VJouDZv07WV/bODhgLeBR8wBwzlULvBHWWTZ1IJkUV X-Received: by 2002:a9d:222f:: with SMTP id o44mr16225609ota.51.1578997287405; Tue, 14 Jan 2020 02:21:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578997287; cv=none; d=google.com; s=arc-20160816; b=H9IeWQl7sv6AjGCByKiRsL+LSJeoRY9eUih4UkSQqVlf64UlkYrZNx5nlbbK2t48SN /tcvGplhf5yXxIvJW3W0nkoi0nOoz8VjOURgc5Sd8B/A8wQy/ZS3Rd2pu/VSiPgz1tz0 ksps1QGmNJbwlNP737ZtQks1JXRXfA9yYRWKkq3wgPTHTP1H+g/1DUgRyv6gKjQa/v+L WzkwMNB4f+1ZTD1MZj8x6sVVxH+xmiDeiV/QSnNqjDkQdJlEppW3KVs8btgTxJkUz7tl zR9QrtlMGtQYquDGHt9XNpcBrUJk3Nsw8S+Gf4r/+kE9IvKVA7K3Ree5VHxAOd2J9cAj 6pNw== 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=2yvrACdPmUGfZhFKUQRIzaCc9JpuXUk4brCbwVQauwM=; b=IwWE4Zcz4H255ZeYQZ6QjPMgK7Y5paMIYn+nsNAf3vt60LT+mzUpf1WLD4R8nKrFWh lzkVMRjKLJ+8pW4ApmwjzbxuNQXrBvZgTh55SMZBqGJFRZBtGiOLYrTQn3rFWerOS9iW TikDlT1IlMz9Z3lfyVdOuug39Fi8FYdJGtKT+mMSmUK9F/RrhlyTGOcS10XbY8ooHHnq A/uaBcJJaQGjSYBzmDOdNpmDMqZc2eJcgiWOwpx32G+1p+wmLQ3FU3o/BRbwVbfJ5PEs CM2zQSZFTzN5XhW6HTh0fxEfzgGcGmw4nHiGfnMJguS7tEZt8JDOjGKxCcN4+MkydeaS cHFA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=HFZbSJW8; 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 b4si7348898oib.70.2020.01.14.02.21.16; Tue, 14 Jan 2020 02:21:27 -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=HFZbSJW8; 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 S1729496AbgANKTE (ORCPT + 99 others); Tue, 14 Jan 2020 05:19:04 -0500 Received: from mail.kernel.org ([198.145.29.99]:35664 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730353AbgANKGa (ORCPT ); Tue, 14 Jan 2020 05:06:30 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.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 8176F24672; Tue, 14 Jan 2020 10:06:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1578996389; bh=FkcS2BdMEXIokPkWULH/aGT00OXhvGq1WKC6EOCQqfc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HFZbSJW8hNnwmZVw7ntbo32WbOF8G0aL5rlrwoPd9ylcRsbuXDzCT3KVXgzUJjFQA dBAmR0WCwS0J1UAzWE0P4/ElfYnGPFnEiu3aXz2Kr7/+PhP9FOoovcP8uq95g1mqxi DB9Di4v7919AquLZq1lKYHthpcZ83DE3//PxDk3c= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Amanieu dAntras , linux-um@lists.infradead.org, Christian Brauner Subject: [PATCH 5.4 64/78] um: Implement copy_thread_tls Date: Tue, 14 Jan 2020 11:01:38 +0100 Message-Id: <20200114094402.012253565@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200114094352.428808181@linuxfoundation.org> References: <20200114094352.428808181@linuxfoundation.org> User-Agent: quilt/0.66 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 From: Amanieu d'Antras commit 457677c70c7672a4586b0b8abc396cc1ecdd376d upstream. This is required for clone3 which passes the TLS value through a struct rather than a register. Signed-off-by: Amanieu d'Antras Cc: linux-um@lists.infradead.org Cc: # 5.3.x Link: https://lore.kernel.org/r/20200104123928.1048822-1-amanieu@gmail.com Signed-off-by: Christian Brauner Signed-off-by: Greg Kroah-Hartman --- arch/um/Kconfig | 1 + arch/um/include/asm/ptrace-generic.h | 2 +- arch/um/kernel/process.c | 6 +++--- arch/x86/um/tls_32.c | 6 ++---- arch/x86/um/tls_64.c | 7 +++---- 5 files changed, 10 insertions(+), 12 deletions(-) --- a/arch/um/Kconfig +++ b/arch/um/Kconfig @@ -14,6 +14,7 @@ config UML select HAVE_FUTEX_CMPXCHG if FUTEX select HAVE_DEBUG_KMEMLEAK select HAVE_DEBUG_BUGVERBOSE + select HAVE_COPY_THREAD_TLS select GENERIC_IRQ_SHOW select GENERIC_CPU_DEVICES select GENERIC_CLOCKEVENTS --- a/arch/um/include/asm/ptrace-generic.h +++ b/arch/um/include/asm/ptrace-generic.h @@ -36,7 +36,7 @@ extern long subarch_ptrace(struct task_s extern unsigned long getreg(struct task_struct *child, int regno); extern int putreg(struct task_struct *child, int regno, unsigned long value); -extern int arch_copy_tls(struct task_struct *new); +extern int arch_set_tls(struct task_struct *new, unsigned long tls); extern void clear_flushed_tls(struct task_struct *task); extern int syscall_trace_enter(struct pt_regs *regs); extern void syscall_trace_leave(struct pt_regs *regs); --- a/arch/um/kernel/process.c +++ b/arch/um/kernel/process.c @@ -153,8 +153,8 @@ void fork_handler(void) userspace(¤t->thread.regs.regs, current_thread_info()->aux_fp_regs); } -int copy_thread(unsigned long clone_flags, unsigned long sp, - unsigned long arg, struct task_struct * p) +int copy_thread_tls(unsigned long clone_flags, unsigned long sp, + unsigned long arg, struct task_struct * p, unsigned long tls) { void (*handler)(void); int kthread = current->flags & PF_KTHREAD; @@ -188,7 +188,7 @@ int copy_thread(unsigned long clone_flag * Set a new TLS for the child thread? */ if (clone_flags & CLONE_SETTLS) - ret = arch_copy_tls(p); + ret = arch_set_tls(p, tls); } return ret; --- a/arch/x86/um/tls_32.c +++ b/arch/x86/um/tls_32.c @@ -215,14 +215,12 @@ static int set_tls_entry(struct task_str return 0; } -int arch_copy_tls(struct task_struct *new) +int arch_set_tls(struct task_struct *new, unsigned long tls) { struct user_desc info; int idx, ret = -EFAULT; - if (copy_from_user(&info, - (void __user *) UPT_SI(&new->thread.regs.regs), - sizeof(info))) + if (copy_from_user(&info, (void __user *) tls, sizeof(info))) goto out; ret = -EINVAL; --- a/arch/x86/um/tls_64.c +++ b/arch/x86/um/tls_64.c @@ -6,14 +6,13 @@ void clear_flushed_tls(struct task_struc { } -int arch_copy_tls(struct task_struct *t) +int arch_set_tls(struct task_struct *t, unsigned long tls) { /* * If CLONE_SETTLS is set, we need to save the thread id - * (which is argument 5, child_tid, of clone) so it can be set - * during context switches. + * so it can be set during context switches. */ - t->thread.arch.fs = t->thread.regs.regs.gp[R8 / sizeof(long)]; + t->thread.arch.fs = tls; return 0; }