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:
parent
bea41bcf3a
commit
ba14c32725
@ -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:
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user