From de8378520af2f7aa1ec933179f699e0307ab8113 Mon Sep 17 00:00:00 2001 From: vxtls <187420201+vxtls@users.noreply.github.com> Date: Mon, 2 Mar 2026 09:51:42 -0500 Subject: [PATCH] fix(import-payload): detect payload strictly from /proc/partitions major/minor --- steps/improve/import_payload.sh | 40 ++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/steps/improve/import_payload.sh b/steps/improve/import_payload.sh index c4ad6aff..5b303d61 100644 --- a/steps/improve/import_payload.sh +++ b/steps/improve/import_payload.sh @@ -8,33 +8,37 @@ set -ex if [ "${PAYLOAD_REQUIRED}" = True ]; then mkdir -p /external/distfiles found_payload=0 + mkdir -p /dev - if [ -r /proc/partitions ]; then - while read -r major minor blocks name; do - case "${name}" in - ""|name|ram*|loop*|fd*|sr*|md*|dm-*|nbd*) - continue - ;; - *[0-9]) - continue - ;; - esac - dev_path="/dev/${name}" - [ -b "${dev_path}" ] || mknod -m 600 "${dev_path}" b "${major}" "${minor}" >/dev/null 2>&1 || : - done < /proc/partitions + if [ ! -r /proc/partitions ]; then + echo "payload-import failed: /proc/partitions is unavailable." >&2 + exit 1 fi - for dev_path in /dev/*; do - [ -b "${dev_path}" ] || continue - if payload-import --probe "${dev_path}"; then + while read -r major minor blocks name; do + case "${major}" in + ""|major|*[!0-9]*) + continue + ;; + esac + case "${minor}" in + ""|minor|*[!0-9]*) + continue + ;; + esac + + dev_path="/dev/lbpayload-${major}-${minor}" + [ -b "${dev_path}" ] || mknod -m 600 "${dev_path}" b "${major}" "${minor}" >/dev/null 2>&1 || : + + if payload-import --probe "${dev_path}" >/dev/null 2>&1; then payload-import --device "${dev_path}" /external/distfiles found_payload=1 break fi - done + done < /proc/partitions if [ "${found_payload}" != 1 ]; then - echo "payload-import failed: no payload image found on block devices under /dev." >&2 + echo "payload-import failed: no payload image found in /proc/partitions devices." >&2 exit 1 fi fi