Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp3151347pxb; Mon, 16 Nov 2020 07:07:37 -0800 (PST) X-Google-Smtp-Source: ABdhPJzTUtAFI5pGpw4pBCZrkIcogGvlBg1g/JQEoyjAKk/51rnu1OdqVE2YQ7Cosjn24zcTPDLA X-Received: by 2002:a05:6402:100e:: with SMTP id c14mr15354486edu.243.1605539256937; Mon, 16 Nov 2020 07:07:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605539256; cv=none; d=google.com; s=arc-20160816; b=CYWmUyE9rxn7DOhgiL+vlisYbMdsai+D30OtEwpIOxs78D0IKJB4Rgu/dzcyNARYqd pTHrYOZLd+EYl/aFS5PU1YejSjrYhTZPBHweE6DW338Z7FCY2EMW4QXRuA3hQsp2/5UY ei/xrPzH6gB8IJ600HvL4f6rMzoLy68HKZa3nAommktZ/b7MnY2/QiEuegO5IUi+FMEg j5Yqif22H8IE+KJsW4tebG5qFhkSw8SPwDL12bHi0sNXcSdvDxCw2pbaVyol8XCNAcFc 7+6qCbgp+mOpdD5fOQc0WWFmSGI0RdDELp0i8P9TreGNF8yHD3CJTjVtRnbdvjkMfigJ CggQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=/xzkFkuK9upMDJxQektfvZv0Mmnjs8upjmVafIa3HoM=; b=ykTYZFP3RiIRHHPM9v1C6ais9ytEvSCLMdDc1Xzyl6oNQMmCKZ8vVudggISC3zzGAH t+xJ3mdO2x2h8o4aIOX5a1t6itmcKSnJ5wfy2ufEjnE+qo8bjKxh+Hs/UPtVbJ7FRGA8 ArzXXsdxNGIq/WdZn/U8JlQf/JKd42SEIpegeuOjcXdrnZ4YacnpP7YTD8QKQfYCbaYB 2CmND2GcsuO1JXKgPJHEAjxi9ncpPekbDDl1Qp9PI/ELzBgrxjMI2S6KqNQhCm2trJkH Jz8NhoxoVUo69qRgxPYwsKVdGCumADx/DZEkuwhsVOMqRVXeLPmaURdNnWsJVWV9AzKC LXpA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=1Ovgsyo1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y12si11210474ejm.210.2020.11.16.07.07.13; Mon, 16 Nov 2020 07:07:36 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=1Ovgsyo1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731287AbgKPPF6 (ORCPT + 99 others); Mon, 16 Nov 2020 10:05:58 -0500 Received: from mail.kernel.org ([198.145.29.99]:38368 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726236AbgKPPF4 (ORCPT ); Mon, 16 Nov 2020 10:05:56 -0500 Received: from localhost.localdomain (NE2965lan1.rev.em-net.ne.jp [210.141.244.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 3E90F23A32; Mon, 16 Nov 2020 15:05:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1605539156; bh=BYlpCbbQpgwZ3rPJj2mPYucGQtJcsSTdhpOOlJD92HA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=1Ovgsyo1a//CD1tV5mLYzQ8PJQxAs3/WCoXHRL/NQOHe5TgE2sfJKwnmu49Ww0L20 1hI6WkRjpmPfRLyc5d2KsL+sWZ0TKB59Y4KMxhK+5t3U2lIGkMBIFwUTsQAM81bmwE ToNxYjsISlZh8DRw+BJbWzgo1/eLCDIE7QsC4QqQ= From: Masami Hiramatsu To: Steven Rostedt , Linus Torvalds Cc: Chen Yu , Chen Yu , Masami Hiramatsu , LKML , Ingo Molnar Subject: [PATCH 1/2] tools/bootconfig: Align the bootconfig applied initrd image size to 4 Date: Tue, 17 Nov 2020 00:05:53 +0900 Message-Id: <160553915302.90558.10717424893028416431.stgit@devnote2> X-Mailer: git-send-email 2.25.1 In-Reply-To: <160553914311.90558.426504572691633862.stgit@devnote2> References: <160553914311.90558.426504572691633862.stgit@devnote2> User-Agent: StGit/0.19 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Align the bootconfig applied initrd image size to 4. To pad the data, bootconfig will use space (0x20) in front of the bootconfig data, and expands its size and update checksum. Signed-off-by: Masami Hiramatsu --- include/linux/bootconfig.h | 1 + tools/bootconfig/main.c | 33 ++++++++++++++++++++++++++++----- tools/bootconfig/test-bootconfig.sh | 6 +++++- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/include/linux/bootconfig.h b/include/linux/bootconfig.h index 9903088891fa..461f621047f3 100644 --- a/include/linux/bootconfig.h +++ b/include/linux/bootconfig.h @@ -12,6 +12,7 @@ #define BOOTCONFIG_MAGIC "#BOOTCONFIG\n" #define BOOTCONFIG_MAGIC_LEN 12 +#define BOOTCONFIG_ALIGN 4 /* XBC tree node */ struct xbc_node { diff --git a/tools/bootconfig/main.c b/tools/bootconfig/main.c index eb92027817a7..4b48e6a5ad1b 100644 --- a/tools/bootconfig/main.c +++ b/tools/bootconfig/main.c @@ -332,11 +332,13 @@ static int delete_xbc(const char *path) static int apply_xbc(const char *path, const char *xbc_path) { + const char padbuf[BOOTCONFIG_ALIGN] = { 0 }; u32 size, csum; char *buf, *data; int ret, fd; const char *msg; - int pos; + struct stat st; + int pos, pad; ret = load_xbc_file(xbc_path, &buf); if (ret < 0) { @@ -347,12 +349,10 @@ static int apply_xbc(const char *path, const char *xbc_path) csum = checksum((unsigned char *)buf, size); /* Prepare xbc_path data */ - data = malloc(size + 8); + data = malloc(size); if (!data) return -ENOMEM; strcpy(data, buf); - *(u32 *)(data + size) = size; - *(u32 *)(data + size + 4) = csum; /* Check the data format */ ret = xbc_init(buf, &msg, &pos); @@ -387,12 +387,35 @@ static int apply_xbc(const char *path, const char *xbc_path) free(data); return fd; } + + /* To algin up the total size to BOOTCONFIG_ALIGN, get padding size */ + ret = fstat(fd, &st); + if (ret < 0) { + pr_err("Failed to get the stat of %s\n", path); + free(data); + return ret; + } + pad = BOOTCONFIG_ALIGN - (st.st_size + size) % BOOTCONFIG_ALIGN; + /* TODO: Ensure the @path is initramfs/initrd image */ - ret = write(fd, data, size + 8); + ret = write(fd, data, size); if (ret < 0) { pr_err("Failed to apply a boot config: %d\n", ret); goto out; } + + if (pad != BOOTCONFIG_ALIGN) { + /* Write padding null characters */ + ret = write(fd, padbuf, pad); + if (ret < 0) { + pr_err("Failed to write padding: %d\n", ret); + goto out; + } + size += pad; + } + ret = write(fd, &size, sizeof(u32)); + ret = write(fd, &csum, sizeof(u32)); + /* Write a magic word of the bootconfig */ ret = write(fd, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN); if (ret < 0) { diff --git a/tools/bootconfig/test-bootconfig.sh b/tools/bootconfig/test-bootconfig.sh index d295e406a756..baed891d0ba4 100755 --- a/tools/bootconfig/test-bootconfig.sh +++ b/tools/bootconfig/test-bootconfig.sh @@ -9,6 +9,7 @@ else TESTDIR=. fi BOOTCONF=${TESTDIR}/bootconfig +ALIGN=4 INITRD=`mktemp ${TESTDIR}/initrd-XXXX` TEMPCONF=`mktemp ${TESTDIR}/temp-XXXX.bconf` @@ -59,7 +60,10 @@ echo "Show command test" xpass $BOOTCONF $INITRD echo "File size check" -xpass test $new_size -eq $(expr $bconf_size + $initrd_size + 9 + 12) +total_size=$(expr $bconf_size + $initrd_size + 9 + 12 + $ALIGN - 1 ) +total_size=$(expr $total_size / $ALIGN) +total_size=$(expr $total_size \* $ALIGN) +xpass test $new_size -eq $total_size echo "Apply command repeat test" xpass $BOOTCONF -a $TEMPCONF $INITRD