Received: by 2002:a25:ef43:0:0:0:0:0 with SMTP id w3csp718183ybm; Thu, 28 May 2020 13:20:40 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzvxeUb1/18EjKftnebXxlkqLyn5HJM9vLCgkh+ifJ8JSvi6v58EAcNhJgs0runqedZOAq9 X-Received: by 2002:a17:906:39d9:: with SMTP id i25mr4583204eje.510.1590697240790; Thu, 28 May 2020 13:20:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1590697240; cv=none; d=google.com; s=arc-20160816; b=gZcwC+e0+IO1HysbEEs5cHVFyvAcmgbiuL5tOIbhK2n0E3hvprYDNsnm84qI8V6vBe esbmyq6jP5U/HNxOxyE6t0Z+SsAUntk9SuancvZLmOpGA5cN5qfZjgPpDHwyXfEhrZ9Y G6xoZJ1yhIIJ9W0+Aex5OW9cKOfOc/aK5PFRl9DfK7Cv1MaKpJWGx045e/3mxo2sRgcA lkjDPy0dEVZjrr+IX4vrqfpvlweN2Zme9Up9rIZKfEhJPoBmsuE2p9UsN8RbNKhfRN9l YrJMBNtBTDL9ebQRNbMDt+bcY7Pi6/fCEtg4Ugrk6S3yOQhMAXSnxF4AfJxy8LFUYVJE dcsA== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=4e+Gg8Nka3FJUFnXx1p4Vdf01JHURpFqWOiz3ifdZAk=; b=0U5IOV9sgVv6F5luPYLWU7/AJSKm4wT8bfsPakC1uca9QOs8ZRRBbrsCzymVqPl0ID aKcoEjCvtBmtI3yPvUnLqvrLlL3dUEIt9C/hHB04kxaz0xu3Rv6+phmcugQ3dZ1KI/W+ fY/Hnwohtv/ygtfgWtxB6+s/jx1JALxrwe9zhufYJ3lGRG3LUviSQc2w8qfSgG9HyMlA QITBdrE6nmNFFyYAeg9wK7STLWAIhKIz+r5HtHIRMApca5x+PVVfER0gjn39hKvjSLHl LvEwKRJneF5tuOeGZW4YnX25VE/gUj/IQ+kKQjJ/fonNu08F52WeI45n34IYEkqpLdQh tg9Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=cSwBgZFo; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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. [23.128.96.18]) by mx.google.com with ESMTP id cy21si4253447edb.159.2020.05.28.13.20.17; Thu, 28 May 2020 13:20:40 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=cSwBgZFo; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S2407020AbgE1UOZ (ORCPT + 99 others); Thu, 28 May 2020 16:14:25 -0400 Received: from mail.kernel.org ([198.145.29.99]:41588 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2406973AbgE1UOO (ORCPT ); Thu, 28 May 2020 16:14:14 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (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 D8845208FE; Thu, 28 May 2020 20:14:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1590696853; bh=G7h9MZ+i6JagDtlXn0bdeL8bVRjHxYgSZBzuuJdogDE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cSwBgZFoFGdLGx9ekYjcWIEa84fmRiuvhZhzBCVjetifhKaBY3bwAeIoQc+LQ4LSw xTvnUlAahN0BbS90bqGtpZU+gdIjtQVAEFXHTwQmY+A6/VkfiwiZw1mTGyFu8eqfFY rfl0w+XpRUZCOByt538PonaNkpJgtT+7/PLowR08= From: Sasha Levin To: tglx@linutronix.de, luto@kernel.org, ak@linux.intel.com Cc: corbet@lwn.net, mingo@redhat.com, bp@alien8.de, x86@kernel.org, shuah@kernel.org, gregkh@linuxfoundation.org, tony.luck@intel.com, chang.seok.bae@intel.com, dave.hansen@linux.intel.com, peterz@infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, jarkko.sakkinen@linux.intel.com, "H . Peter Anvin" , Sasha Levin Subject: [PATCH v13 01/16] x86/ptrace: Prevent ptrace from clearing the FS/GS selector Date: Thu, 28 May 2020 16:13:47 -0400 Message-Id: <20200528201402.1708239-2-sashal@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200528201402.1708239-1-sashal@kernel.org> References: <20200528201402.1708239-1-sashal@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: "Chang S. Bae" When a ptracer writes a ptracee's FS/GSBASE with a different value, the selector is also cleared. This behavior is not correct as the selector should be preserved. Update only the base value and leave the selector intact. To simplify the code further remove the conditional checking for the same value as this code is not performance critical. The only recognizable downside of this change is when the selector is already nonzero on write. The base will be reloaded according to the selector. But the case is highly unexpected in real usages. [ tglx: Massage changelog ] Suggested-by: Andy Lutomirski Signed-off-by: Chang S. Bae Signed-off-by: Thomas Gleixner Cc: "H . Peter Anvin" Cc: Andi Kleen Cc: H. Peter Anvin Link: https://lkml.kernel.org/r/9040CFCD-74BD-4C17-9A01-B9B713CF6B10@intel.com Signed-off-by: Sasha Levin --- arch/x86/kernel/ptrace.c | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c index f0e1ddbc2fd7..cc56efb75d27 100644 --- a/arch/x86/kernel/ptrace.c +++ b/arch/x86/kernel/ptrace.c @@ -380,25 +380,12 @@ static int putreg(struct task_struct *child, case offsetof(struct user_regs_struct,fs_base): if (value >= TASK_SIZE_MAX) return -EIO; - /* - * When changing the FS base, use do_arch_prctl_64() - * to set the index to zero and to set the base - * as requested. - * - * NB: This behavior is nonsensical and likely needs to - * change when FSGSBASE support is added. - */ - if (child->thread.fsbase != value) - return do_arch_prctl_64(child, ARCH_SET_FS, value); + x86_fsbase_write_task(child, value); return 0; case offsetof(struct user_regs_struct,gs_base): - /* - * Exactly the same here as the %fs handling above. - */ if (value >= TASK_SIZE_MAX) return -EIO; - if (child->thread.gsbase != value) - return do_arch_prctl_64(child, ARCH_SET_GS, value); + x86_gsbase_write_task(child, value); return 0; #endif } -- 2.25.1