Fix isoilk hang caused by not checking for read-onlyness in several places.

The fix for this in Lite-2 is more complete, but these quick hacks of mine
are safer for now. I plan to integrate the additional Lite-2 stuff at some
later time. Should completely fix PR810.
This commit is contained in:
dg 1995-11-12 10:16:53 +00:00
parent 57479cd100
commit c839bfa768
4 changed files with 38 additions and 6 deletions

View File

@ -38,7 +38,7 @@
* from: @(#)ufs_lookup.c 7.33 (Berkeley) 5/19/91
*
* @(#)cd9660_lookup.c 8.2 (Berkeley) 1/23/94
* $Id: cd9660_lookup.c,v 1.7 1995/05/30 08:04:57 rgrimes Exp $
* $Id: cd9660_lookup.c,v 1.8 1995/10/22 09:32:15 davidg Exp $
*/
#include <sys/param.h>
@ -376,7 +376,7 @@ cd9660_lookup(ap)
if (cnp->cn_flags & MAKEENTRY)
cache_enter(vdp, *vpp, cnp);
if (nameiop == CREATE || nameiop == RENAME)
return (EJUSTRETURN);
return (EROFS);
return (ENOENT);
found:

View File

@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)cd9660_vnops.c 8.3 (Berkeley) 1/23/94
* $Id: cd9660_vnops.c,v 1.18 1995/10/31 12:13:47 phk Exp $
* $Id: cd9660_vnops.c,v 1.19 1995/11/09 08:13:37 bde Exp $
*/
#include <sys/param.h>
@ -183,6 +183,22 @@ cd9660_access(ap)
struct proc *a_p;
} */ *ap;
{
/*
* Disallow write attempts on read-only file systems;
* unless the file is a socket, fifo, or a block or
* character device resident on the file system.
*/
if (ap->a_mode & VWRITE) {
switch (ap->a_vp->v_type) {
case VDIR:
case VLNK:
case VREG:
if (ap->a_vp->v_mount->mnt_flag & MNT_RDONLY)
return (EROFS);
break;
}
}
return (0);
}

View File

@ -38,7 +38,7 @@
* from: @(#)ufs_lookup.c 7.33 (Berkeley) 5/19/91
*
* @(#)cd9660_lookup.c 8.2 (Berkeley) 1/23/94
* $Id: cd9660_lookup.c,v 1.7 1995/05/30 08:04:57 rgrimes Exp $
* $Id: cd9660_lookup.c,v 1.8 1995/10/22 09:32:15 davidg Exp $
*/
#include <sys/param.h>
@ -376,7 +376,7 @@ cd9660_lookup(ap)
if (cnp->cn_flags & MAKEENTRY)
cache_enter(vdp, *vpp, cnp);
if (nameiop == CREATE || nameiop == RENAME)
return (EJUSTRETURN);
return (EROFS);
return (ENOENT);
found:

View File

@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)cd9660_vnops.c 8.3 (Berkeley) 1/23/94
* $Id: cd9660_vnops.c,v 1.18 1995/10/31 12:13:47 phk Exp $
* $Id: cd9660_vnops.c,v 1.19 1995/11/09 08:13:37 bde Exp $
*/
#include <sys/param.h>
@ -183,6 +183,22 @@ cd9660_access(ap)
struct proc *a_p;
} */ *ap;
{
/*
* Disallow write attempts on read-only file systems;
* unless the file is a socket, fifo, or a block or
* character device resident on the file system.
*/
if (ap->a_mode & VWRITE) {
switch (ap->a_vp->v_type) {
case VDIR:
case VLNK:
case VREG:
if (ap->a_vp->v_mount->mnt_flag & MNT_RDONLY)
return (EROFS);
break;
}
}
return (0);
}