DF-2911 / fix.diff
--- a/sys/kern/subr_disklabel64.c +++ b/sys/kern/subr_disklabel64.c @@ -285,6 +285,12 @@ return (EINVAL); if (nlp->d_pstop & (ssp->dss_secsize - 1)) return (EINVAL); + if (nlp->d_bbase > nlp->d_total_size) + return (EINVAL); + if (nlp->d_pbase < nlp->d_bbase || + nlp->d_pbase > nlp->d_pstop || + nlp->d_pstop > nlp->d_total_size) + return (EINVAL); if (nlp->d_abase & (ssp->dss_secsize - 1)) return (EINVAL); @@ -299,7 +305,8 @@ return (EINVAL); if (npp->p_bsize & (ssp->dss_secsize - 1)) return (EINVAL); - if (npp->p_boffset < nlp->d_pbase) + if (npp->p_boffset < nlp->d_pbase || + npp->p_boffset < nlp->d_bbase) return (ENOSPC); if (npp->p_boffset + npp->p_bsize > nlp->d_total_size) return (ENOSPC); |