From 47086143539e4266ff2040caf9bddec16f020da3 Mon Sep 17 00:00:00 2001 From: Feng Yu Date: Sat, 27 Jun 2026 11:21:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dupx=E5=86=85=E6=A0=B8?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E5=90=8E=E9=A6=96=E6=AC=A1=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E4=B8=8B=E8=BD=BD=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit core_check 的 upx 分支在第52行将内核文件移动到 $BINDIR/CrashCore.upx, 但符号链接 $TMPDIR/CrashCore 却指向了不存在的 $TMPDIR/CrashCore.upx, 导致链接悬空(目标文件实际位于 $BINDIR)。 在 BusyBox 路由器上(BINDIR=/jffs/ShellCrash ≠ TMPDIR=/tmp/ShellCrash), check_core 的自愈入口 core_find 会被绕过而无法修复该悬空链接: BusyBox find 不支持 -size(故 find_para 为空),且 `find <悬空链接>` 会把链接本身列为结果,使 `[ -z "$(...)" ]` 判定为假、core_find 被跳过; 随后 `[ ! -f $TMPDIR/CrashCore ]` 跟随悬空链接误判内核缺失,触发重复下载。 将符号链接改为指向 $BINDIR/CrashCore.upx,与文件实际位置一致。 该写法对 BINDIR==TMPDIR 的小闪存模式同样正确。 仅在 BusyBox 路由器上、切换 upx 内核后未重启即启动时可复现; GNU find 环境因 -size 过滤掉悬空链接会正常触发 core_find 自愈,故此前未被发现。 --- scripts/libs/core_tools.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/libs/core_tools.sh b/scripts/libs/core_tools.sh index e2ed523b5..54f87d9e4 100644 --- a/scripts/libs/core_tools.sh +++ b/scripts/libs/core_tools.sh @@ -53,7 +53,7 @@ core_check(){ fi if [ "$zip_type" = 'upx' ];then rm -f "$1" "$TMPDIR"/core_new - ln -sf "$TMPDIR/CrashCore.upx" "$TMPDIR/CrashCore" + ln -sf "$BINDIR/CrashCore.upx" "$TMPDIR/CrashCore" else mv -f "$TMPDIR/core_new" "$TMPDIR/CrashCore" fi