From nobody Fri Aug 22 05:35:47 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4c7TS41jlvz65Jr9; Fri, 22 Aug 2025 05:35:48 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (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 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4c7TS36lXzz3rmk; Fri, 22 Aug 2025 05:35:47 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1755840948; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=R1Juzxu3kM2DNhIZrbWlkb4t2EUIqfL9JarQCiRU6oU=; b=LQpVP0xhla3Pkdm7pGTlyx4zylnBBgRKGWr3gFbduiWSLMX6HsXEHVdkGUDniMeecx3jSF aMDjDpVos4omuiURvr7yiWgd8TWYpF2AhROCGkoL1KpAPD1OjduwgSrs8IoTzJmi2XmSgk aWrqvnbpbu96gbL2Vv3JKFuKdOC6Wx5T54V81UblaLtG9eHCJDTBcm2phUQ8zWnZ6xQ06P aVxB7A4lNd4Efu4Nm/GqkvQpdQw0ZK4eJ3HAf2vATAFCcRhvm7TwsCE0AFrOgjR9Zvn3wp YukiAOnYP5gCzCv+ZxEXd9kODCsDm/2olP8EJyFgJq6MWzuiWnEwyWy7dgHP9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1755840947; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=R1Juzxu3kM2DNhIZrbWlkb4t2EUIqfL9JarQCiRU6oU=; b=WSylhNfjlmOJwwttr0F48/OpQ7k1rm0oKwvou7+3uyUMrfyF4fKlisPXx9w1Lc8xSCUCdW er7VaTV1b9S2JcGOGwEYgegR7suBfsR1IqhRTMxy1ALppgpt/SmlZYJ/hLLcNohI7+9EIS g8iqUSHnbrPwhKQFNj07GXdVmYySC0OgAblwtzKzyMzKrAJpavYyvdAdIGp8iAGVglQF0G bGDmSchzaWKIjgFRv7tflu1ieZ5GUT9SS8Bnj51pOggUqn0LJ6xueZwCyCEzN1jS57tBy5 J6BUwyriYCBhD8NnwkpcPXNTYiKmapxAk12GogIE2yCFEP7ZRckHB/fdEr3lwg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1755840947; a=rsa-sha256; cv=none; b=M0OUfvBeVNXYIWJs9G9bDvq3cxlbKuVCGU8TOSk7wCemqxcYKYz21cK4woMab9GpfaoGp/ YgAWXw3DLgFV399+zy7UFqh+l6wphJOwHMZzp9DIybhcP8yOWN0fJO4wqe7AQRKxZ+Z6KU VH51blg4u4I9wz+y6z9gsIILWzAMd28p0jpKyFqVakPABpKPA8Jstx4u+9c0I68hQdeU1y rmYA3GHKqiw5UYS6HtIR4KfiMgkqZZfPbmPOA3rQqDcvjtms05m8cHhihIcezsZsu+JQEH 7h5jQQ9pK+V60S+MKb7rfCbY+xZ7uZGjo2PAUHtdviiq5p1sWmeAgndw4XnbDg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4c7TS36FVhzYm3; Fri, 22 Aug 2025 05:35:47 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 57M5Zlcf007168; Fri, 22 Aug 2025 05:35:47 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 57M5ZloH007165; Fri, 22 Aug 2025 05:35:47 GMT (envelope-from git) Date: Fri, 22 Aug 2025 05:35:47 GMT Message-Id: <202508220535.57M5ZloH007165@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kirk McKusick Subject: git: 690ae8a2025c - main - Bail out of corrupt directory entries during boot List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mckusick X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 690ae8a2025ca1ce58d08a90a1df1645c81392ea Auto-Submitted: auto-generated The branch main has been updated by mckusick: URL: https://cgit.FreeBSD.org/src/commit/?id=690ae8a2025ca1ce58d08a90a1df1645c81392ea commit 690ae8a2025ca1ce58d08a90a1df1645c81392ea Author: Kirk McKusick AuthorDate: 2025-08-22 05:33:48 +0000 Commit: Kirk McKusick CommitDate: 2025-08-22 05:33:48 +0000 Bail out of corrupt directory entries during boot A directory with a zero-valued d_reclen causes boot to hang, This patch checks for directory entries with value zero and bails out rather than spin forever. The hope is that the user has other options. Sadly this was reported on Jun 16 2015 and is just now attended to as part of a sweep of old unclosed phabricator reports. Reported-by: Daniel O'Connor darius-dons.net.au Differential Revision: https://reviews.freebsd.org/D2844 MFC-after: 1 week Sponsored-by: Netflix --- stand/libsa/ufs.c | 6 ++++++ stand/libsa/ufsread.c | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/stand/libsa/ufs.c b/stand/libsa/ufs.c index 86cd3be9a27a..868e8d47dbbd 100644 --- a/stand/libsa/ufs.c +++ b/stand/libsa/ufs.c @@ -891,6 +891,12 @@ ufs_readdir(struct open_file *f, struct dirent *d) if (error) return (error); dp = (struct direct *)buf; + /* + * Check for corrupt directory entry and bail out rather + * than spin forever hoping that the user has other options. + */ + if (dp->d_reclen == 0) + return (0); fp->f_seekp += dp->d_reclen; } while (dp->d_ino == (ino_t)0); diff --git a/stand/libsa/ufsread.c b/stand/libsa/ufsread.c index 0f9b9bb4e2fb..86ac8fbbbab7 100644 --- a/stand/libsa/ufsread.c +++ b/stand/libsa/ufsread.c @@ -108,6 +108,13 @@ fsfind(const char *name, ufs_ino_t * ino) *ino = d.d_ino; return d.d_type; } + /* + * Check for corrupt directory entry and bail out + * rather than spin forever hoping that the user + * has other options. + */ + if (d.d_reclen == 0) + return 0; s += d.d_reclen; } if (n != -1 && ls)