Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 1 Dec 2003 00:55:52 -0800 (PST)
From:      Matthew Dillon <dillon@apollo.backplane.com>
To:        current@freebsd.org
Subject:   bug in CD9660 path handling in libstand (effects boot code)
Message-ID:  <200312010855.hB18tqNZ019141@apollo.backplane.com>

next in thread | raw e-mail | index | archive | help
    This fixes a bug where an attempt to load a file path which contains
    an intermediate path element which is a file on the CD rather then
    a directory results in the file being accessed like a directory... which
    can lockup the boot code.

    The fix is simple.  Check to see if an intermediate path element really
    represents a directory and return ENOENT if it doesn't.

    This situation can occur due to searches via the module search path.

					-Matt
					Matthew Dillon 
					<dillon@backplane.com>

Index: cd9660.c
===================================================================
RCS file: /cvs/src/lib/libstand/cd9660.c,v
retrieving revision 1.3
diff -u -r1.3 cd9660.c
--- cd9660.c	8 Aug 2003 04:18:34 -0000	1.3
+++ cd9660.c	1 Dec 2003 08:37:25 -0000
@@ -372,7 +372,13 @@
 		rec = *dp;
 		while (*path && *path != '/') /* look for next component */
 			path++;
-		if (*path) path++; /* skip '/' */
+		if (*path == '/') {	/* skip /, make sure is dir */
+			path++;
+			if (*path && (isonum_711(dp->flags) & 2) == 0) {
+				rc = ENOENT;	/* not directory */
+				goto out;
+			}
+		}
 	}
 
 	/* allocate file system specific data structure */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200312010855.hB18tqNZ019141>