From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5F607C07E8E for ; Wed, 24 Apr 2024 15:53:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:From:Subject:Message-ID: References:Mime-Version:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=cN8DzSWxDp4lrzjTA2PRmHdtEy4AAgjccGTeaODihe0=; b=mLBHqnzBWjcdlsIRzjcX0VassD lw8NHjicB8Yzm4CTogrR9oihdxXPpGjwTP5BQUf+Q/Xdrug79Q/evYxmsw1rLvxl7bickecKCHRgm IjOyynl7R+MI6QIc4Vfj6iozTqIsOWXql36+txRXiUjry03nOxyrjWlB3152no/XIQ3Kjh2ofo0R1 JWpCAOOYN7tp04oGDtzXfte98sGDabDFMDiHQI9LU6QtobFid0LzYS04YbYKBQp7z6HNcghvu9Hqi 40/b61Z88O3yvXDxPG4i7w5bOxTqMEGl6rQb0+uYsI9XM6rbVc+aTA6mEoq7AbJSkQib2D40C/Bnz NOoq+GIw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rzewN-00000004pzu-3Vln; Wed, 24 Apr 2024 15:53:47 +0000 Received: from mail-yb1-xb49.google.com ([2607:f8b0:4864:20::b49]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rzewJ-00000004pv4-2Rpv for kexec@lists.infradead.org; Wed, 24 Apr 2024 15:53:45 +0000 Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-de4645bee83so26556276.3 for ; Wed, 24 Apr 2024 08:53:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1713974022; x=1714578822; darn=lists.infradead.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=I1uZvGOJrDJyNyZbDNRiP2qZHG8ZyjcmYdwIIxk4UA4=; b=Ax3BM0oPTUqeAPwv73UAiixkb4mXZQ8fsTZoZrJ6mc9RKGMpa4VvwsFVQq3RThU4wY MKYG20vTXtR/TmM3gXW6GLiIi8tvdqiCjstXwYgi8g49nIf0985crHDFUE20E6zhCkZL TqfRgXYoKKMwW4dYiPwF6wzh5YqcKM66dka9tQJ4F/thDtSFFfkHRa41N6o/GxFrh/0b ITXasbX/qN9xicZJPitnTtxUaGpD48zAtnsZijrU1rJq1x2V84RN5aoWUXLwFfzk+yIM +OIi5B2TnNcGQT6dO6ROSO3T9o2NkDx0THAGHBUuU7r87HashTZTvG9l0KAAC8qn08RH 0oyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713974022; x=1714578822; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=I1uZvGOJrDJyNyZbDNRiP2qZHG8ZyjcmYdwIIxk4UA4=; b=lf2G17voU+8LBEPc47tm6V6osk+SmazbA8CcVjqkZHysCPH0zRefPjrFH+53YPU+FZ SzXVUZEpI0AKn3vkuFk3Cacs7168DjgYK1IfuDmFf76I+mh1hK78OCoIiZm3Pz7/EW1Q EuqcHmLwuMyjp4Sor2wy36jvSa2WImussHg7Ijfzn7wyTePUUMTP3ZDyahZmNBjwM93t dHoSihQhLL78Ku/5j6tiqFKIiPo5uuibCAjQOu9ihPmfIke1ZLrG1i+eG7DXIxSrZ4GE pBZs0rWjKzHN2Z6QFJpCR9cGqLZE93w3GyOwHE8fZp0T74IbBxQ1tMePWBQKHO6XQSvF /mlw== X-Forwarded-Encrypted: i=1; AJvYcCWAj3dg0Y6gE+BRPHlytujJX5qqTAqpNLNpOyKmNPxKjsyzbHbihzntg67+2ZPoCk09jHX+pOkthZ38znaBDu2qURtckReQCGqu X-Gm-Message-State: AOJu0YwkrtS9dHS1zx01J3AuvRK9W27hZOrc/MA+Med9ZFdlXRwionpM MUFF3m15bs+pjX8rkBYaAaraNwihNsTHSwEFfR1GWdNxXkn0MsdtP+njO66Jq1HzKfV4bw== X-Google-Smtp-Source: AGHT+IFEGGFxfMnQooqXA71tEBTY29NX0MUA7pIaduK0k76YjwQ4bXrhWlZuNWvOPSLJ1YLTC5jr9V+A X-Received: from palermo.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:118a]) (user=ardb job=sendgmr) by 2002:a05:6902:120b:b0:de4:67d9:a2c6 with SMTP id s11-20020a056902120b00b00de467d9a2c6mr203644ybu.2.1713974022222; Wed, 24 Apr 2024 08:53:42 -0700 (PDT) Date: Wed, 24 Apr 2024 17:53:14 +0200 In-Reply-To: <20240424155309.1719454-11-ardb+git@google.com> Mime-Version: 1.0 References: <20240424155309.1719454-11-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=1348; i=ardb@kernel.org; h=from:subject; bh=XNDtlXNqERbrKnet8kKgoeintaNkpRS0TQFFAtyMk8M=; b=owGbwMvMwCFmkMcZplerG8N4Wi2JIU1T69WP2+KSbU965hyyfHHbMubHPOZrK1Ia1xxZZPv4e ocgr9GmjlIWBjEOBlkxRRaB2X/f7Tw9UarWeZYszBxWJpAhDFycAjCRgzGMDDOOXfadUMz1Y5e7 1Eej2e0P/GS3/Nw2R0dVO2trpJaVz3SG//FvfZ746Kprbm2vkwqLLn3/d4XNfJnneuvDPfcZZ/1 4xAQA X-Mailer: git-send-email 2.44.0.769.g3c40516874-goog Message-ID: <20240424155309.1719454-15-ardb+git@google.com> Subject: [RFC PATCH 4/9] x86/purgatory: Avoid absolute reference to GDT From: Ard Biesheuvel To: linux-kernel@vger.kernel.org Cc: x86@kernel.org, Ard Biesheuvel , Arnd Bergmann , Eric Biederman , kexec@lists.infradead.org, Nathan Chancellor , Nick Desaulniers , Kees Cook , Bill Wendling , Justin Stitt , Masahiro Yamada X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240424_085343_813291_77B8B64B X-CRM114-Status: GOOD ( 12.68 ) X-BeenThere: kexec@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "kexec" Errors-To: kexec-bounces+kexec=archiver.kernel.org@lists.infradead.org From: Ard Biesheuvel The purgatory is almost entirely position independent, without any need for any relocation processing at load time except for the reference to the GDT in the entry code. Generate this reference at runtime instead, to remove the last R_X86_64_64 relocation from this code. While the GDT itself needs to be preserved in memory as long as it is live, the GDT descriptor that is used to program the GDT can be discarded so it can be allocated on the stack. Signed-off-by: Ard Biesheuvel --- arch/x86/purgatory/entry64.S | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/arch/x86/purgatory/entry64.S b/arch/x86/purgatory/entry64.S index 9913877b0dbe..888661d9db9c 100644 --- a/arch/x86/purgatory/entry64.S +++ b/arch/x86/purgatory/entry64.S @@ -16,7 +16,11 @@ SYM_CODE_START(entry64) /* Setup a gdt that should be preserved */ - lgdt gdt(%rip) + leaq gdt(%rip), %rax + pushq %rax + pushw $gdt_end - gdt - 1 + lgdt (%rsp) + addq $10, %rsp /* load the data segments */ movl $0x18, %eax /* data segment */ @@ -83,8 +87,8 @@ SYM_DATA_START_LOCAL(gdt) * 0x08 unused * so use them as gdt ptr */ - .word gdt_end - gdt - 1 - .quad gdt + .word 0 + .quad 0 .word 0, 0, 0 /* 0x10 4GB flat code segment */ -- 2.44.0.769.g3c40516874-goog _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 46AB9168AF1 for ; Wed, 24 Apr 2024 15:53:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713974024; cv=none; b=uwgX+cBnfPCqRqTdprJjIKfSXcnLkcOMHuaZCDyRxPzxu5kmMYI46MKj031wOJdt8iBQUYi9+AVh14OYkhWlA0wjpVeoVAWrYfSYra3bJP8hYhrm9bLj6+XGlie5NhoSftWruWZja/sew4LC/4poP7PDU8UbOwcEJkjFIbk6c3s= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713974024; c=relaxed/simple; bh=9+swj6gVAPxZ4sAKUioQftvHESZtWdbvHkiKo8iymQ0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=C8+0LJaBIOYvARypqBZZ9rakMYpYFw2BsO46J1dR0mLDurtwQ2X+p7iGtrzTJ9xYiHrPJvreYVnDbGSH6MMDkmODfu5I3Gd418M5cZ8Q5AiGjljtYDU76EU/PBlJd6FrYdmcDpKY2/UusqCPuBd9yXnXt59hZgCsRjW9ZWJfYQU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=HwQvhJ0F; arc=none smtp.client-ip=209.85.219.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="HwQvhJ0F" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dbf618042daso64851276.0 for ; Wed, 24 Apr 2024 08:53:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1713974022; x=1714578822; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=I1uZvGOJrDJyNyZbDNRiP2qZHG8ZyjcmYdwIIxk4UA4=; b=HwQvhJ0FaHR78G6Jbt6K/CIL9VbHYYXTkU5MnotDrw0ec4ncEmmD7mvT8LO4J+McIH pay+7sq7VwRA1e0dPXByUXSYJ8OycnQDqbavL/5dDNmLfQJ9SpmyeuoZuxSe+QcvtP18 +6jzrBqVADyzAZqJ8Jw5lXOz4YY4BigPRikyYNOxtuSrW3YosopitVSU61Xi06ZVvgC5 kY2awLOqUINZtSdJ2A0ypad0t9fPSa/WadwbUSiwiVoK98dQmhdgf880AN+Ut9mrgG0P CPG+5K/CnP1U5Ef8iTwn0Xxxnu3ScZ+jnPowg24fdtNhUb37PWpRR79/ZxE32vZC3ATk n7iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713974022; x=1714578822; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=I1uZvGOJrDJyNyZbDNRiP2qZHG8ZyjcmYdwIIxk4UA4=; b=P5eYym/OeGfK/aymv92e9xWETGVRpoQOmXpyizbK7Ci+DWV1T6y/4ufmqi5aUa/vSa yBcleH525SVUauAS59/AvWPzpMmf3DhVgf7b5B/KCblDo0Ai9Xul6lownNyA/jAFUjRg HO4IfAYA319CUY9LPjpVI/cfu7OvOqSpIA7/hw9lrY89FEEujwt5eU56gOF4GMTG3C5y C686mRtK1Pt22E1CN3bdP8v1e0QBrX+Yvn3KbaXc+0kV+RJknK9lydHjvmn0fJtAnHXq 9mxDCvDdmhAwBksUwh0AjoFFmx5w8C7EbV1SBmX/clhUHRwuL+27gszXtYvGJ7amDyRv BbDA== X-Gm-Message-State: AOJu0YwzZB9Cq+1xZzXOpD5WABCyZrKAlFBbfFHS/cce6AubSCnuN8JR XCCX7XT0QqUYaX6mYDX3pLTQNNzvLV7NbODin5dtCZ1YQK2vbJYQvUm/7dtvnnMZuDWBnmgPzpp TMhiykVBaAfbG+yliYFq6ibuV7Gwa45JBYXMT/4jneBbchnPAJXdnJfhlYlAReluS4P445SRPo4 uKvzttjznFvymy/58cxZt1xCRhvro3ug== X-Google-Smtp-Source: AGHT+IFEGGFxfMnQooqXA71tEBTY29NX0MUA7pIaduK0k76YjwQ4bXrhWlZuNWvOPSLJ1YLTC5jr9V+A X-Received: from palermo.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:118a]) (user=ardb job=sendgmr) by 2002:a05:6902:120b:b0:de4:67d9:a2c6 with SMTP id s11-20020a056902120b00b00de467d9a2c6mr203644ybu.2.1713974022222; Wed, 24 Apr 2024 08:53:42 -0700 (PDT) Date: Wed, 24 Apr 2024 17:53:14 +0200 In-Reply-To: <20240424155309.1719454-11-ardb+git@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240424155309.1719454-11-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=1348; i=ardb@kernel.org; h=from:subject; bh=XNDtlXNqERbrKnet8kKgoeintaNkpRS0TQFFAtyMk8M=; b=owGbwMvMwCFmkMcZplerG8N4Wi2JIU1T69WP2+KSbU965hyyfHHbMubHPOZrK1Ia1xxZZPv4e ocgr9GmjlIWBjEOBlkxRRaB2X/f7Tw9UarWeZYszBxWJpAhDFycAjCRgzGMDDOOXfadUMz1Y5e7 1Eej2e0P/GS3/Nw2R0dVO2trpJaVz3SG//FvfZ746Kprbm2vkwqLLn3/d4XNfJnneuvDPfcZZ/1 4xAQA X-Mailer: git-send-email 2.44.0.769.g3c40516874-goog Message-ID: <20240424155309.1719454-15-ardb+git@google.com> Subject: [RFC PATCH 4/9] x86/purgatory: Avoid absolute reference to GDT From: Ard Biesheuvel To: linux-kernel@vger.kernel.org Cc: x86@kernel.org, Ard Biesheuvel , Arnd Bergmann , Eric Biederman , kexec@lists.infradead.org, Nathan Chancellor , Nick Desaulniers , Kees Cook , Bill Wendling , Justin Stitt , Masahiro Yamada Content-Type: text/plain; charset="UTF-8" From: Ard Biesheuvel The purgatory is almost entirely position independent, without any need for any relocation processing at load time except for the reference to the GDT in the entry code. Generate this reference at runtime instead, to remove the last R_X86_64_64 relocation from this code. While the GDT itself needs to be preserved in memory as long as it is live, the GDT descriptor that is used to program the GDT can be discarded so it can be allocated on the stack. Signed-off-by: Ard Biesheuvel --- arch/x86/purgatory/entry64.S | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/arch/x86/purgatory/entry64.S b/arch/x86/purgatory/entry64.S index 9913877b0dbe..888661d9db9c 100644 --- a/arch/x86/purgatory/entry64.S +++ b/arch/x86/purgatory/entry64.S @@ -16,7 +16,11 @@ SYM_CODE_START(entry64) /* Setup a gdt that should be preserved */ - lgdt gdt(%rip) + leaq gdt(%rip), %rax + pushq %rax + pushw $gdt_end - gdt - 1 + lgdt (%rsp) + addq $10, %rsp /* load the data segments */ movl $0x18, %eax /* data segment */ @@ -83,8 +87,8 @@ SYM_DATA_START_LOCAL(gdt) * 0x08 unused * so use them as gdt ptr */ - .word gdt_end - gdt - 1 - .quad gdt + .word 0 + .quad 0 .word 0, 0, 0 /* 0x10 4GB flat code segment */ -- 2.44.0.769.g3c40516874-goog