From 3b522927bb0b709b76261d4826933c9dad55ccc8 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sun, 30 Aug 2026 08:30:30 +0800 Subject: [PATCH] =?UTF-8?q?fix(kernel):=20devfs=20find=20=E6=94=B9=20range?= =?UTF-8?q?(token)=20=E9=81=8D=E5=8E=86=EF=BC=8C=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=85=A8=E9=87=8F=E9=81=8D=E5=8E=86=E6=9C=AA=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E6=A0=88=E6=95=B0=E7=BB=84=E8=87=B4=20strcmp=20NULL?= =?UTF-8?q?=20=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VKernel/Kernel/drivers/devfs/devfs.vp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/VKernel/Kernel/drivers/devfs/devfs.vp b/VKernel/Kernel/drivers/devfs/devfs.vp index 62051aa..84e2cde 100644 --- a/VKernel/Kernel/drivers/devfs/devfs.vp +++ b/VKernel/Kernel/drivers/devfs/devfs.vp @@ -36,11 +36,14 @@ class devfs_directory: result: t.CArray[str, PATH_BUFFER_SIZE] token = string.split(path, "/", result) - for i in result: + # 只遍历 split 返回的 token 数:`for i in result` 会全量遍历 256 槽, + # 而 split 只在末尾设 NULL 哨兵、其余槽是栈垃圾 → samestr→strcmp 解引用 + # NULL/垃圾 → #PF(open("/dev/serial0") 走 find("/dev") 时 B1 崩溃根因)。 + for ti in range(token): found: bool = False for d in range(directory_count): dirp: devfs_directory = c.Addr(directories[d]) - if dirp.parent == current_dir and string.samestr(dirp.name, i): + if dirp.parent == current_dir and string.samestr(dirp.name, result[ti]): current_dir = dirp found = True break