From patchwork Tue Jun 2 16:17:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C5=81ukasz_Stelmach?= X-Patchwork-Id: 11584073 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 44D6114F6 for ; Tue, 2 Jun 2020 16:18:59 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 17EAE206E2 for ; Tue, 2 Jun 2020 16:18:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="e0cif81P"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="NgwEoJbD" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 17EAE206E2 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:References:MIME-Version:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=aYThfNefgnwAWRRq4BoKYz1zIeHaE4ZV4IqTIJ3gxm0=; b=e0cif81PVU8NSM dymsIeCYiGzg96GW71A28a3UXKi/6+UAM/8xPmdX4nGv4L6OrbpPEOYzf3BzfcKbn7twVZLxAyPkj lxCGEsNu/lpgej7UnjhMRy9CGbw8N/8RR6WpupXZbPbhKespwqZxFAuUb8PH0k4gwt6XKiKdnGuD0 h7IvNeknVbOBweT3BNRG4Ovoy8oHHFThc5UdGSp5a3xc2Pw8/RF3pE6gnaDFDUV1cEtnM+4Yeyh0W orXKy3h8/A8Q0cNI0oulexIjXRCeep/TSDFdPuBgLPnNrbo1f6LUR75NbIo4QmLgz0eout2uYIqp1 qJbYk7D9CEM41I7GylhQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jg9cw-0002BG-Kp; Tue, 02 Jun 2020 16:18:58 +0000 Received: from mailout1.w1.samsung.com ([210.118.77.11]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jg9bh-0000t3-Hz for linux-arm-kernel@lists.infradead.org; Tue, 02 Jun 2020 16:17:43 +0000 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200602161738euoutp012a5a75e1b9da6414541b41397ac10c83~UxloJcYIk2755627556euoutp01C for ; Tue, 2 Jun 2020 16:17:38 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200602161738euoutp012a5a75e1b9da6414541b41397ac10c83~UxloJcYIk2755627556euoutp01C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1591114658; bh=ZsH46X2OsHgVVE4UNgCQSLzPGPM56MRSMz7Fj5fkReY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NgwEoJbD/s4k7Eq8XJQUVgm0nBv2BSEsmu4Ub4+HK23oaGCe0C6YuDeLLg1hkwuC0 eh/XvbG9OXLz2i/4Z74QjUcNwx3CxHDTnry/wvfT796CElMZ0XjgdN2m+sMxiUp8HY yeFyZW0cPC5e6RDhgz65oFYWxEUm/VPmY21Q5li8= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200602161738eucas1p12bde97b5a914113bd67a30baeb678840~Uxln0uBkY1855418554eucas1p1R; Tue, 2 Jun 2020 16:17:38 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id 0C.23.60698.1AB76DE5; Tue, 2 Jun 2020 17:17:37 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200602161737eucas1p2c83700f7c17296c4367ee3fda1c6e783~Uxlnakb1u1812318123eucas1p24; Tue, 2 Jun 2020 16:17:37 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20200602161737eusmtrp1b27e313f0a87e0dacc6846a4570f1e5d~UxlnZ44VD2876728767eusmtrp1N; Tue, 2 Jun 2020 16:17:37 +0000 (GMT) X-AuditID: cbfec7f5-a29ff7000001ed1a-15-5ed67ba1bb4d Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 0B.29.07950.1AB76DE5; Tue, 2 Jun 2020 17:17:37 +0100 (BST) Received: from localhost (unknown [106.120.51.46]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200602161737eusmtip273b20c9f2d5ed78dde100331f078ec25~UxlnNTaQz0825708257eusmtip2B; Tue, 2 Jun 2020 16:17:37 +0000 (GMT) From: =?utf-8?q?=C5=81ukasz_Stelmach?= To: Russell King , Masahiro Yamada , Nick Desaulniers , Thomas Gleixner , Enrico Weigelt , Kees Cook , Ingo Molnar , Ben Dooks , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/5] arm: decompressor: set malloc pool size for the decompressor Date: Tue, 2 Jun 2020 18:17:27 +0200 Message-Id: <20200602161731.23033-2-l.stelmach@samsung.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200602161731.23033-1-l.stelmach@samsung.com> MIME-Version: 1.0 Organization: Samsung R&D Institute Poland X-Brightmail-Tracker: H4sIAAAAAAAAA02Se0hTcRTH++3ezety+nP5OFn0GPWHRj4w6kdG9IRbBL2gIMq62W1Gm8rm MuuP1gNLTV2a5DM0FM184LQ5zZqtpZa1EGspqZkVvbCMNLIsc7tK/fc953zO+Z4Dh6HkfeIA 5khMPK+J4VQKiZQ2tY7ZlxafdESGmrpWkNqcGjHJrG4RkZ7Tt0TkUaqa9FjLETG+dohJV1OB hFizbyNSZetzI68GusXkxp+HiAwbJkRk3DJGkzpjNrXGk+1ydFJsvr6TZn9XvKfYIqOONVYk S9heR7OE/Wy3u7F1JadYw/CQhE2vr0DsN+O8bTP3SFcd4lVHjvGakNUHpNFl95tRXLLX8Wup rW56VO2RgtwZwMtgwlAsSUFSRo7LEQz09FNCMILg3os+Wgi+IchNsomnW57VdiOhUIag7tHI FPUOgdlc6KIkeC1klLaLnQUfPCqCpuzzLhcKP0XwymISOalZeBekDpVSTk3jxTBQapM4tQxH gKXg15TffDhf1jCZZxh3vAryR1QC4g0Pct/QTu2Fg6DyzHOXpibxszfzXUcAzmbAXmyihDkb oGZkVCToWfCxrd5N0HOhI+si7ZwP+BRkZS4Xei8iMBX8oAUmAnrtP107UDgQappChPRamGg/ N9XqCd1D3sIKnpBpukIJaRlcSJIL9CKozmieGhgAaR/LkQEp8v47Ju+/A/L+eRUhqgL58zqt Wslrw2P4hGAtp9bqYpTBUbFqI5p8uo4/baNmdGf8oBVhBik8ZKFhjki5mDumTVRbETCUwke2 7nFHpFx2iEs8wWti92t0Kl5rRXMYWuEvC7/2YZ8cK7l4/ijPx/Ga6aqIcQ/QI/I1KWHAQLb4 +X7frSyK29RfOXiG+21ONN7NWBftuyEt/pyfrgSXcFEvQ2yaJ9v5tkGfqusRZOfYpcby+IVK 01tNe4g5P06p37oxIjB95YLBGjLbo7Hl8qfIS8N5X9fHjl/dbMsplGd9aUySf244fGJHIaKT r3pbfExL9uItM0QKWhvNhQVRGi33F5M6K6xwAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrLIsWRmVeSWpSXmKPExsVy+t/xe7oLq6/FGWxpkLfYOGM9q8WkdQeY LG427mayONOda3Hz0ApGi02Pr7FaXN41h83i0NS9jBZrj9xlt3j44Aarxep/pxgtPkz4z2Tx Z/9PFovNm6YyO/B5XL52kdljdsNFFo+/q14weyzYVOqxaVUnm8eda3vYPN6dO8fusXlJvceE D2/ZPPq2rGL0+LxJLoA7Ss+mKL+0JFUhI7+4xFYp2tDCSM/Q0kLPyMRSz9DYPNbKyFRJ384m JTUnsyy1SN8uQS9j+dE9jAWd/BWLuo+xNzCu4+li5OSQEDCRuLrxBmMXIxeHkMBSRomTTzpY uxg5gBJSEivnpkPUCEv8udbFBlHzlFFizvUbzCAJNgFHif6lJ1hBEiICf5kkDs46DVbFLHCN UWLjhJNgVcICIRITj15iBbFZBFQlHiw9wgZi8wpYS+yf85sVYoW8RPvy7WwgmzkFbCRmf8kB CQsJ5Eo8XP6KHaJcUOLkzCcsICXMAuoS6+cJgYT5BbQk1jRdZwGxmYGmNG+dzTyBUWgWko5Z CB2zkFQtYGRexSiSWlqcm55bbKRXnJhbXJqXrpecn7uJERjV24793LKDsetd8CFGAQ5GJR5e A8NrcUKsiWXFlbmHGCU4mJVEeJ3Ono4T4k1JrKxKLcqPLyrNSS0+xGgK9OVEZinR5Hxgwskr iTc0NTS3sDQ0NzY3NrNQEuftEDgYIySQnliSmp2aWpBaBNPHxMEp1cB44erJ3nIWIe/tV26o xBt/X1ewrPqYl1FHgPfTLTltByffCTrPp2J67/ic0iu7lBvLTNhTNl4X3vVXqiG+/uOlxJ3v Oo+0Sdje2rI4dlfDeVGe9wKXCu/2xIa+KO5yjml3mfR4YS2jzitbX56cK5s+X/57d/H7ayEF 1X864vt1V5xhmrnevuOlEktxRqKhFnNRcSIAE1ZQ3gADAAA= X-CMS-MailID: 20200602161737eucas1p2c83700f7c17296c4367ee3fda1c6e783 X-Msg-Generator: CA X-RootMTR: 20200602161737eucas1p2c83700f7c17296c4367ee3fda1c6e783 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200602161737eucas1p2c83700f7c17296c4367ee3fda1c6e783 References: <20200601142754.26139-1-l.stelmach@samsung.com> <20200602161731.23033-1-l.stelmach@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200602_091741_742982_6F501984 X-CRM114-Status: GOOD ( 12.07 ) X-Spam-Score: -5.2 (-----) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-5.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at https://www.dnswl.org/, high trust [210.118.77.11 listed in list.dnswl.org] 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [210.118.77.11 listed in wl.mailspike.net] -0.0 SPF_PASS SPF: sender matches SPF record -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders -0.0 DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: AKASHI Takahiro , Marek Szyprowski , =?utf-8?q?=C5=81ukasz_Stelmach?= , Bartlomiej Zolnierkiewicz Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org Move the definition of malloc pool size of the decompressor to a single place. This value will be exposed later for kexec_file loader. Signed-off-by: Łukasz Stelmach --- arch/arm/boot/compressed/Makefile | 7 +++++-- arch/arm/boot/compressed/head.S | 6 ++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile index 9c11e7490292..c4195651e371 100644 --- a/arch/arm/boot/compressed/Makefile +++ b/arch/arm/boot/compressed/Makefile @@ -7,7 +7,9 @@ OBJS = -AFLAGS_head.o += -DTEXT_OFFSET=$(TEXT_OFFSET) +MALLOC_SIZE =0x10000 + +AFLAGS_head.o += -DTEXT_OFFSET=$(TEXT_OFFSET) -DMALLOC_SIZE=$(MALLOC_SIZE) HEAD = head.o OBJS += misc.o decompress.o ifeq ($(CONFIG_DEBUG_UNCOMPRESS),y) @@ -68,7 +70,8 @@ ZTEXTADDR := 0 ZBSSADDR := ALIGN(8) endif -CPPFLAGS_vmlinux.lds := -DTEXT_START="$(ZTEXTADDR)" -DBSS_START="$(ZBSSADDR)" +CPPFLAGS_vmlinux.lds := -DTEXT_START="$(ZTEXTADDR)" -DBSS_START="$(ZBSSADDR)" \ + -DMALLOC_SIZE="$(MALLOC_SIZE)" compress-$(CONFIG_KERNEL_GZIP) = gzip compress-$(CONFIG_KERNEL_LZO) = lzo diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index e8e1c866e413..55758264e776 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S @@ -309,7 +309,8 @@ restart: adr r0, LC0 #ifndef CONFIG_ZBOOT_ROM /* malloc space is above the relocated stack (64k max) */ add sp, sp, r0 - add r10, sp, #0x10000 + mov r10, #MALLOC_SIZE + add r10, r10, sp #else /* * With ZBOOT_ROM the bss/stack is non relocatable, @@ -623,7 +624,8 @@ not_relocated: mov r0, #0 */ mov r0, r4 mov r1, sp @ malloc space above stack - add r2, sp, #0x10000 @ 64k max + mov r2, #MALLOC_SIZE @ 64k max + add r2, r2, sp mov r3, r7 bl decompress_kernel From patchwork Tue Jun 2 16:17:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C5=81ukasz_Stelmach?= X-Patchwork-Id: 11584065 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EA26E618 for ; Tue, 2 Jun 2020 16:17:52 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id AC0E4206E2 for ; Tue, 2 Jun 2020 16:17:52 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="NKXpx3Xv"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="WwGJABCV" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AC0E4206E2 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:References:MIME-Version:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Wm8OJ9R7dZw7rB/kmELJwXTAmVCkiQdEhFt2/nBwz/Y=; b=NKXpx3Xvo1YDGw /iaHD+tF2wTbvs2f487x1x3QWtrxieezmm8N0dGMHBPOafMgwxV/ddjMYAPl8Gt5V8kLMGcDPRtrm umh8Qfbj0x07VscT+k0GPmSgIrKwanNbL0/SuXi9AS4MfF+D9b30nNPTZ0hmrm0rc7i35N7tMVy0E UbDchSJUYzvUmskCtZETvFfI1i8AKYaDvD7okSpco5DPIq2MAj2A+BJSXYC8bPFiEM87M9duTB7Os PWzvV2PgsD/VCrJxzgON7RM3GP59fRZrcoQjL7FzYSElC4gViJFprmYJwToYsvvXsVWap0Dvdf9a4 shfB1o9rJvSH0chlqncA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jg9bk-0000wd-BL; Tue, 02 Jun 2020 16:17:44 +0000 Received: from mailout2.w1.samsung.com ([210.118.77.12]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jg9bg-0000tD-1Z for linux-arm-kernel@lists.infradead.org; Tue, 02 Jun 2020 16:17:41 +0000 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200602161738euoutp02c3fa6ba7957ab8cd0eae8825dbdc8ebe~UxloZYIYM1321713217euoutp02C for ; Tue, 2 Jun 2020 16:17:38 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200602161738euoutp02c3fa6ba7957ab8cd0eae8825dbdc8ebe~UxloZYIYM1321713217euoutp02C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1591114658; bh=6fQXZmSTsOXD9PCsKsQlhyyv57eMpT0Awzxum+3ePUA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WwGJABCV3T5YO2T+ZVMu0rRDD0bc/H7+1y7Te8I7hyhDH7Ckemw64+oyYedWSe5rQ kzBZeB1lm/22jPX/tV64F5ncDXn3+Y6YskBjWip6CPJPbrJ9iXZ+/lfDLZZhOPivjr 5N/PoWSgLFc5fNe5PG/N3sg2JRAYA/nJIyDmJ2FY= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200602161738eucas1p2f68006fddfbaf01f75f6b20de9c15cbc~UxloGtt9a1812318123eucas1p25; Tue, 2 Jun 2020 16:17:38 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id FC.23.60698.2AB76DE5; Tue, 2 Jun 2020 17:17:38 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200602161738eucas1p27dfbe386bd76555598d5574faf4fdad3~Uxln1dQ011811918119eucas1p25; Tue, 2 Jun 2020 16:17:38 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20200602161737eusmtrp1f8d7b2dfe4b25ce023e560009a294e0a~UxlnvCMqX2876728767eusmtrp1P; Tue, 2 Jun 2020 16:17:37 +0000 (GMT) X-AuditID: cbfec7f5-a0fff7000001ed1a-18-5ed67ba2c0f1 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id E0.DE.08375.1AB76DE5; Tue, 2 Jun 2020 17:17:37 +0100 (BST) Received: from localhost (unknown [106.120.51.46]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200602161737eusmtip2ae861338ba4a9a14a2c82f662c12b774~UxlnjrcYK0295502955eusmtip2k; Tue, 2 Jun 2020 16:17:37 +0000 (GMT) From: =?utf-8?q?=C5=81ukasz_Stelmach?= To: Russell King , Masahiro Yamada , Nick Desaulniers , Thomas Gleixner , Enrico Weigelt , Kees Cook , Ingo Molnar , Ben Dooks , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/5] arm: add image header definitions Date: Tue, 2 Jun 2020 18:17:28 +0200 Message-Id: <20200602161731.23033-3-l.stelmach@samsung.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200602161731.23033-1-l.stelmach@samsung.com> MIME-Version: 1.0 Organization: Samsung R&D Institute Poland X-Brightmail-Tracker: H4sIAAAAAAAAA01Sa0hTcRTnv3t3dzVn/80eJ42iUR+SfGXFTaMyom5PLIpAaLX0YtE2Y2tW BqVLfGU5jWE5P9gyGuaD5lzlI3NGVtZCrKWUtejhAypDR1k2c7tKffud83ucc+DQhLRPGEof UR/nNGqFUkYFkvaHY84I82mXPNr5VcLculwnZEpq7wuY3qwmAfP0vIrpdVgQY/3gEjLdjeUU 4zC2IKbmQZ+Iee/uETI3vU8QM2yYEDDjrWMkU281EuuD2W5XF8GaMrtI9k/VAMFWWHWstSqf Yt+4min2q9MpYusrz7KG4S8Ue9FWhdgR64LEGUmBa1I45ZF0ThO19mDg4VJ3ruhYX9jJrvwB lIkezClAATTgFZD9xy4qQIG0FFsQGOxuii9GEXQU100xIwiGLa9F05aakisCnriBwF14daro R/C2zSb0qSicAEXXHwl9xCzsEUCjMdcfTOAXCN632gU+VQheDXWlXuTDJF4CxXq9vy/G8fCu rQXx8xZC7o3bk2aaDsBrwDSq5CUSeHzlI+nDM3E4VOtf+TExKT/XYCJ8swAbaaj3TOdshPL2 QYLHITDUYZu6Zz50XiokffmAz8KlklW8txCBvfwnyWvi4Y3zl38HAi+FusYovp0AnrEJircG Q88XCb9CMJTYSwm+LYa8HCmvXgy1Rc1TgaFwYciCDEhW9t8xZf8dUPZvVgUiqtBcTqdVpXLa WDV3IlKrUGl16tTI5DSVFU0+Xae3w3MH3Rs/5ECYRrIgcXSMSy4VKtK1p1QOBDQhmyXe8KxT LhWnKE5lcJq0AxqdktM6UBhNyuaKY82D+6U4VXGcO8pxxzjNNCugA0Izkdmmouqbs1XpWwz7 YvaYT37qjtgV/YG6ZkmSNGz+ptZj0bZ1RU3VZ570pW/P+Y4r+18uokzLRPqi/DxxVuzo7KB5 t01H92ZszcpOSVra0JpYoEys3Lm7oGN7YmazPI0OyRn4EZcRt/K5bot3fCj3brj5c/tv4vJE wKbl66t3dCb/lpHaw4qYcEKjVfwFqt11vHADAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrLIsWRmVeSWpSXmKPExsVy+t/xe7oLq6/FGRycamqxccZ6VotJ6w4w Wdxs3M1kcaY71+LmoRWMFpseX2O1uLxrDpvFoal7GS3WHrnLbvHwwQ1Wi9X/TjFafJjwn8ni z/6fLBabN01lduDzuHztIrPH7IaLLB5/V71g9liwqdRj06pONo871/awebw7d47dY/OSeo8J H96yefRtWcXo8XmTXAB3lJ5NUX5pSapCRn5xia1StKGFkZ6hpYWekYmlnqGxeayVkamSvp1N SmpOZllqkb5dgl7G9Aft7AV3pSsudr5gbGA8ItbFyMkhIWAisXbSTKYuRi4OIYGljBLP3qxi 7GLkAEpISaycmw5RIyzx51oXG0TNU0aJ0+f3MIMk2AQcJfqXnmAFSYgI/GWSODjrNFgVs8A1 RomNE06CVQkLWEqsn/6PEcRmEVCVmNjUxARi8wpYS9w/uJcRYoW8RPvy7WwgmzkFbCRmf8kB CQsJ5Eo8XP6KHaJcUOLkzCcsICXMAuoS6+cJgYT5BbQk1jRdZwGxmYGmNG+dzTyBUWgWko5Z CB2zkFQtYGRexSiSWlqcm55bbKhXnJhbXJqXrpecn7uJERjV24793LyD8dLG4EOMAhyMSjy8 BobX4oRYE8uKK3MPMUpwMCuJ8DqdPR0nxJuSWFmVWpQfX1Sak1p8iNEU6MuJzFKiyfnAhJNX Em9oamhuYWlobmxubGahJM7bIXAwRkggPbEkNTs1tSC1CKaPiYNTqoFR2//k8dAlpzK4v3RU Vwf33U95f7j40LGyXOZleg3sbI1fHdcJPSyW5kkR6J99cMnsO+43a3hy/d7qezye8WZq2aq/ j9tfXHPk1dxjxPg651QBl6rvzTcFrK/ULT8mqe5a+H3xvfbba7RYymI3cfxl+7Fnfr1ey3sH CaNPeWYd17i+9sbEf4hSYinOSDTUYi4qTgQACKAKBwADAAA= X-CMS-MailID: 20200602161738eucas1p27dfbe386bd76555598d5574faf4fdad3 X-Msg-Generator: CA X-RootMTR: 20200602161738eucas1p27dfbe386bd76555598d5574faf4fdad3 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200602161738eucas1p27dfbe386bd76555598d5574faf4fdad3 References: <20200601142754.26139-1-l.stelmach@samsung.com> <20200602161731.23033-1-l.stelmach@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200602_091740_216928_F51BC55C X-CRM114-Status: GOOD ( 16.54 ) X-Spam-Score: -5.2 (-----) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-5.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at https://www.dnswl.org/, high trust [210.118.77.12 listed in list.dnswl.org] 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [210.118.77.12 listed in wl.mailspike.net] -0.0 SPF_PASS SPF: sender matches SPF record -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders -0.0 DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: AKASHI Takahiro , Marek Szyprowski , =?utf-8?q?=C5=81ukasz_Stelmach?= , Bartlomiej Zolnierkiewicz Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org This structure will be used later by kexec_file loader. Signed-off-by: Łukasz Stelmach --- arch/arm/boot/compressed/head.S | 3 +- arch/arm/boot/compressed/vmlinux.lds.S | 13 ++----- arch/arm/include/asm/image.h | 48 ++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 11 deletions(-) create mode 100644 arch/arm/include/asm/image.h diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index 55758264e776..005b172d504f 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S @@ -7,6 +7,7 @@ */ #include #include +#include #include #include "efi-header.S" @@ -211,7 +212,7 @@ start: .word _magic_start @ absolute load/run zImage address .word _magic_end @ zImage end address .word 0x04030201 @ endianness flag - .word 0x45454545 @ another magic number to indicate + .word ARM_ZIMAGE_MAGIC2 @ another magic number to indicate .word _magic_table @ additional data table __EFI_HEADER diff --git a/arch/arm/boot/compressed/vmlinux.lds.S b/arch/arm/boot/compressed/vmlinux.lds.S index f82b5962d97e..308e9cd6a897 100644 --- a/arch/arm/boot/compressed/vmlinux.lds.S +++ b/arch/arm/boot/compressed/vmlinux.lds.S @@ -3,14 +3,7 @@ * Copyright (C) 2000 Russell King */ -#ifdef CONFIG_CPU_ENDIAN_BE8 -#define ZIMAGE_MAGIC(x) ( (((x) >> 24) & 0x000000ff) | \ - (((x) >> 8) & 0x0000ff00) | \ - (((x) << 8) & 0x00ff0000) | \ - (((x) << 24) & 0xff000000) ) -#else -#define ZIMAGE_MAGIC(x) (x) -#endif +#include OUTPUT_ARCH(arm) ENTRY(_start) @@ -43,7 +36,7 @@ SECTIONS .table : ALIGN(4) { _table_start = .; LONG(ZIMAGE_MAGIC(4)) - LONG(ZIMAGE_MAGIC(0x5a534c4b)) + LONG(ARM_ZIMAGE_MAGIC3) LONG(ZIMAGE_MAGIC(__piggy_size_addr - _start)) LONG(ZIMAGE_MAGIC(_kernel_bss_size)) LONG(0) @@ -107,7 +100,7 @@ SECTIONS _edata_real = .; } - _magic_sig = ZIMAGE_MAGIC(0x016f2818); + _magic_sig = ARM_ZIMAGE_MAGIC1; _magic_start = ZIMAGE_MAGIC(_start); _magic_end = ZIMAGE_MAGIC(_edata); _magic_table = ZIMAGE_MAGIC(_table_start - _start); diff --git a/arch/arm/include/asm/image.h b/arch/arm/include/asm/image.h new file mode 100644 index 000000000000..d5c18a0f6a34 --- /dev/null +++ b/arch/arm/include/asm/image.h @@ -0,0 +1,48 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef __ASM_IMAGE_H +#define __ASM_IMAGE_H + +#ifdef CONFIG_CPU_ENDIAN_BE8 +#define ZIMAGE_MAGIC(x) ((((x) >> 24) & 0x000000ff) | \ + (((x) >> 8) & 0x0000ff00) | \ + (((x) << 8) & 0x00ff0000) | \ + (((x) << 24) & 0xff000000)) +#else +#define ZIMAGE_MAGIC(x) (x) +#endif + +#define ARM_ZIMAGE_MAGIC1 ZIMAGE_MAGIC(0x016f2818) +#define ARM_ZIMAGE_MAGIC2 (0x45454545) +#define ARM_ZIMAGE_MAGIC3 ZIMAGE_MAGIC(0x5a534c4b) + +#ifndef __ASSEMBLY__ + +#include +#include + +/* ARM zImage header format */ +struct arm_zimage_header { + __le32 code[9]; + __le32 magic; + __le32 start; + __le32 end; + __le32 endian; + __le32 magic2; + __le32 extension_tag_offset; +}; + +struct arm_zimage_tag { + struct tag_header hdr; + union { +#define ZIMAGE_TAG_KRNL_SIZE ARM_ZIMAGE_MAGIC3 + struct zimage_krnl_size { + __le32 size_ptr; + __le32 bss_size; + } krnl_size; + } u; +}; + +#endif /* __ASSEMBLY__ */ + +#endif /* __ASM_IMAGE_H */ From patchwork Tue Jun 2 16:17:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C5=81ukasz_Stelmach?= X-Patchwork-Id: 11584067 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EDF0D618 for ; Tue, 2 Jun 2020 16:17:59 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 7DBC420757 for ; Tue, 2 Jun 2020 16:17:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="uPcc4+Ah"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="G3yHcZOl" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7DBC420757 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:References:MIME-Version:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ZzCn1N+BcfhDzAiq2b5mdj2unfqp07L42qSFoADwBzU=; b=uPcc4+Ah1hruPl nUd+1Q3FwWDm1Uk36tHcApCydy1BuHCGH1hhwIORi3HQJcMsD6RlAOVCO6Ev/HrDhX/DGM+TbkESv KHVJ/jtBMyClKJ50LEFUanc8XELlz6NLhcuDiUjrTndKqxKuStZRSKXKZwczzMZKKNy7tlgFqWDOQ jnPpp2K+75rziY/7JkrsWRAqSpE5idzQiKia6Di86kC9sROqK/Dq2kjddHxT3cy7dG1WsP6z7PuYN 1fxwKA/Zs/MopEbXH/+7TEd764adFtYoxM0Dcv4d0HrmbPN2/KSapO50IuN2lMKA/n4MNbU00oQDj 6nSk+NgNOMqDi4reqIrw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jg9bt-00016u-8B; Tue, 02 Jun 2020 16:17:53 +0000 Received: from mailout2.w1.samsung.com ([210.118.77.12]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jg9bg-0000tO-Fu for linux-arm-kernel@lists.infradead.org; Tue, 02 Jun 2020 16:17:42 +0000 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200602161739euoutp0225f68f2948fd5aca6febe5ef7b376ed6~Uxlo4hj881095510955euoutp02c for ; Tue, 2 Jun 2020 16:17:39 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200602161739euoutp0225f68f2948fd5aca6febe5ef7b376ed6~Uxlo4hj881095510955euoutp02c DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1591114659; bh=UQuTozY2MxX8UBgz0xZ3wonyIu/c1B+C4uicBd24pYQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=G3yHcZOlkuPt9kxT427OqGHvNtKAhYsXUp2y8tB4cvBu80mmOUq65hG27xSZFGn7H R+ZqDZKQvJZEqmdxjCEKl/pC+Y6ntw36fbUr44qRD9sXUwF8sMfl0pMwV+Q9Y3oC+z 9jcqlZ8b5p1Hgw7+7dQUwAgAiL/en6x4o2n+tKS0= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200602161738eucas1p15e82a7613dba95267f60bdb5b4239d69~Uxlonj1ap2724027240eucas1p1r; Tue, 2 Jun 2020 16:17:38 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 9A.81.60679.2AB76DE5; Tue, 2 Jun 2020 17:17:38 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200602161738eucas1p2151f88b526bb009c27820a4f290a961e~UxloH1urK2274322743eucas1p24; Tue, 2 Jun 2020 16:17:38 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20200602161738eusmtrp124c2fc089d2eefc0e4f645c81f22f111~UxloG8qmZ2876728767eusmtrp1R; Tue, 2 Jun 2020 16:17:38 +0000 (GMT) X-AuditID: cbfec7f4-0e5ff7000001ed07-a0-5ed67ba20cfa Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id D1.DE.08375.2AB76DE5; Tue, 2 Jun 2020 17:17:38 +0100 (BST) Received: from localhost (unknown [106.120.51.46]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20200602161738eusmtip107f00e3cd9844fdc6d380d542d79d533~Uxln48eu12690626906eusmtip13; Tue, 2 Jun 2020 16:17:38 +0000 (GMT) From: =?utf-8?q?=C5=81ukasz_Stelmach?= To: Russell King , Masahiro Yamada , Nick Desaulniers , Thomas Gleixner , Enrico Weigelt , Kees Cook , Ingo Molnar , Ben Dooks , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/5] arm: decompressor: define a new zImage tag Date: Tue, 2 Jun 2020 18:17:29 +0200 Message-Id: <20200602161731.23033-4-l.stelmach@samsung.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200602161731.23033-1-l.stelmach@samsung.com> MIME-Version: 1.0 Organization: Samsung R&D Institute Poland X-Brightmail-Tracker: H4sIAAAAAAAAA01Sa0hTYRju2zk7HpfT40nYi0XFukCWZRl2QukiBYf6URH4I2g186SWW7E5 L0WlRVk27wx1s/AWmnmhabPctDUry6UmxcpLkSVlmqWoWVJW21nUv+d9n+d53+f9+EiM7hP6 k7HKeE6llMdJCRFuevi9K7D0pEMWpG0NYm4W1AmZ3FqrgOlJNQuYJ5cVTI+tEjHGdw4h86yp iGBsumbE1Nx/5cEMvHkpZG7MtiNmLPuXgPlx9zvO1Bt12BZv9pmjG2MNKd04+7NqCGOLjRrW WHWJYPsdFoL93NnpwdaXn2Gzx0YJNrOhCrETxoW75+4ThUVxcbEJnGrNpoOimM9v3+PH+3yS UhrMghRk9kpHJAnUehgwhKUjEUlTlQj6r3ThfDGJoGx2BuOLCQSDFcUoHXm6HOVpQ4QT01QF gpYZ4EUfEDw18gRBbYWsa4+ETsKPmhJAky6NcBYY9RzBwF2TwKmaR4XDcMc47sQ4tQwu6Ysw JxZToZA/aPHg1y2CtIpGwhnWkwoDw2QcL/GFx4WDLqsPFQDVZ1+4MPZHfu6WwRUbqAwSHhhK BfycbXA157X7hHkw3Nbgnr8A7HlanH+MM5CXG8J7tQhMRd9wXhMK/Z0zrgwYtQLqmtbw7a1g tedgvNUbXo768hG8IdeU726L4eIFmlcvhdosi3ugP2QMV6JsJNX/d4z+vwP0/3YVI6wKSTiN WhHNqdcpucTVarlCrVFGrz50TGFEf76cfbZt8jZq+hFpQxSJpF7ioLUOGS2UJ6iTFTYEJCb1 E4d32GW0OEqefIJTHTug0sRxahuaT+JSiTi49ON+moqWx3NHOe44p/rLCkhP/xRESszXa79m nn5CJ2/X7rH2bAwMe0R6WczBWb3WECQTf5puaa7efGfkfNuyDXN29QbT7I59hTV53UlJKnJ8 JJQ1fSkzrnKUJB6JOhzrsbhr1dSplZKI1gzNlsay1GmtsiC3fVthi09O+968kiUR9ct1rR1z R8burSyujokc3+knkUhxdYx8bQCmUst/A2AsUHxuAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrDIsWRmVeSWpSXmKPExsVy+t/xu7qLqq/FGTz8zWuxccZ6VotJ6w4w Wdxs3M1kcaY71+LmoRWMFpseX2O1uLxrDpvFoal7GS3WHrnLbvHwwQ1Wi9X/TjFafJjwn8ni z/6fLBabN01lduDzuHztIrPH7IaLLB5/V71g9liwqdRj06pONo871/awebw7d47dY/OSeo8J H96yefRtWcXo8XmTXAB3lJ5NUX5pSapCRn5xia1StKGFkZ6hpYWekYmlnqGxeayVkamSvp1N SmpOZllqkb5dgl7Gu0fPWApu81c0bNnN1MC4m6eLkZNDQsBEYkn7CzYQW0hgKaPEwX72LkYO oLiUxMq56RAlwhJ/rnUBlXABlTxllGh6/Q2snk3AUaJ/6QlWkISIwF8miYOzToNVMQtcY5TY OOEkM0iVsICTxKuzH1lAbBYBVYnOWXPA4rwC1hLTn+xhh1ghL9G+fDsbyGZOARuJ2V9yIA7K lXi4/BU7RLmgxMmZT1hASpgF1CXWzxMCCfMLaEmsaboONp0ZaErz1tnMExiFZiHpmIXQMQtJ 1QJG5lWMIqmlxbnpucWGesWJucWleel6yfm5mxiBMb3t2M/NOxgvbQw+xCjAwajEw2tgeC1O iDWxrLgy9xCjBAezkgiv09nTcUK8KYmVValF+fFFpTmpxYcYTYG+nMgsJZqcD0w3eSXxhqaG 5haWhubG5sZmFkrivB0CB2OEBNITS1KzU1MLUotg+pg4OKUaGOd3+GvbJa67XVaUcyBxfeLR ufs583Udc25t0I2XOs02K3zDkrhVjHsLpNfn9Ny+o1W+TE5Ha3H3jzsx+h+/n3/2RP5c1Jx1 yZwtU3x5g74zFQjVfZfkOT4rKyFDT3c1T3P8r5o0X5a/TQW79pVqaZ6dZZVv91h0XuzDzvW3 buVvuX3V+uXmFCWW4oxEQy3mouJEAFVibh//AgAA X-CMS-MailID: 20200602161738eucas1p2151f88b526bb009c27820a4f290a961e X-Msg-Generator: CA X-RootMTR: 20200602161738eucas1p2151f88b526bb009c27820a4f290a961e X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200602161738eucas1p2151f88b526bb009c27820a4f290a961e References: <20200601142754.26139-1-l.stelmach@samsung.com> <20200602161731.23033-1-l.stelmach@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200602_091740_736561_B71BA9D3 X-CRM114-Status: GOOD ( 13.57 ) X-Spam-Score: -5.2 (-----) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-5.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at https://www.dnswl.org/, high trust [210.118.77.12 listed in list.dnswl.org] 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [210.118.77.12 listed in wl.mailspike.net] -0.0 SPF_PASS SPF: sender matches SPF record -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders -0.0 DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: AKASHI Takahiro , Marek Szyprowski , =?utf-8?q?=C5=81ukasz_Stelmach?= , Bartlomiej Zolnierkiewicz Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org Add DCSZ tag which holds dynamic memory (stack, bss, malloc pool) requirements of the decompressor code. Signed-off-by: Łukasz Stelmach --- arch/arm/boot/compressed/vmlinux.lds.S | 9 ++++++++- arch/arm/include/asm/image.h | 3 +++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/arch/arm/boot/compressed/vmlinux.lds.S b/arch/arm/boot/compressed/vmlinux.lds.S index 308e9cd6a897..d15c1269eb5d 100644 --- a/arch/arm/boot/compressed/vmlinux.lds.S +++ b/arch/arm/boot/compressed/vmlinux.lds.S @@ -39,6 +39,11 @@ SECTIONS LONG(ARM_ZIMAGE_MAGIC3) LONG(ZIMAGE_MAGIC(__piggy_size_addr - _start)) LONG(ZIMAGE_MAGIC(_kernel_bss_size)) + LONG(ZIMAGE_MAGIC(3)) + LONG(ARM_ZIMAGE_MAGIC4) + LONG(ZIMAGE_MAGIC((_end - __bss_start) + + (_stack_end - _stack_start) + + MALLOC_SIZE)) LONG(0) _table_end = .; } @@ -108,10 +113,12 @@ SECTIONS . = BSS_START; __bss_start = .; .bss : { *(.bss) } + . = ALIGN(8); /* the stack must be 64-bit aligned and adjoin bss */ _end = .; - . = ALIGN(8); /* the stack must be 64-bit aligned */ + _stack_start = .; .stack : { *(.stack) } + _stack_end = .; PROVIDE(__pecoff_data_size = ALIGN(512) - ADDR(.data)); PROVIDE(__pecoff_end = ALIGN(512)); diff --git a/arch/arm/include/asm/image.h b/arch/arm/include/asm/image.h index d5c18a0f6a34..55b51faa6b7e 100644 --- a/arch/arm/include/asm/image.h +++ b/arch/arm/include/asm/image.h @@ -15,6 +15,7 @@ #define ARM_ZIMAGE_MAGIC1 ZIMAGE_MAGIC(0x016f2818) #define ARM_ZIMAGE_MAGIC2 (0x45454545) #define ARM_ZIMAGE_MAGIC3 ZIMAGE_MAGIC(0x5a534c4b) +#define ARM_ZIMAGE_MAGIC4 ZIMAGE_MAGIC(0x5a534344) #ifndef __ASSEMBLY__ @@ -40,6 +41,8 @@ struct arm_zimage_tag { __le32 size_ptr; __le32 bss_size; } krnl_size; +#define ZIMAGE_TAG_ZIMAGE_MEM ARM_ZIMAGE_MAGIC4 + __le32 zimage_mem; } u; }; From patchwork Tue Jun 2 16:17:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C5=81ukasz_Stelmach?= X-Patchwork-Id: 11584071 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F3784618 for ; Tue, 2 Jun 2020 16:18:43 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 96CCD206E2 for ; Tue, 2 Jun 2020 16:18:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="SNlvvk0s"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="kDpKFxTf" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 96CCD206E2 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:References:MIME-Version:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=NEA4irg6svT38n743yn55aUrF8PpQti3i6xBLl9iPB0=; b=SNlvvk0sP3g1Qx pa8jxBehmJ5oPJAICZC6bb7u+W8iZkf2Q+s3tJzZlkSYpy/YoUF+WDjGRxKRzyIJz+0z1QXbqll89 VgzOEpzXO7AtPSZbDLqe2GJTLlmQxJX9gbxHNY8/mKD+FfbskfE0WDDVgYHwGrdDnmm9N8AAfxj9b 1tzUXjku76M6YTA8dfj+Rx0kDYDGTr1zcfQLsvAcP+PQmiE7HarHKLHpfxIW7BqP+oGhOckB6t+tr fMrNNaxgeu1Y4ivmFbmcZ7I41GJJgPklTHN9FodGS6S+hHmCVaAQnMmEsrhhrzRnWr0D1muinYCsG nZcklP4f4Qq5A3i7rvfQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jg9cc-0001tm-13; Tue, 02 Jun 2020 16:18:38 +0000 Received: from mailout1.w1.samsung.com ([210.118.77.11]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jg9bh-0000tZ-I0 for linux-arm-kernel@lists.infradead.org; Tue, 02 Jun 2020 16:17:43 +0000 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200602161739euoutp01f3a3313ebf46b75fa9282bf73789cd68~UxlpTB27s2975229752euoutp01F for ; Tue, 2 Jun 2020 16:17:39 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200602161739euoutp01f3a3313ebf46b75fa9282bf73789cd68~UxlpTB27s2975229752euoutp01F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1591114659; bh=HFutmAJ4iU4eRu//A59XEGsqCOlB4bks5rPsSUwsxYM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kDpKFxTftvFUMTsuqhWkNRs1K2P8Rux1Eqlig8Pq10NSNoSQgDoRiosKBa/HgsPA7 XtiAFavdlsCsxbMQ7nzCyQ05MG+wYu8Hem1zvvhtc247dLVnar+24QsJHyf89WhyfH 7EX0KJI1QSodNh8eTtnzblY1dDDr6VU0wQ3qIu+4= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200602161739eucas1p1b1a27cd4e3f6ba759fb3fec49fc9e4cb~Uxlo62EXM2721427214eucas1p1u; Tue, 2 Jun 2020 16:17:39 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id A8.50.61286.3AB76DE5; Tue, 2 Jun 2020 17:17:39 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200602161738eucas1p2ccfaa7610dc6f76e209ba96d6278259e~UxlolbcZw0409404094eucas1p2I; Tue, 2 Jun 2020 16:17:38 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20200602161738eusmtrp156e8802aab6b914fd5875ae556f848fe~Uxlok0RoM2876728767eusmtrp1T; Tue, 2 Jun 2020 16:17:38 +0000 (GMT) X-AuditID: cbfec7f2-ef1ff7000001ef66-40-5ed67ba352e6 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id C2.DE.08375.2AB76DE5; Tue, 2 Jun 2020 17:17:38 +0100 (BST) Received: from localhost (unknown [106.120.51.46]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200602161738eusmtip2cb585681ba0044c7b29d1854d16b361d~UxloRNSvZ0083200832eusmtip2X; Tue, 2 Jun 2020 16:17:38 +0000 (GMT) From: =?utf-8?q?=C5=81ukasz_Stelmach?= To: Russell King , Masahiro Yamada , Nick Desaulniers , Thomas Gleixner , Enrico Weigelt , Kees Cook , Ingo Molnar , Ben Dooks , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 4/5] arm: Add kexec_image_info Date: Tue, 2 Jun 2020 18:17:30 +0200 Message-Id: <20200602161731.23033-5-l.stelmach@samsung.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200602161731.23033-1-l.stelmach@samsung.com> MIME-Version: 1.0 Organization: Samsung R&D Institute Poland X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrJKsWRmVeSWpSXmKPExsWy7djPc7qLq6/FGcxdwGqxccZ6VotJ6w4w Wdxs3M1kcaY71+LmoRWMFpseX2O1uLxrDpvFoal7GS3WHrnLbvHwwQ1Wi9X/TjFafJjwn8ni z/6fLBabN01lduDzuHztIrPH7IaLLB5/V71g9liwqdRj06pONo871/awebw7d47dY/OSeo8J H96yefRtWcXo8XmTXAB3FJdNSmpOZllqkb5dAlfG81vxBRP5Ko48vMXSwHiQu4uRk0NCwESi e/VK5i5GLg4hgRWMEtc6DjJBOF8YJZ4eec0K4XxmlPi+4w8jTMuEvgVgtpDAckaJZ5NdIIqe M0pMXTmFGSTBJuAo0b/0BFi3iMBXJoldU9vZQBxmgSuMEg/3b2MCqRIWMJSY/v8S0CgODhYB VYkHl9lAwrwC1hLXLv9mgtgmL9G+fDsbSAmngI3E7C85ECWCEidnPmEBsfkFtCTWNF0Hs5mB ypu3zmaGaJ3KIfFqUTaE7SIxt+8/C4QtLPHq+BZ2CFtG4vTkHhaQ8RIC9RKTJ5mBXCkh0MMo sW3OD6h6a4k7536BncAsoCmxfpc+RNhR4t/JVmaIVj6JG28FIS7gk5i0bTpUmFeio00IolpF Yl3/HqiBUhK9r1YwTmBUmoXkl1lI7p+FsGsBI/MqRvHU0uLc9NRiw7zUcr3ixNzi0rx0veT8 3E2MwAR3+t/xTzsYv15KOsQowMGoxMNrYHgtTog1say4MvcQowQHs5IIr9PZ03FCvCmJlVWp RfnxRaU5qcWHGKU5WJTEeY0XvYwVEkhPLEnNTk0tSC2CyTJxcEo1MJYVp76aXGOVFtbaPzWh 87nQaf/WNL+6Ko35ryfwGq1bwXvYzspK0Dfy5uI6J/O9aW7Ri49ob4xunTN/UtqP/QEKzbZh 9YI2qX7Hq7+/+tWpLJL9y0t3+4KeKr+kFoN3DOluvLk357WdfCR2pv/PLo87s9zifhl27cye XROU8aA4fnnEoQc5SizFGYmGWsxFxYkAXv+GrWwDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA02Sa0hTYRjHeXfOzo7a7DSNXvzQZRCC1PQ4da95ofpgJ4ky+la2NfTgpF10 Z7O0D2pC5QKbkWUzh0Sm2WU4u0gXzCmVzUydzGkXXGmaXRCT0lJrJ4n89vD///7Pw8PzkJjk Ex5B5upNrFGv1kqJYNy9+PTt5svHvMqY7plNqLnaIURnbz0WoKHSBwLUfVqHhlyNADnfe4XI c/8SgVxVjwC62flGhPwjPiG6vvgcoCnrbwGab5vDUYuzCtsayni8fRhTU9KHMwtNExhT5zQz zqZygnntfUgwX3t6REzLlWLGOvWFYCpuNwHmm3NtRsh+WbLRYDax6zUGzpQiPUCjWBmdiGSx cYkyWq44uCU2XhqdmpzNanMLWGN06iGZZnxYlVcZerTTP4yXgPYQCwgiIRUHrRV1wAKCSQlV D6Drql1kAWTAiIDXanOWmDA477UQS8wYgL3nG0W8QVDb4Jn6Z0LeCKcWBLDd5v5LYZQXwGZr F8ZTYRQNL/zuB3xXnNoIRzwEL4upJOj1/BIsTVgHTzbcI3gkiEqGNTNaXpZQOuhvmBQt4atg 18VRnEcwKhI67BJeXklFwRvHB3G+xgJdyu7UYFYgsS1L2P4nbMuoOoA1gXDWzOlydBwt49Q6 zqzPkWUZdE4QOPTdJ3MtraC/eZ8LUCSQrhDH0F6lRKgu4Ap1LgBJTBou3v7CrZSIs9WFRazR oDKatSznAvGBJSuxiNVZhsDb6E0qOp5WoERaIVfIE5B0jfgU1Z4poXLUJvYwy+axxn85ARkU UQKKI3dO/GSmHcK28vSPuz77X46iHyktprQys2EHo5iF7nxNm6XWr3y1t1c8acygUauvss5H jU+bhwbjhgfO2eT2dxtI3+4KnXbW5SotO8Ht+eD5bh7jqqM60scyHfFHxoVkfofKkFRkSEhQ A59qIc1hUhZa7GMDnF3WLMU5jZqOwoyc+g+GBxG0/gIAAA== X-CMS-MailID: 20200602161738eucas1p2ccfaa7610dc6f76e209ba96d6278259e X-Msg-Generator: CA X-RootMTR: 20200602161738eucas1p2ccfaa7610dc6f76e209ba96d6278259e X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200602161738eucas1p2ccfaa7610dc6f76e209ba96d6278259e References: <20200601142754.26139-1-l.stelmach@samsung.com> <20200602161731.23033-1-l.stelmach@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200602_091741_735850_902C1DA5 X-CRM114-Status: GOOD ( 12.30 ) X-Spam-Score: -5.2 (-----) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-5.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at https://www.dnswl.org/, high trust [210.118.77.11 listed in list.dnswl.org] 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [210.118.77.11 listed in wl.mailspike.net] -0.0 SPF_PASS SPF: sender matches SPF record -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders -0.0 DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: AKASHI Takahiro , Marek Szyprowski , =?utf-8?q?=C5=81ukasz_Stelmach?= , Bartlomiej Zolnierkiewicz Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org Add kexec_image_info to print detailed information about a kexec image. Signed-off-by: Łukasz Stelmach --- arch/arm/kernel/machine_kexec.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c index 76300f3813e8..c10a2dfd53d1 100644 --- a/arch/arm/kernel/machine_kexec.c +++ b/arch/arm/kernel/machine_kexec.c @@ -31,6 +31,32 @@ extern unsigned long kexec_boot_atags; static atomic_t waiting_for_crash_ipi; +/** + * kexec_image_info - For debugging output. + */ +#define kexec_image_info(_i) _kexec_image_info(__func__, __LINE__, _i) +static void _kexec_image_info(const char *func, int line, + const struct kimage *kimage) +{ + unsigned long i; + + pr_debug("%s:%d:\n", func, line); + pr_debug(" kexec kimage info:\n"); + pr_debug(" type: %d\n", kimage->type); + pr_debug(" start: %lx\n", kimage->start); + pr_debug(" head: %lx\n", kimage->head); + pr_debug(" nr_segments: %lu\n", kimage->nr_segments); + + for (i = 0; i < kimage->nr_segments; i++) { + pr_debug(" segment[%lu]: %08lx - %08lx, 0x%x bytes, %lu pages\n", + i, + kimage->segment[i].mem, + kimage->segment[i].mem + kimage->segment[i].memsz, + kimage->segment[i].memsz, + kimage->segment[i].memsz / PAGE_SIZE); + } +} + /* * Provide a dummy crash_notes definition while crash dump arrives to arm. * This prevents breakage of crash_notes attribute in kernel/ksysfs.c. @@ -42,6 +68,8 @@ int machine_kexec_prepare(struct kimage *image) __be32 header; int i, err; + kexec_image_info(image); + image->arch.kernel_r2 = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET; From patchwork Tue Jun 2 16:17:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C5=81ukasz_Stelmach?= X-Patchwork-Id: 11584075 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 31A6C618 for ; Tue, 2 Jun 2020 16:19:26 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 0C9AE206E2 for ; Tue, 2 Jun 2020 16:19:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="NlF+DvGR"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="ncys3Vtf" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0C9AE206E2 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:References:MIME-Version:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=gzKVvZcQLaXNO3SvTXOXK86XobrnryHY3QLKMx9BB64=; b=NlF+DvGRnA4Qa9 BCjPMybYLnS5jeDlk3+IugLiNVfdrJ26YY3zvmOHasjkivtM7EZlVH+Zlh+DVKAhNR0dTmvUvttiQ oJi2eITCzv2RUHgwxevmoWwaJmXrOghQD64T1ISKZWVjuflhjQugEquRKOeZvIdBcyxMdS9CrrV6q CIyDw6Tjz0xsUQ9sxiriCjN6nREQ4/PSk+B6ccPIqwvrQ31RH0rh97VdISN17hFav1U8H21VsZi78 1dluoeJihfHyJ6zRlO+DlISxQdK9iqQp48uB1Q9Lc3pgTFH4bOc0bdMRPXa88poYSpiDUoqGEFoDW UkSTBSTlOyViX/1SeFXw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jg9dJ-0002Qr-3I; Tue, 02 Jun 2020 16:19:21 +0000 Received: from mailout2.w1.samsung.com ([210.118.77.12]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jg9bh-0000uM-Jx for linux-arm-kernel@lists.infradead.org; Tue, 02 Jun 2020 16:17:45 +0000 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200602161740euoutp02365b312bce7b1c1b2a5f41c5a1ce1546~UxlqA9nuF1095510955euoutp02f for ; Tue, 2 Jun 2020 16:17:40 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200602161740euoutp02365b312bce7b1c1b2a5f41c5a1ce1546~UxlqA9nuF1095510955euoutp02f DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1591114660; bh=J0/155Iikx0Ex3LhKKjMrOdhyxMhJqanDVzFFyvMEfo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ncys3Vtf2sCZsU983vet9xkbO/YgrnCRlz9LT1I0axBKn3IjxDH6jITwybxn11xil EaNovBZWaN6Qhr0xlDexMz9euIJxYN7hLG1RUzXn+s25S5AllpWpCBx87fq/E2vbja MpRMhkcLUg4xEAADWzIi/vOKbtl5QfafBluJDiR4= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200602161739eucas1p2037fe85c6824c805318dda2f2934a3d8~UxlppLDo21814918149eucas1p2x; Tue, 2 Jun 2020 16:17:39 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 8B.81.60679.3AB76DE5; Tue, 2 Jun 2020 17:17:39 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200602161739eucas1p16a56ff590bf44e747d5ad6e178d57067~Uxlo9XXMN2727927279eucas1p12; Tue, 2 Jun 2020 16:17:39 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20200602161739eusmtrp1125ee77a944c74e5e9b5679e8b14c1c4~Uxlo8tBgj2876728767eusmtrp1V; Tue, 2 Jun 2020 16:17:39 +0000 (GMT) X-AuditID: cbfec7f4-0cbff7000001ed07-a1-5ed67ba397a3 Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id E3.DE.08375.3AB76DE5; Tue, 2 Jun 2020 17:17:39 +0100 (BST) Received: from localhost (unknown [106.120.51.46]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20200602161739eusmtip1a308c8fa0b66080dea294e4138fb7ae6~UxlovKVS12690626906eusmtip14; Tue, 2 Jun 2020 16:17:38 +0000 (GMT) From: =?utf-8?q?=C5=81ukasz_Stelmach?= To: Russell King , Masahiro Yamada , Nick Desaulniers , Thomas Gleixner , Enrico Weigelt , Kees Cook , Ingo Molnar , Ben Dooks , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 5/5] arm: kexec_file: load zImage or uImage, initrd and dtb Date: Tue, 2 Jun 2020 18:17:31 +0200 Message-Id: <20200602161731.23033-6-l.stelmach@samsung.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200602161731.23033-1-l.stelmach@samsung.com> MIME-Version: 1.0 Organization: Samsung R&D Institute Poland X-Brightmail-Tracker: H4sIAAAAAAAAA02SfUhTYRTGeXc/vFqz6+zjYFIwMkrIsjJuJJEVdYn+UKKQKGvpZUpu2aZm GWglaX7k0FbqDNQs10yjuVZOozGiL0sTdbnUaH1o+dVCNyqWpbuT/O+c8/6e5zkHXgoTvSeC qCR5KqeQS5LFpB9ufPqrY82NTGvcOs33COZe2V2CKWk0CxjbuRYB86pAxtgsWsToP1kJpstU STIW9SPENDwZ8GHsH3oJpn7qJWIcqr8Cxv34F8406dXYNn+2y9qJsZrsTpz9o/uKsVX6NFav u0Sy/dZWkh1vb/dhm2qzWJVjjGQvG3SIndAvi5530C8ygUtOSucUa7ce9UvMe6EiUswalFH0 shDLRq6z+ciXAnojGEZuE/nIjxLRWgQ/Lrq8zSSCnlEV4psJBJZ3oz6zkt/far1UHYKPfT0k 3wwhMDtr8BmKpKOg+OZzD7WQdgrApM71UBjdjcD+2CiYoQLpaCh1OD01TodA9vCEpxbSW6DO 7Sb4vOWQW/dgWkxRvnQkaCaTeSQAXpR/9oQtoEPhzvm3nhqbxi/c12AzWUCXU3DLkUPyPjuh +2qe1zMQhp8ZvPcEQ1tpIT7jD3QWlJZs4rWFCIyVP3Ge2QL97b89O2D0arhrWsuPo2BA3Yfx Un/oHQvgV/CHEuM171gIeRdFPL0CGotbvYZBUDSsRSokrphzTMWcAyr+Z1UhTIeWcGlKmZRT rpdzp8KUEpkyTS4Niz8h06PpX9c29WzyITK5j1kQTSHxfOG6cGuciJCkK0/LLAgoTLxQuP11 W5xImCA5fYZTnDiiSEvmlBa0lMLFS4Qbar4dFtFSSSp3nONSOMXsq4DyDcpGZ9/Ye4rHN3bE 2IaaEtPVWYsaSl5vTx2KXR1U2xIb49zr30t2T3BLq67v+961y2IPtfV11Ieceb/qkDbmbWRz 5pfNGYd29OiD3eb4wX7pqZWGcZvcuL+s4IH0ZNNRzZWM8FEj4dojcu2OH2koisg/Qh1oq26N HKx/1ThSndOha14sxpWJkvBQTKGU/AMB5tDfcQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrHIsWRmVeSWpSXmKPExsVy+t/xu7qLq6/FGRw7zmmxccZ6VotJ6w4w Wdxs3M1kcaY71+LmoRWMFpseX2O1uLxrDpvFoal7GS3WHrnLbvHwwQ1Wi9X/TjFafJjwn8ni z/6fLBabN01lduDzuHztIrPH7IaLLB5/V71g9liwqdRj06pONo871/awebw7d47dY/OSeo8J H96yefRtWcXo8XmTXAB3lJ5NUX5pSapCRn5xia1StKGFkZ6hpYWekYmlnqGxeayVkamSvp1N SmpOZllqkb5dgl5Gx8kJrAUHZjNW9J7qYW5g/FbTxcjJISFgIvHr5RLWLkYuDiGBpYwS595c Y+pi5ABKSEmsnJsOUSMs8edaFxtEzVNGid2fXzGBJNgEHCX6l54AaxYR+MskcXDWabAqZoFr jBIbJ5xkBqkSFvCTuD65iQ3EZhFQlWh49Rmsm1fAWmL5nz+sECvkJdqXb2cD2cwpYCMx+0sO SFhIIFfi4fJX7BDlghInZz5hASlhFlCXWD9PCCTML6AlsabpOguIzQw0pXnrbOYJjEKzkHTM QuiYhaRqASPzKkaR1NLi3PTcYkO94sTc4tK8dL3k/NxNjMC43nbs5+YdjJc2Bh9iFOBgVOLh NTC8FifEmlhWXJl7iFGCg1lJhNfp7Ok4Id6UxMqq1KL8+KLSnNTiQ4ymQF9OZJYSTc4Hppy8 knhDU0NzC0tDc2NzYzMLJXHeDoGDMUIC6YklqdmpqQWpRTB9TBycUg2Mk1fkmvw+uuOMh9JE f58TT/9Eest+C518e7JVTfpZm4JrR23VJ7ye99PO7p1Y4ezv1bo9Cic/MV+5k/e/LC5xR/a+ s2WztM7cuHdn28NVQU8S7NOtZ7rwvan+/sgu/P+aFSsvcc7nnBdyQdCS38Twb2jdJ9vPNwXt A/3XWWocfzfxQcvTmV8VbiuxFGckGmoxFxUnAgCggFZ1AQMAAA== X-CMS-MailID: 20200602161739eucas1p16a56ff590bf44e747d5ad6e178d57067 X-Msg-Generator: CA X-RootMTR: 20200602161739eucas1p16a56ff590bf44e747d5ad6e178d57067 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200602161739eucas1p16a56ff590bf44e747d5ad6e178d57067 References: <20200601142754.26139-1-l.stelmach@samsung.com> <20200602161731.23033-1-l.stelmach@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200602_091741_944096_0BA3C786 X-CRM114-Status: GOOD ( 24.96 ) X-Spam-Score: -5.2 (-----) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-5.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at https://www.dnswl.org/, high trust [210.118.77.12 listed in list.dnswl.org] 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [210.118.77.12 listed in wl.mailspike.net] -0.0 SPF_PASS SPF: sender matches SPF record -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders -0.0 DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: AKASHI Takahiro , Marek Szyprowski , =?utf-8?q?=C5=81ukasz_Stelmach?= , Bartlomiej Zolnierkiewicz Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org This is kexec_file_load implementation for ARM. It loads zImage and initrd from file descripters and resuses DTB. Most code is derived from arm64 kexec_file_load implementation and from kexec-tools. Cc: AKASHI Takahiro Signed-off-by: Łukasz Stelmach --- arch/arm/Kconfig | 25 ++++ arch/arm/include/asm/image.h | 26 ++++ arch/arm/include/asm/kexec.h | 14 ++ arch/arm/kernel/Makefile | 5 +- arch/arm/kernel/kexec_uimage.c | 80 ++++++++++ arch/arm/kernel/kexec_zimage.c | 194 ++++++++++++++++++++++++ arch/arm/kernel/machine_kexec.c | 11 +- arch/arm/kernel/machine_kexec_file.c | 211 +++++++++++++++++++++++++++ 8 files changed, 561 insertions(+), 5 deletions(-) create mode 100644 arch/arm/kernel/kexec_uimage.c create mode 100644 arch/arm/kernel/kexec_zimage.c create mode 100644 arch/arm/kernel/machine_kexec_file.c diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index c77c93c485a0..c592c58e78f1 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -1917,6 +1917,31 @@ config KEXEC is properly shutdown, so do not be surprised if this code does not initially work for you. +config KEXEC_FILE + bool "Kexec file based system call (EXPERIMENTAL)" + depends on (!SMP || PM_SLEEP_SMP) + depends on USE_OF + select KEXEC_CORE + select CRC32 + help + This is new version of kexec system call. This system call is + file based and takes file descriptors as system call argument + for kernel and initramfs as opposed to list of segments as + accepted by previous system call. + + The kernel to be loaded MUST support Flattened Device Tree + (selected with CONFIG_USE_OF). + +config KEXEC_FILE_UIMAGE + bool "Load legacy uImage files with kexec_file_load() (EXPERIMENTAL)" + depends on KEXEC_FILE + default n + help + This options enables support for the legacy uImage files as + created by mkimage. These are not the new FIT files. + + If unsure say N. + config ATAGS_PROC bool "Export atags in procfs" depends on ATAGS && KEXEC diff --git a/arch/arm/include/asm/image.h b/arch/arm/include/asm/image.h index 55b51faa6b7e..596b32952958 100644 --- a/arch/arm/include/asm/image.h +++ b/arch/arm/include/asm/image.h @@ -8,8 +8,13 @@ (((x) >> 8) & 0x0000ff00) | \ (((x) << 8) & 0x00ff0000) | \ (((x) << 24) & 0xff000000)) +#define UIMAGE_MAGIC(x) (x) #else #define ZIMAGE_MAGIC(x) (x) +#define UIMAGE_MAGIC(x) ((((x) >> 24) & 0x000000ff) | \ + (((x) >> 8) & 0x0000ff00) | \ + (((x) << 8) & 0x00ff0000) | \ + (((x) << 24) & 0xff000000)) #endif #define ARM_ZIMAGE_MAGIC1 ZIMAGE_MAGIC(0x016f2818) @@ -17,6 +22,12 @@ #define ARM_ZIMAGE_MAGIC3 ZIMAGE_MAGIC(0x5a534c4b) #define ARM_ZIMAGE_MAGIC4 ZIMAGE_MAGIC(0x5a534344) +#define ARM_UIMAGE_MAGIC UIMAGE_MAGIC(0x27051956) +#define ARM_UIMAGE_NAME_LEN 32 +#define ARM_UIMAGE_TYPE_KERNEL 2 +#define ARM_UIMAGE_TYPE_KERNEL_NOLOAD 14 +#define ARM_UIMAGE_ARCH_ARM 2 + #ifndef __ASSEMBLY__ #include @@ -33,6 +44,21 @@ struct arm_zimage_header { __le32 extension_tag_offset; }; +struct arm_uimage_header { + __be32 magic; + __be32 hdr_crc; + __be32 time; + __be32 size; + __be32 load; + __be32 entry; + __be32 crc; + __u8 os; + __u8 arch; + __u8 type; + __u8 comp; + __u8 name[ARM_UIMAGE_NAME_LEN]; +}; + struct arm_zimage_tag { struct tag_header hdr; union { diff --git a/arch/arm/include/asm/kexec.h b/arch/arm/include/asm/kexec.h index 22751b5b5735..fda35afa7195 100644 --- a/arch/arm/include/asm/kexec.h +++ b/arch/arm/include/asm/kexec.h @@ -83,6 +83,20 @@ static inline struct page *boot_pfn_to_page(unsigned long boot_pfn) } #define boot_pfn_to_page boot_pfn_to_page +#ifdef CONFIG_KEXEC_FILE + +extern const struct kexec_file_ops kexec_zimage_ops; +extern const struct kexec_file_ops kexec_uimage_ops; + +struct kimage; + +extern int load_other_segments(struct kimage *image, + unsigned long kernel_load_addr, unsigned long kernel_size, + char *initrd, unsigned long initrd_len, + unsigned long initrd_offset, char *cmdline); + +#endif /* CONFIG_KEXEC_FILE */ + #endif /* __ASSEMBLY__ */ #endif /* CONFIG_KEXEC */ diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile index 89e5d864e923..453ecf7305e2 100644 --- a/arch/arm/kernel/Makefile +++ b/arch/arm/kernel/Makefile @@ -3,6 +3,7 @@ # Makefile for the linux kernel. # +CFLAGS_kexec_zimage.o := -DTEXT_OFFSET=$(TEXT_OFFSET) CPPFLAGS_vmlinux.lds := -DTEXT_OFFSET=$(TEXT_OFFSET) AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET) @@ -56,7 +57,9 @@ obj-$(CONFIG_FUNCTION_TRACER) += entry-ftrace.o obj-$(CONFIG_DYNAMIC_FTRACE) += ftrace.o insn.o patch.o obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o insn.o patch.o obj-$(CONFIG_JUMP_LABEL) += jump_label.o insn.o patch.o -obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o +obj-$(CONFIG_KEXEC_CORE) += machine_kexec.o relocate_kernel.o +obj-$(CONFIG_KEXEC_FILE) += machine_kexec_file.o kexec_zimage.o +obj-$(CONFIG_KEXEC_FILE_UIMAGE) += kexec_uimage.o # Main staffs in KPROBES are in arch/arm/probes/ . obj-$(CONFIG_KPROBES) += patch.o insn.o obj-$(CONFIG_OABI_COMPAT) += sys_oabi-compat.o diff --git a/arch/arm/kernel/kexec_uimage.c b/arch/arm/kernel/kexec_uimage.c new file mode 100644 index 000000000000..47033574e24e --- /dev/null +++ b/arch/arm/kernel/kexec_uimage.c @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Kexec uImage loader + * + * Copyright (C) 2020 Samsung Electronics + * Author: Łukasz Stelmach + */ + +#define pr_fmt(fmt) "kexec_file(uImage): " fmt + +#include +#include +#include +#include + +#define crc32_ones(crc, buf, len) \ + (crc32(crc ^ 0xffffffff, buf, len) ^ 0xffffffff) + +static int uimage_probe(const char *uimage_buf, unsigned long uimage_len) +{ + const struct arm_uimage_header *h = + (struct arm_uimage_header *) uimage_buf; + struct arm_uimage_header uhdr; + unsigned long zoff = sizeof(struct arm_uimage_header); + uint32_t crc; + + if (h->magic != ARM_UIMAGE_MAGIC) + return -EINVAL; + + if (h->type != ARM_UIMAGE_TYPE_KERNEL && + h->type != ARM_UIMAGE_TYPE_KERNEL_NOLOAD){ + pr_debug("Invalid image type: %d\n", h->type); + return -EINVAL; + } + + if (h->arch != ARM_UIMAGE_ARCH_ARM) { + pr_debug("Invalidy image arch: %d\n", h->arch); + return -EINVAL; + } + + memcpy((char *)&uhdr, h, sizeof(uhdr)); + crc = be32_to_cpu(uhdr.hdr_crc); + uhdr.hdr_crc = 0; + + if (crc32_ones(0, (char *)&uhdr, sizeof(uhdr)) != crc) { + pr_debug("Corrupt header, CRC do not match\n"); + return -EINVAL; + } + + crc = be32_to_cpu(uhdr.crc); + if (crc32_ones(0, uimage_buf + zoff, uimage_len - zoff) != crc) { + pr_debug("Corrupt zImage, CRC do not match\n"); + return -EINVAL; + } + + return kexec_zimage_ops.probe(uimage_buf + zoff, + uimage_len - zoff); +} + +static void *uimage_load(struct kimage *image, + char *uimage, unsigned long uimage_len, + char *initrd, unsigned long initrd_len, + char *cmdline, unsigned long cmdline_len) +{ + const struct arm_uimage_header *h = + (struct arm_uimage_header *) uimage; + unsigned long zimage_offset = sizeof(struct arm_uimage_header); + + pr_debug("Loading uImage"); + return kexec_zimage_ops.load(image, + uimage + zimage_offset, + uimage_len - zimage_offset, + initrd, initrd_len, + cmdline, cmdline_len); +} + +const struct kexec_file_ops kexec_uimage_ops = { + .probe = uimage_probe, + .load = uimage_load, +}; diff --git a/arch/arm/kernel/kexec_zimage.c b/arch/arm/kernel/kexec_zimage.c new file mode 100644 index 000000000000..586b623ed91d --- /dev/null +++ b/arch/arm/kernel/kexec_zimage.c @@ -0,0 +1,194 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Kexec zImage loader + * + * Copyright (C) 2016-2018 Russel King + * Copyright (C) 2020 Samsung Electronics + * Authors: + * Łukasz Stelmach + * Russell King + */ + +#define pr_fmt(fmt) "kexec_file(zImage): " fmt + +#include +#include +#include +#include +#include + +#define byte_size(t) ((t)->hdr.size << 2) + +/* + * This function and several pieces below have been taken from + * kexec-tools/kexec/arch/arm/kexec-zImage-arm.c + */ +static const void *find_extension_tag(const char *buf, + unsigned long len, + uint32_t tag_id) +{ + const struct arm_zimage_header *h = (const struct arm_zimage_header *)buf; + const struct arm_zimage_tag *tag; + uint32_t offset, size; + uint32_t max = len - sizeof(struct tag_header); + + if (len < sizeof(*h) || + h->magic != ARM_ZIMAGE_MAGIC1 || + h->magic2 != ARM_ZIMAGE_MAGIC2) + return NULL; + + for (offset = h->extension_tag_offset; + (tag = (void *)(buf + offset)) != NULL && + offset < max && + (size = le32_to_cpu(byte_size(tag))) != 0 && + offset + size < len; + offset += size) { + pr_debug(" offset 0x%08x tag 0x%08x size %u\n", + offset, le32_to_cpu(tag->hdr.tag), size); + if (tag->hdr.tag == tag_id) + return tag; + } + + return NULL; +} + +static int zimage_probe(const char *kernel_buf, unsigned long kernel_len) +{ + const struct arm_zimage_header *h = + (struct arm_zimage_header *)(kernel_buf); + + if (!h || (kernel_len < sizeof(*h))) + return -EINVAL; + + if ((h->magic != ARM_ZIMAGE_MAGIC1) || + (h->magic2 != ARM_ZIMAGE_MAGIC2)) + return -EINVAL; + + return 0; +} + + +#if defined(DEBUG) +#define debug_offsets() ({ \ + pr_debug("Image offsets:\n"); \ + pr_debug(" kernel 0x%08lx 0x%08lx\n", kernel_offset, kernel_len); \ + pr_debug(" zimage 0x%08lx 0x%08lx\n", zimage_offset, zimage_len); \ + pr_debug(" initrd 0x%08lx 0x%08lx\n", initrd_offset, initrd_len); \ +}) +#else +#define debug_offsets() +#endif + +static void *zimage_load(struct kimage *image, + char *zimage, unsigned long zimage_len, + char *initrd, unsigned long initrd_len, + char *cmdline, unsigned long cmdline_len) +{ + struct arm_zimage_header *h; + struct kexec_buf kbuf; + struct kexec_segment *zimage_segment; + const struct arm_zimage_tag *tag; + int ret = -EINVAL; + + unsigned long zimage_mem = 0x20000; /* malloc 64kB + stack 4 kB + some bss */ + unsigned long kernel_len = zimage_len * 5; /* 5:1 compression */ + unsigned long kernel_offset = memblock_start_of_DRAM() + + ALIGN(TEXT_OFFSET, PAGE_SIZE); + unsigned long zimage_offset = kernel_offset + + ALIGN(kernel_len, PAGE_SIZE); + unsigned long initrd_offset = zimage_offset + + ALIGN(zimage_len + zimage_mem, PAGE_SIZE); + + if (image->type == KEXEC_TYPE_CRASH) { + kernel_offset += crashk_res.start; + zimage_offset += crashk_res.start; + initrd_offset += crashk_res.start; + } + debug_offsets(); + + h = (struct arm_zimage_header *)zimage; + + tag = find_extension_tag(zimage, zimage_len, ZIMAGE_TAG_KRNL_SIZE); + if (tag) { + uint32_t *p = (void *)zimage + + le32_to_cpu(tag->u.krnl_size.size_ptr); + uint32_t edata_size = le32_to_cpu(get_unaligned(p)); + uint32_t bss_size = le32_to_cpu(tag->u.krnl_size.bss_size); + + kernel_len = edata_size + bss_size; + + pr_debug("Decompressed kernel sizes:\n"); + pr_debug(" text+data 0x%08lx bss 0x%08lx total 0x%08lx\n", + (unsigned long)edata_size, + (unsigned long)bss_size, + (unsigned long)kernel_len); + + zimage_offset = kernel_offset + ALIGN(edata_size, PAGE_SIZE); + initrd_offset = zimage_offset + + max(ALIGN(zimage_len + 0x20000, PAGE_SIZE), + ALIGN((unsigned long)bss_size, PAGE_SIZE)); + debug_offsets(); + } + + tag = find_extension_tag(zimage, zimage_len, + ZIMAGE_TAG_ZIMAGE_MEM); + if (tag) { + uint32_t zimage_mem = le32_to_cpu(tag->u.zimage_mem); + + pr_debug("Decompressor requires %d bytes of memory\n", zimage_mem); + + initrd_offset = max(ALIGN(zimage_offset + zimage_len + zimage_mem, PAGE_SIZE), + ALIGN(kernel_offset + kernel_len, PAGE_SIZE)); + debug_offsets(); + } + + /* + * zImage MUST be loaded into the first 128 MiB of physical + * memory for proper memory detection. Should the uncompressed + * kernel be larger than 128 MiB, zImage relocation becomes + * unavoidable and it is best to rely on the relocation code. + */ + if (((zimage_offset - kernel_offset) + PAGE_SIZE + 0x8000) >= SZ_128M) { + pr_debug("The kernel is too big (%ld MiB) to avoid " + "zImage relocation. Loading zimage at 0x%08lx\n", + ((zimage_offset - kernel_offset) >> 20), + kernel_offset); + zimage_offset = kernel_offset; + } + + kbuf.image = image; + kbuf.top_down = false; + + kbuf.buf_min = zimage_offset; + kbuf.buf_max = ULONG_MAX; + kbuf.buffer = zimage; + kbuf.bufsz = zimage_len; + kbuf.buf_align = PAGE_SIZE; + + kbuf.mem = KEXEC_BUF_MEM_UNKNOWN; + kbuf.memsz = zimage_len; + + ret = kexec_add_buffer(&kbuf); + if (ret) + return ERR_PTR(ret); + + pr_debug("Loaded zImage at 0x%lx bufsz=0x%lx memsz=0x%lx\n", + kbuf.mem, kbuf.bufsz, kbuf.memsz); + + initrd_offset += kbuf.mem - zimage_offset; + debug_offsets(); + + zimage_segment = &image->segment[image->nr_segments - 1]; + image->start = zimage_segment->mem; + + ret = load_other_segments(image, + zimage_segment->mem, zimage_segment->memsz, + initrd, initrd_len, initrd_offset, + cmdline); + return ERR_PTR(ret); +} + +const struct kexec_file_ops kexec_zimage_ops = { + .probe = zimage_probe, + .load = zimage_load, +}; diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c index c10a2dfd53d1..2e4780efabb4 100644 --- a/arch/arm/kernel/machine_kexec.c +++ b/arch/arm/kernel/machine_kexec.c @@ -93,10 +93,13 @@ int machine_kexec_prepare(struct kimage *image) current_segment->memsz)) return -EINVAL; - err = get_user(header, (__be32*)current_segment->buf); - if (err) - return err; - + if (image->file_mode) { + header = *(__be32 *)current_segment->buf; + } else { + err = get_user(header, (__be32 *)current_segment->buf); + if (err) + return err; + } if (header == cpu_to_be32(OF_DT_HEADER)) image->arch.kernel_r2 = current_segment->mem; } diff --git a/arch/arm/kernel/machine_kexec_file.c b/arch/arm/kernel/machine_kexec_file.c new file mode 100644 index 000000000000..a632d351602c --- /dev/null +++ b/arch/arm/kernel/machine_kexec_file.c @@ -0,0 +1,211 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * kexec_file for arm + * + * Copyright (C) 2018 Linaro Limited + * Copyright (C) 2020 Samsung Electronics + * Authors: + * AKASHI Takahiro + * Łukasz Stelmach + * + */ + +#define pr_fmt(fmt) "kexec_file: " fmt + +#include +#include +#include +#include + +/* relevant device tree properties */ +#define FDT_PROP_INITRD_START "linux,initrd-start" +#define FDT_PROP_INITRD_END "linux,initrd-end" +#define FDT_PROP_BOOTARGS "bootargs" +#define FDT_PROP_RNG_SEED "rng-seed" + +static int setup_dtb(struct kimage *image, + unsigned long initrd_load_addr, unsigned long initrd_len, + char *cmdline, void *dtb) +{ + int off, ret; + + ret = fdt_path_offset(dtb, "/chosen"); + if (ret < 0) + goto out; + + off = ret; + + /* add bootargs */ + if (cmdline) { + ret = fdt_setprop_string(dtb, off, FDT_PROP_BOOTARGS, cmdline); + if (ret) + goto out; + } else { + ret = fdt_delprop(dtb, off, FDT_PROP_BOOTARGS); + if (ret && (ret != -FDT_ERR_NOTFOUND)) + goto out; + } + + /* add initrd-* */ + if (initrd_load_addr) { + ret = fdt_setprop_u64(dtb, off, FDT_PROP_INITRD_START, + initrd_load_addr); + if (ret) + goto out; + + ret = fdt_setprop_u64(dtb, off, FDT_PROP_INITRD_END, + initrd_load_addr + initrd_len); + if (ret) + goto out; + } else { + ret = fdt_delprop(dtb, off, FDT_PROP_INITRD_START); + if (ret && (ret != -FDT_ERR_NOTFOUND)) + goto out; + + ret = fdt_delprop(dtb, off, FDT_PROP_INITRD_END); + if (ret && (ret != -FDT_ERR_NOTFOUND)) + goto out; + } + + /* add rng-seed */ + if (rng_is_initialized()) { + char seed[128]; + get_random_bytes(seed, sizeof(seed)); + + ret = fdt_setprop(dtb, off, FDT_PROP_RNG_SEED, + seed, sizeof(seed)); + if (ret) + goto out; + } else { + pr_notice("RNG is not initialised: omitting \"%s\" property\n", + FDT_PROP_RNG_SEED); + ret = 0; + } + +out: + if (ret) + return (ret == -FDT_ERR_NOSPACE) ? -ENOMEM : -EINVAL; + + return 0; +} +/* + * More space needed so that we can add initrd, bootargs and kaslr-seed. + */ +#define DTB_EXTRA_SPACE 0x1000 + +static int create_dtb(struct kimage *image, + unsigned long initrd_load_addr, unsigned long initrd_len, + char *cmdline, void **dtb) +{ + void *buf; + size_t buf_size; + size_t cmdline_len; + int ret; + + cmdline_len = cmdline ? strlen(cmdline) : 0; + buf_size = fdt_totalsize(initial_boot_params) + + cmdline_len + DTB_EXTRA_SPACE; + + for (;;) { + buf = vmalloc(buf_size); + if (!buf) + return -ENOMEM; + + /* duplicate a device tree blob */ + ret = fdt_open_into(initial_boot_params, buf, buf_size); + if (ret) + return -EINVAL; + + ret = setup_dtb(image, initrd_load_addr, initrd_len, + cmdline, buf); + if (ret) { + vfree(buf); + if (ret == -ENOMEM) { + /* unlikely, but just in case */ + buf_size += DTB_EXTRA_SPACE; + continue; + } else { + return ret; + } + } + + /* trim it */ + fdt_pack(buf); + *dtb = buf; + + return 0; + } +} + +int load_other_segments(struct kimage *image, + unsigned long zimage_load_addr, + unsigned long zimage_len, + char *initrd, + unsigned long initrd_len, + unsigned long initrd_offset, + char *cmdline) +{ + struct kexec_buf kbuf; + void *dtb = NULL; + unsigned long initrd_load_addr = 0; + unsigned long dtb_len; + int ret = 0; + + kbuf.image = image; + /* not allocate anything below the kernel */ + kbuf.buf_min = initrd_offset; + if (initrd) { + kbuf.buffer = initrd; + kbuf.bufsz = initrd_len; + kbuf.mem = KEXEC_BUF_MEM_UNKNOWN; + kbuf.memsz = initrd_len; + kbuf.buf_align = PAGE_SIZE; + kbuf.buf_max = ULONG_MAX; + kbuf.top_down = false; + + ret = kexec_add_buffer(&kbuf); + if (ret) + goto out_err; + + pr_debug("Loaded initrd at 0x%lx bufsz=0x%lx memsz=0x%lx\n", + kbuf.mem, kbuf.bufsz, kbuf.memsz); + + initrd_load_addr = kbuf.mem; + kbuf.buf_min = initrd_load_addr + kbuf.memsz; + } + + /* load dtb */ + ret = create_dtb(image, initrd_load_addr, initrd_len, cmdline, &dtb); + if (ret) { + pr_err("Preparing for new dtb failed\n"); + goto out_err; + } + + dtb_len = fdt_totalsize(dtb); + kbuf.buffer = dtb; + kbuf.bufsz = dtb_len; + kbuf.mem = KEXEC_BUF_MEM_UNKNOWN; + kbuf.memsz = dtb_len; + kbuf.buf_align = PAGE_SIZE; + kbuf.buf_max = ULONG_MAX; + kbuf.top_down = false; + + ret = kexec_add_buffer(&kbuf); + if (ret) + goto out_err; + + pr_debug("Loaded dtb at 0x%lx bufsz=0x%lx memsz=0x%lx\n", + kbuf.mem, kbuf.bufsz, kbuf.memsz); + return 0; +out_err: + vfree(dtb); + return ret; +} + +const struct kexec_file_ops * const kexec_file_loaders[] = { +#ifdef CONFIG_KEXEC_FILE_UIMAGE + &kexec_uimage_ops, +#endif + &kexec_zimage_ops, + NULL +};