Received: by 2002:a05:6a10:6744:0:0:0:0 with SMTP id w4csp5424807pxu; Thu, 22 Oct 2020 01:46:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx5UMcaww4Dzy1ETLWmYN/uuhEiw6LRQ8fcTo4dNNgU+Rh+Tsnqf4FDOBW3lgc6FHWXYzvE X-Received: by 2002:a50:f097:: with SMTP id v23mr1149368edl.347.1603356367644; Thu, 22 Oct 2020 01:46:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603356367; cv=none; d=google.com; s=arc-20160816; b=c15YYa5/71I7YPms0XaVwhMxCXnRYwXNl1hKuS64gDZIG8WCMqcdsL2Fn3a0MwdiNe o4diSyd7gCfkoEUuzpJR0jbSTXdVJ181vTL7U5JDEKt7rPMbghzY2dMkKvXHCn6y36u3 7B2TxBbO1c26L1ncXh2mtTyu56LMSGYC55WCZkh0NAUo+lbyJBJWYOIruZ1pk5omidpl sAgi+EsqRYOHCSghNUpOvoneVVF7LZXTNaFX27rVx0fRfKOqsxbdgR7LQUuN+J26GIlJ 5t5onSITs2XEFw1G4naBk9nnayqivKfTAQmYFlDklb2n1WKswoFC6mzd0HQNv1W8yr5d FiLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=hRVfCPeG7fJQMh3P3wcjyEm79b9YVN2T5Zw+OTjxA+k=; b=0UlIq/lF4lC3v129/VuNoTnnVagqECKM7Dgzd2nvsb/guaKkRzTR01BxDV6dqcpUQl +Hjk4bTgdyEDyoF/j+q/IFXtEbzrOwaBXnvvwohUgSoB7xLZ/fy8xTZ56GMQ9ZmLyT+Z VXj8fvC+iCuQW158KEN0iyHBpTQ1jRFoFJXYT3HhNgSfT/PSEhIRGFvXdNtKUmcLIFhT wyPrV89d5+kMXUH8ZQKvrGIfDznBnkf9WepPHZpZ4UBuZUI6xON5hadRISNw9xnr+U5A mo6zHR/mOrIkjUWolywmr3oDsc1I81MBPo7ljmR2QeP8W4IDMfP2AbhDor84A7cvg5PK 8lYA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@brainfault-org.20150623.gappssmtp.com header.s=20150623 header.b=l62viUli; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e8si470888ejd.228.2020.10.22.01.45.45; Thu, 22 Oct 2020 01:46:07 -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=@brainfault-org.20150623.gappssmtp.com header.s=20150623 header.b=l62viUli; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2508413AbgJVHWW (ORCPT + 99 others); Thu, 22 Oct 2020 03:22:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51978 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2506071AbgJVHWW (ORCPT ); Thu, 22 Oct 2020 03:22:22 -0400 Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2D4C9C0613CE for ; Thu, 22 Oct 2020 00:22:22 -0700 (PDT) Received: by mail-wr1-x443.google.com with SMTP id y12so813900wrp.6 for ; Thu, 22 Oct 2020 00:22:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brainfault-org.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=hRVfCPeG7fJQMh3P3wcjyEm79b9YVN2T5Zw+OTjxA+k=; b=l62viUliYeV2coWEKzvRKIvzLclR5p/sgwtQlSs58R0Iodk+1JnwRelFAxeI6aPmAq lKIVfwinX2TQvcOk3iE2GDL6emseub5jV5wh6IANyJazZBUTS0az32HZHUEJyTzbJJ3C e3dSni8+8oq4f3kvuemNCmLiyWu0QBZSdboWYwQC1m75Bn2L2MoHA+jtbMPs5JZ7URHx +SD7r1g+2KuD67TlTOdCH7NOWiCwtJNLAJq2ExkWSV/7Mjnj9k+SlBaoJWVZnKqAqSoQ IK8gv4tmITNXMo9PXF0+ajI9CMNC/yvF9nQBVFtVAUzYJdt8vz9N0g1W6nlZRiRYQ3iR 1c/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=hRVfCPeG7fJQMh3P3wcjyEm79b9YVN2T5Zw+OTjxA+k=; b=Dkii9B2JwtCpbVDm+a4pbHxJxryfwWjaRyAlrkpShlY/9hXlRMvksxK0OEisk21uBj oE4SOD3eQPpjj0zM0RUw25Xyf/9H4WF+dC25vlGveLjw3XUhmeqDfxA3aTGcRQurK9cK KTPJZ+5QhU7FwQb9G+gB1fRQAvuBfYv1AFpbjk/SYtC9MPC78rguWO4TelsrrmfCD4Wy ZmwE5dVVi3meD1dJafnFwrJeLMlxJCAabFGgTtMkqKDKFUO1gqQpvG2OHSRIcTjVWp1i 5xAJu0YVgdv9/f8yTAR3mffnlHF1EXcHzWjCJVtmJT/8PXpSZrWqYuLkiimacyXWIw6N qEKg== X-Gm-Message-State: AOAM530469Md5mg/Z7MLmQrWZxzQNgkw3fD4mJJEskPfPM6dZRrtVxSt QxwCvaFEebcHUtZKehWuni3MRezsme8uLb7kqSANcg== X-Received: by 2002:adf:80cb:: with SMTP id 69mr1097878wrl.325.1603351340703; Thu, 22 Oct 2020 00:22:20 -0700 (PDT) MIME-Version: 1.0 References: <20201009211344.2358688-1-atish.patra@wdc.com> <20201009211344.2358688-5-atish.patra@wdc.com> In-Reply-To: From: Anup Patel Date: Thu, 22 Oct 2020 12:52:09 +0530 Message-ID: Subject: Re: [PATCH 4/5] RISC-V: Protect .init.text & .init.data To: Atish Patra Cc: Jim Wilson , Palmer Dabbelt , Greentime Hu , Kito Cheng , Atish Patra , Albert Ou , Kees Cook , Linux Kernel Mailing List , linux-riscv , Guo Ren , Zong Li , Paul Walmsley , Andrew Morton , Borislav Petkov , Michel Lespinasse , Ard Biesheuvel Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Oct 22, 2020 at 10:33 AM Anup Patel wrote: > > On Thu, Oct 22, 2020 at 7:01 AM Atish Patra wrote: > > > > On Fri, Oct 16, 2020 at 11:24 AM Atish Patra wrote: > > > > > > On Tue, Oct 13, 2020 at 10:24 PM Atish Patra wrote: > > > > > > > > On Tue, Oct 13, 2020 at 6:21 PM Jim Wilson wrote: > > > > > > > > > > On Tue, Oct 13, 2020 at 3:25 PM Atish Patra wrote: > > > > > > This happens only when copy_from_user is called from function that is > > > > > > annotated with __init. > > > > > > Adding Kito & Jim for their input > > > > > > > > > > > > @kito, @Jim: Please let me know if I should create a issue in > > > > > > riscv-gnu-toolchain repo or somewhere else. > > > > > > > > > > I can't do anything useful without a testcase that I can use to > > > > > reproduce the problem. The interactions here are complex, so pointing > > > > > at lines of code or kernel config options doesn't give me any useful > > > > > info. > > > > > > > > > > Relaxation can convert calls to a jal. I don't know of any open bugs > > > > > in this area that can generate relocation errors. if it is a > > > > > relaxation error then turning off relaxation should work around the > > > > > problem as you suggested. > > > > > > > > > > A kernel build problem is serious. I think this is worth a bug > > > > > report. FSF binutils or riscv-gnu-toolchain is fine. > > > > > > > > > > > > > I have created an issue with detailed descriptions and reproduction steps. > > > > Please let me know if you need anything else. > > > > > > > > > > It may be a toolchain issue. Here is the ongoing discussion in case > > > anybody else is interested. > > > > > > https://github.com/riscv/riscv-gnu-toolchain/issues/738 > > > > > > > > Jim > > > > > > > > > > > > > > > > -- > > > > Regards, > > > > Atish > > > > > > > > > > > > -- > > > Regards, > > > Atish > > > > Thanks to Jim, we know the cause now. Jim has provided an excellent > > analysis of the issue in the github issue report. > > https://github.com/riscv/riscv-gnu-toolchain/issues/738 > > > > To summarize, the linker relaxation code is not aware of the > > alignments between sections. > > That's why it relaxes the calls from .text to .init.text and converts > > a auipc+jalr pair to jal even if the address can't be fit +/- 1MB. > > > > There are few ways we can solve this problem. > > > > 1. As per Jim's suggestion, linker relaxation code is aware of the > > section alignments. We can mark .init.text as a 2MB aligned section. > > For calls within a section, section's alignment will be used in the > > calculation. For calls across sections, e.g. from .init.text to .text, > > the maximum > > section alignment of every section will be used. Thus, all > > relaxation within .init.text and between any sections will be > > impacted. > > Thus, it avoids the error but results in the following increase in > > size of various sections. > > section change in size (in bytes) > > .head.text +4 > > .text +40 > > .init.text. +6530 > > .exit.text +84 > > > > The only significant increase is .init.text but it is freed after > > boot. Thus, I don't see any significant performance degradation due to > > that. > > > > Here is the diff > > --- a/arch/riscv/kernel/vmlinux.lds.S > > +++ b/arch/riscv/kernel/vmlinux.lds.S > > @@ -51,7 +51,13 @@ SECTIONS > > . = ALIGN(SECTION_ALIGN); > > __init_begin = .; > > __init_text_begin = .; > > - INIT_TEXT_SECTION(PAGE_SIZE) > > + . = ALIGN(PAGE_SIZE); \ > > + .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) > > ALIGN(SECTION_ALIGN) { \ > > + _sinittext = .; \ > > + INIT_TEXT \ > > + _einittext = .; \ > > + } > > + > > . = ALIGN(8); > > __soc_early_init_table : { > > __soc_early_init_table_start = .; > > > > 2. We will continue to keep head.txt & .init.text together before > > .text. However, we will map the pages that contain head & init.text at > > page > > granularity so that .head.text and init.text can have different > > permissions. I have not measured the performance impact of this but it > > won't > > too bad given that the combined size of sections .head.txt & > > .init.text is 200K. So we are talking about page level permission only > > for > > ~50 pages during boot. > > > > 3. Keep head.text in a separate 2MB aligned section. .init.text will > > follow .head.text in its own section as well. This increases the > > kernel > > size by 2MB for MMU kernels. For nommu case, it will only increase > > by 64 bytes due to smaller section alignment for nommu kernels. > > > > Both solutions 1 & 2 come at minimal performance on boot time while > > solution 3 comes at increased kernel size. > > > > Any preference ? > > I prefer solution#3 because: > 1. This will help us avoid special handling of static objects > 2. This will make RISC-V linker script more aligned with other > major architectures > > I don't think solution#3 will increase the size of the kernel by 2MB. We > can make head.text part of text section. There will be only one section > alignment between text section and init section but the existing section > alignment between init section and text section will be removed. In other > words, number of section alignments will remain same. I think we will need to incorporate Jim's suggestion irrespective of the solution we choose because without Jim's changes we can hit the linker relaxation issue in solution#2 as well. Regards, Anup