git: 0b2c159c8faa - main - msdosfs: return ENOENT if looking up invalid name for OPEN or DELETE

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Sun, 25 Aug 2024 15:02:26 UTC
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=0b2c159c8faa3ca155412a1b2e57b3d6bcf91880

commit 0b2c159c8faa3ca155412a1b2e57b3d6bcf91880
Author:     Jose Luis Duran <jlduran@gmail.com>
AuthorDate: 2024-08-25 14:50:53 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2024-08-25 14:50:53 +0000

    msdosfs: return ENOENT if looking up invalid name for OPEN or DELETE
    
    and keep reporting EINVAL for CREATE or RENAME lookups.  The reasoning is
    that non-corrupted filesystem cannot have invalid dirents anyway, so
    returning ENOENT is more in-line with the natural behavior.
    
    PR:     281033
    MFC after:      1 week
---
 sys/fs/msdosfs/msdosfs_lookup.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/sys/fs/msdosfs/msdosfs_lookup.c b/sys/fs/msdosfs/msdosfs_lookup.c
index 2a90339d0878..e799a5ce05f6 100644
--- a/sys/fs/msdosfs/msdosfs_lookup.c
+++ b/sys/fs/msdosfs/msdosfs_lookup.c
@@ -198,7 +198,9 @@ msdosfs_lookup_ino(struct vnode *vdp, struct vnode **vpp, struct componentname
 	switch (unix2dosfn((const u_char *)cnp->cn_nameptr, dosfilename,
 	    cnp->cn_namelen, 0, pmp)) {
 	case 0:
-		return (EINVAL);
+		if (nameiop == CREATE || nameiop == RENAME)
+			return (EINVAL);
+		return (ENOENT);
 	case 1:
 		break;
 	case 2: