From patchwork Sat Dec 5 07:29:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sven Eckelmann X-Patchwork-Id: 1411382 X-Patchwork-Delegate: ynezz@true.cz Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.openwrt.org (client-ip=2001:8b0:10b:1231::1; helo=merlin.infradead.org; envelope-from=openwrt-devel-bounces+incoming=patchwork.ozlabs.org@lists.openwrt.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=narfation.org Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=merlin.20170209 header.b=2AhGoU4T; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=narfation.org header.i=@narfation.org header.a=rsa-sha256 header.s=20121 header.b=m3gsjLhB; dkim-atps=neutral Received: from merlin.infradead.org (merlin.infradead.org [IPv6:2001:8b0:10b:1231::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4Cp1WY34f1z9sWL for ; Sat, 5 Dec 2020 18:32:56 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version: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:In-Reply-To:References:List-Owner; bh=pdhQmf4v7ITuOwO/nueqAlhD27tUyDaec1fQlK5aRgI=; b=2AhGoU4TL5qPO+8UXORSZJdbR7 x+7q6XkGL4l4oRNVwM/i10mGBLmWzLYoHft/N4ww+6cRkEwAEWNQcVD2wDmXdH783Z0x5seQcXDL+ zcYZAdARp0dP6z/sein5rHXfroaK4Tnrqvlylol+ubqInqQyF2Ut+6JUpOnMRH6Ow3DQES7tM3OVL FHmaaznbDFZQEBysBnDnep8WnD+Ub31nSpRZ+EyZAMs8k+D26TcjM9YecwPi3sHzv/WomEN/zsL1g Y3u1bXVakWvMdJQqrmzxwU+Ixt7xI5zfxnJnDqXW+kXCKQSwLM7InoLIHv4+ngWQtrhQC1jl4C9uu CkmBUFKQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1klS1g-00036D-HO; Sat, 05 Dec 2020 07:30:40 +0000 Received: from dvalin.narfation.org ([213.160.73.56]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1klS1d-00035i-L7 for openwrt-devel@lists.openwrt.org; Sat, 05 Dec 2020 07:30:39 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=narfation.org; s=20121; t=1607153433; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=73eqO+kf94tUEzs1SCl3TXsj2f+vzTqtflpbnnqWhMc=; b=m3gsjLhBMIqNweyL0FHJTgZGZ1yXvV7zE946tpPsyuViT/sTOnNf6otSnWylim/6JEA2Tk gDMVR4X1L2Nl4rMtZnbhqjyJL+GOu/muDTpFD2II46NlNGYZYNX8i0wXTUM/d02UwVqXuY UYpxn24q8RkWld7SZl1xfhVIu++nx1s= From: Sven Eckelmann To: openwrt-devel@lists.openwrt.org Subject: [PATCH] images: Revert "fix boot failures on NAND with small sub pages" Date: Sat, 5 Dec 2020 08:29:16 +0100 Message-Id: <20201205072916.33429-1-sven@narfation.org> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 X-Spam: Yes X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201205_023037_926409_0DF8E111 X-CRM114-Status: GOOD ( 16.35 ) X-Spam-Score: -2.5 (--) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (-2.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [213.160.73.56 listed in list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 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 Message has at least one valid DKIM or DK signature X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Russell Senior , Sven Eckelmann , Jonas Gorski Sender: "openwrt-devel" Errors-To: openwrt-devel-bounces+incoming=patchwork.ozlabs.org@lists.openwrt.org This reverts commit ee76bd11bbe7 ("images: fix boot failures on NAND with small sub pages") which broke (besides telling otherwise in the commit message) the boot after sysupgrade on some NOR based devices. The NOR flash rootfs images stored in a sysupgrade.tar must end with the JFFS2 marker. Otherwise, devices like OpenMesh A42/A62 are not able to calculate the md5sum of the fixed squashfs part and store it inside the u-boot-env. But the commit ee76bd11bbe7 ("images: fix boot failures on NAND with small sub pages") adds up to 1020 0x00 bytes after the 0xdead0de EOF marker. The calculated md5sum will be wrong due do this change and u-boot will fail to boot the newly flashed device with a message like: Validating MD5Sum of 'vmlinux'... Passed! Validating MD5Sum of 'rootfs'... Failed! 583a1b7b54b8601efa64ade42742459b != 8850ee812dfd7638e94083329d5d2781 Data validation failed! Cc: Russell Senior Cc: Jonas Gorski Signed-off-by: Sven Eckelmann --- I've originally submitted another hack on top of the original hack to avoid this additional padding when the JFFS2 post-padding mark was detected. https://github.com/openwrt/openwrt/pull/3616 But I was not yet able to get feedback from the original author. --- scripts/functions.sh | 26 -------------------------- scripts/sysupgrade-tar.sh | 13 +------------ scripts/ubinize-image.sh | 37 +++++++++++++++---------------------- 3 files changed, 16 insertions(+), 60 deletions(-) delete mode 100644 scripts/functions.sh diff --git a/scripts/functions.sh b/scripts/functions.sh deleted file mode 100644 index 9a7fcde627..0000000000 --- a/scripts/functions.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh - - -get_magic_word() { - dd if=$1 bs=4 count=1 2>/dev/null | od -A n -N 4 -t x1 | tr -d ' ' -} - -get_fs_type() { - local magic_word="$(get_magic_word "$1")" - - case "$magic_word" in - "3118"*) - echo "ubifs" - ;; - "68737173") - echo "squashfs" - ;; - *) - echo "unknown" - ;; - esac -} - -round_up() { - echo "$(((($1 + ($2 - 1))/ $2) * $2))" -} diff --git a/scripts/sysupgrade-tar.sh b/scripts/sysupgrade-tar.sh index b93b2584bb..d1d627a96e 100755 --- a/scripts/sysupgrade-tar.sh +++ b/scripts/sysupgrade-tar.sh @@ -1,7 +1,5 @@ #!/bin/sh -. $TOPDIR/scripts/functions.sh - board="" kernel="" rootfs="" @@ -55,16 +53,7 @@ fi mkdir -p "${tmpdir}/sysupgrade-${board}" echo "BOARD=${board}" > "${tmpdir}/sysupgrade-${board}/CONTROL" -if [ -n "${rootfs}" ]; then - case "$( get_fs_type ${rootfs} )" in - "squashfs") - dd if="${rootfs}" of="${tmpdir}/sysupgrade-${board}/root" bs=1024 conv=sync - ;; - *) - cp "${rootfs}" "${tmpdir}/sysupgrade-${board}/root" - ;; - esac -fi +[ -z "${rootfs}" ] || cp "${rootfs}" "${tmpdir}/sysupgrade-${board}/root" [ -z "${kernel}" ] || cp "${kernel}" "${tmpdir}/sysupgrade-${board}/kernel" mtime="" diff --git a/scripts/ubinize-image.sh b/scripts/ubinize-image.sh index c6f8bcefe5..32bd5ca326 100755 --- a/scripts/ubinize-image.sh +++ b/scripts/ubinize-image.sh @@ -1,7 +1,5 @@ #!/bin/sh -. $TOPDIR/scripts/functions.sh - part="" ubootenv="" ubinize_param="" @@ -11,6 +9,16 @@ outfile="" err="" ubinize_seq="" +get_magic_word() { + dd if=$1 bs=2 count=1 2>/dev/null | od -A n -N 2 -t x1 | tr -d ' ' +} + +is_ubifs() { + if [ "$( get_magic_word $1 )" = "3118" ]; then + echo "1" + fi +} + ubivol() { volid=$1 name=$2 @@ -24,7 +32,7 @@ ubivol() { echo "vol_name=$name" if [ "$image" ]; then echo "image=$image" - [ -n "$size" ] && echo "vol_size=${size}" + [ -n "$size" ] && echo "vol_size=${size}MiB" else echo "vol_size=1MiB" fi @@ -35,10 +43,7 @@ ubivol() { ubilayout() { local vol_id=0 - local rootsize= - local autoresize= - local rootfs_type="$( get_fs_type "$2" )" - + local root_is_ubifs="$( is_ubifs "$2" )" if [ "$1" = "ubootenv" ]; then ubivol $vol_id ubootenv vol_id=$(( $vol_id + 1 )) @@ -58,28 +63,16 @@ ubilayout() { size="$part" - ubivol $vol_id "$name" "$image" "" "${size}MiB" + ubivol $vol_id "$name" "$image" "" "$size" vol_id=$(( $vol_id + 1 )) done if [ "$3" ]; then ubivol $vol_id kernel "$3" vol_id=$(( $vol_id + 1 )) fi - - case "$rootfs_type" in - "ubifs") - autoresize=1 - ;; - "squashfs") - # squashfs uses 1k block size, ensure we do not - # violate that - rootsize="$( round_up "$( stat -c%s "$2" )" 1024 )" - ;; - esac - ubivol $vol_id rootfs "$2" "$autoresize" "$rootsize" - + ubivol $vol_id rootfs "$2" $root_is_ubifs vol_id=$(( $vol_id + 1 )) - [ "$rootfs_type" = "ubifs" ] || ubivol $vol_id rootfs_data "" 1 + [ "$root_is_ubifs" ] || ubivol $vol_id rootfs_data "" 1 } set_ubinize_seq() {