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 X-Spam-Level: X-Spam-Status: No, score=-0.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6CDCAC2BA19 for ; Mon, 13 Apr 2020 13:18:37 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 1E52F20692 for ; Mon, 13 Apr 2020 13:18:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1E52F20692 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=xmission.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id A632B8E0114; Mon, 13 Apr 2020 09:18:36 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A14BB8E0104; Mon, 13 Apr 2020 09:18:36 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9034E8E0114; Mon, 13 Apr 2020 09:18:36 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0072.hostedemail.com [216.40.44.72]) by kanga.kvack.org (Postfix) with ESMTP id 749438E0104 for ; Mon, 13 Apr 2020 09:18:36 -0400 (EDT) Received: from smtpin16.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 271E5181AEF09 for ; Mon, 13 Apr 2020 13:18:36 +0000 (UTC) X-FDA: 76702886232.16.spot10_8532df8d91348 X-HE-Tag: spot10_8532df8d91348 X-Filterd-Recvd-Size: 9431 Received: from out03.mta.xmission.com (out03.mta.xmission.com [166.70.13.233]) by imf35.hostedemail.com (Postfix) with ESMTP for ; Mon, 13 Apr 2020 13:18:35 +0000 (UTC) Received: from in01.mta.xmission.com ([166.70.13.51]) by out03.mta.xmission.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jNyyi-0008LQ-H8; Mon, 13 Apr 2020 07:18:20 -0600 Received: from ip68-227-160-95.om.om.cox.net ([68.227.160.95] helo=x220.xmission.com) by in01.mta.xmission.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.87) (envelope-from ) id 1jNyyh-0001pU-MR; Mon, 13 Apr 2020 07:18:20 -0600 From: ebiederm@xmission.com (Eric W. Biederman) To: Baoquan He Cc: Russell King - ARM Linux admin , Anshuman Khandual , Catalin Marinas , Bhupesh Sharma , David Hildenbrand , kexec@lists.infradead.org, linux-mm@kvack.org, James Morse , Andrew Morton , Will Deacon , linux-arm-kernel@lists.infradead.org References: <34274b02-60ba-eb78-eacd-6dc1146ed3cd@arm.com> <80e4d1d7-f493-3f66-f700-86f18002d692@redhat.com> <20200410121013.03b609fd572504c03a666f4a@linux-foundation.org> <20200411034414.GH2129@MiWiFi-R3L-srv> <20200411093009.GH25745@shell.armlinux.org.uk> <20200412053507.GA4247@MiWiFi-R3L-srv> <20200412080836.GM25745@shell.armlinux.org.uk> <87wo6klbw0.fsf@x220.int.ebiederm.org> <20200413023701.GA20265@MiWiFi-R3L-srv> Date: Mon, 13 Apr 2020 08:15:23 -0500 In-Reply-To: <20200413023701.GA20265@MiWiFi-R3L-srv> (Baoquan He's message of "Mon, 13 Apr 2020 10:37:01 +0800") Message-ID: <871rorjzmc.fsf@x220.int.ebiederm.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-XM-SPF: eid=1jNyyh-0001pU-MR;;;mid=<871rorjzmc.fsf@x220.int.ebiederm.org>;;;hst=in01.mta.xmission.com;;;ip=68.227.160.95;;;frm=ebiederm@xmission.com;;;spf=neutral X-XM-AID: U2FsdGVkX18IcLGNZ68qGfyWErcGAcIFiPpRDZSTrwA= X-SA-Exim-Connect-IP: 68.227.160.95 X-SA-Exim-Mail-From: ebiederm@xmission.com Subject: Re: [PATCH 1/3] kexec: Prevent removal of memory in use by a loaded kexec image X-SA-Exim-Version: 4.2.1 (built Thu, 05 May 2016 13:38:54 -0600) X-SA-Exim-Scanned: Yes (on in01.mta.xmission.com) X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Baoquan He writes: > On 04/12/20 at 02:52pm, Eric W. Biederman wrote: >> >> The only benefit of kexec_file_load is that it is simple enough from a >> kernel perspective that signatures can be checked. > > We don't have this restriction any more with below commit: > > commit 99d5cadfde2b ("kexec_file: split KEXEC_VERIFY_SIG into KEXEC_SIG > and KEXEC_SIG_FORCE") > > With KEXEC_SIG_FORCE not set, we can use kexec_load_file to cover both > secure boot or legacy system for kexec/kdump. Being simple enough is > enough to astract and convince us to use it instead. And kexec_file_load > has been in use for several years on systems with secure boot, since > added in 2014, on x86_64. No. Actaully kexec_file_load is the less capable interface, and less flexible interface. Which is why it is appropriate for signature verification. >> kexec_load in every other respect is the more capable and functional >> interface. It makes no sense to get rid of it. >> >> It does make sense to reload with a loaded kernel on memory hotplug. >> That is simple and easy. If we are going to handle something in the >> kernel it should simple an automated unloading of the kernel on memory >> hotplug. >> >> >> I think it would be irresponsible to deprecate kexec_load on any >> platform. >> >> I also suspect that kexec_file_load could be taught to copy the dtb >> on arm32 if someone wants to deal with signatures. >> >> We definitely can not even think of deprecating kexec_load until >> architecture that supports it also supports kexec_file_load and everyone >> is happy with that interface. That is Linus's no regression rule. > > I should pick a milder word to express our tendency and tell our plan > then 'obsolete'. Even though I added 'gradually', seems it doesn't help > much. I didn't mean to say 'deprecate' at all when replied. > > The situation and trend I understand about kexec_load and kexec_file_load > are: > > 1) Supporting kexec_file_load is suggested to add in ARCHes which don't > have yet, just as x86_64, arm64 and s390 have done; > > 2) kexec_file_load is suggested to use, and take precedence over > kexec_load in the future, if both are supported in one ARCH. The deep problem is that kexec_file_load is distinctly less expressive than kexec_load. > 3) Kexec_load is kept being used by ARCHes w/o kexc_file_load support, > and by ARCHes for back compatibility w/ kexec_file_load support. > > For 1) and 2), I think the reason is obvious as Eric said, > kexec_file_load is simple enough. And currently, whenever we got a bug > report, we may need fix them twice, for kexec_load and kexec_file_load. > If kexec_file_load is made by default, e.g on x86_64, we will change it > in kernel space only, for kexec_file_load. This is what I meant about > 'obsolete gradually'. I think for arm64, s390, they will do these too. > Unless there's some critical/blocker bug in kexec_load, to corrupt the > old kexec_load interface in old product. Maybe. The code that kexec_file_load sucked into the kernel is quite stable and rarely needs changes except during a port of kexec to another architecture. Last I looked the real maintenance effor of kexec and kexec on panic was in the drivers. So I don't think we can use maintenance to do anything. > For 3), people can still use kexec_load and develop/fix for it, if no > kexec_file_load supported. But 32-bit arm should be a different one, > more like i386, we will leave it as is, and fix anything which could > break it. But people really expects to improve or add feature to it? E.g > in this patchset, the mem hotplug issue James raised, I assume James is > focusing on arm64, x86_64, but not 32-bit arm. As DavidH commented in > another reply, people even don't agree to continue supporting memory > hotplug on 32-bit system. We ever took effort to fix a memory hotplug > bug on i386 with a patch, but people would rather set it as BROKEN. For memory hotplug just reload. Userspace already gets good events. We should not expect anything except a panic kernel to be loaded over a memory hotplug event. The kexec on panic code should actually be loaded in a location that we don't reliquish if asked for it. Quite frankly at this point I would love to see the signature fad die, which would allow us to remove kexec_file_load. I still have not seen the signature code used anywhere except by people anticipating trouble. Given that Microsoft has already directly signed a malicous bootloader. (Not in the Linux ecosystem). I don't even know if any of the reasons for having kexec_file_load are legtimate. If someone wants to do the work and ensure everything that is possible to load with kexec_load is possible to load with kexec_file_load. Kernels supporting the multi-boot protocol etc. Then we can consider deprecating kexec_load. I think it took me about 15 years to remove the sysctl system call and it only ever had about 10 users. If you want to go through that kind of work to make certain there are no more users and that everything they could do with the old interface is doable with the new interface then please be my guest. Until then we need to fully support kexec_load. Eric