Subject: kern/7329: open(path, O_CREAT) on cd9660 leaves parent directory locked
To: None <gnats-bugs@gnats.netbsd.org>
From: None <salvet@ics.muni.cz>
List: netbsd-bugs
Date: 04/06/1999 18:09:20
>Number:         7329
>Category:       kern
>Synopsis:       open(path, O_CREAT) on cd9660 leaves parent directory locked
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    kern-bug-people (Kernel Bug People)
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Apr  6 09:20:01 1999
>Last-Modified:
>Originator:     Zdenek Salvet
>Organization:
>Release:        -current of Dec 12, 1998
>Environment:
MI

>Description:
>How-To-Repeat:

$ mount -r -t cd9660 /dev/cd0a /mnt
$ >/mnt/bin/a
cannot create /mnt/bin/a: error 45

     << 45 == EOPNOTSUPP >>

$ ls /mnt/sbin
badsect      fsck_ext2fs  modload      mount_msdos  nologin      slattach
ccdconfig    fsck_ffs     modunload    mount_nfs    ping         swapctl
clri         fsck_msdos   mount        mount_null   rdump        swapon
dhclient     fsdb         mount_ados   mount_portal reboot       ttyflags
disklabel    fsirand      mount_cd9660 mount_procfs restore      tunefs
dmesg        halt         mount_ext2fs mount_ufs    rndctl       umount
dump         ifconfig     mount_fdesc  mount_umap   route
fastboot     init         mount_ffs    mount_union  routed
fasthalt     ipf          mount_kernfs newfs        rrestore
fdisk        ldconfig     mount_lfs    newfs_msdos  savecore
fsck         mknod        mount_mfs    newlfs       shutdown
$ ls /mnt/bin

    << Hangs in sys_stat->namei->lookup->cd9660_lookup->vget->vn_lock->
        ->cd9660_lock->lockmgr >>
         

>Fix:

--- isofs/cd9660/cd9660_lookup.c.orig   Tue Apr  6 17:58:18 1999
+++ isofs/cd9660/cd9660_lookup.c        Tue Apr  6 17:59:03 1999
@@ -381,7 +381,7 @@
        if (cnp->cn_flags & MAKEENTRY)
                cache_enter(vdp, *vpp, cnp);
        if (nameiop == CREATE || nameiop == RENAME)
-               return (EJUSTRETURN);
+               return (EROFS);
        return (ENOENT);
        
 found:

>Audit-Trail:
>Unformatted: