mirror of
https://github.com/opnsense/src.git
synced 2026-06-04 14:26:03 -04:00
ncl_bioread(): check for vp->v_object before accessing it
Reported by: cy
Reviewed by: rmacklem
Fixes: 70dc6b2ce3
MFC after: 3 days
This commit is contained in:
parent
6137b5f7b8
commit
503f72a828
1 changed files with 14 additions and 6 deletions
|
|
@ -414,6 +414,18 @@ out:
|
|||
return (error);
|
||||
}
|
||||
|
||||
static bool
|
||||
ncl_bioread_dora(struct vnode *vp)
|
||||
{
|
||||
vm_object_t obj;
|
||||
|
||||
obj = vp->v_object;
|
||||
if (obj == NULL)
|
||||
return (true);
|
||||
return (!vm_object_mightbedirty(vp->v_object) &&
|
||||
vp->v_object->un_pager.vnp.writemappings == 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Vnode op for read using bio
|
||||
*/
|
||||
|
|
@ -486,9 +498,7 @@ ncl_bioread(struct vnode *vp, struct uio *uio, int ioflag, struct ucred *cred)
|
|||
* unlocked read by nfsiod could obliterate changes
|
||||
* done by userspace.
|
||||
*/
|
||||
if (nmp->nm_readahead > 0 &&
|
||||
!vm_object_mightbedirty(vp->v_object) &&
|
||||
vp->v_object->un_pager.vnp.writemappings == 0) {
|
||||
if (nmp->nm_readahead > 0 && ncl_bioread_dora(vp)) {
|
||||
for (nra = 0; nra < nmp->nm_readahead && nra < seqcount &&
|
||||
(off_t)(lbn + 1 + nra) * biosize < nsize; nra++) {
|
||||
rabn = lbn + 1 + nra;
|
||||
|
|
@ -675,9 +685,7 @@ ncl_bioread(struct vnode *vp, struct uio *uio, int ioflag, struct ucred *cred)
|
|||
* directory offset cookie of the next block.)
|
||||
*/
|
||||
NFSLOCKNODE(np);
|
||||
if (nmp->nm_readahead > 0 &&
|
||||
!vm_object_mightbedirty(vp->v_object) &&
|
||||
vp->v_object->un_pager.vnp.writemappings == 0 &&
|
||||
if (nmp->nm_readahead > 0 && ncl_bioread_dora(vp) &&
|
||||
(bp->b_flags & B_INVAL) == 0 &&
|
||||
(np->n_direofoffset == 0 ||
|
||||
(lbn + 1) * NFS_DIRBLKSIZ < np->n_direofoffset) &&
|
||||
|
|
|
|||
Loading…
Reference in a new issue