summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/geom/bde/g_bde_crypt.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/sys/geom/bde/g_bde_crypt.c b/sys/geom/bde/g_bde_crypt.c
index 93715e8..f4162c1 100644
--- a/sys/geom/bde/g_bde_crypt.c
+++ b/sys/geom/bde/g_bde_crypt.c
@@ -331,6 +331,8 @@ g_bde_map_sector(struct g_bde_work *wp)
wp->so = zone * kp->zone_width + zoff;
wp->so += kp->keyoffset;
wp->so %= kp->media_width;
+ if (wp->so + wp->length > kp->media_width)
+ wp->length = kp->media_width - wp->so;
wp->so += kp->sector0;
/* The key sector is the last in this zone. */
@@ -364,4 +366,28 @@ g_bde_map_sector(struct g_bde_work *wp)
(intmax_t)wp->kso,
wp->ko);
#endif
+ KASSERT(wp->so + wp->length <= kp->sectorN,
+ ("wp->so (%qd) + wp->length (%qd) > EOM (%qd), offset = %qd",
+ (intmax_t)wp->so,
+ (intmax_t)wp->length,
+ (intmax_t)kp->sectorN,
+ (intmax_t)wp->offset));
+
+ KASSERT(wp->kso + kp->sectorsize <= kp->sectorN,
+ ("wp->kso (%qd) + kp->sectorsize > EOM (%qd), offset = %qd",
+ (intmax_t)wp->kso,
+ (intmax_t)kp->sectorN,
+ (intmax_t)wp->offset));
+
+ KASSERT(wp->so >= kp->sector0,
+ ("wp->so (%qd) < BOM (%qd), offset = %qd",
+ (intmax_t)wp->so,
+ (intmax_t)kp->sector0,
+ (intmax_t)wp->offset));
+
+ KASSERT(wp->kso >= kp->sector0,
+ ("wp->kso (%qd) <BOM (%qd), offset = %qd",
+ (intmax_t)wp->kso,
+ (intmax_t)kp->sector0,
+ (intmax_t)wp->offset));
}
OpenPOWER on IntegriCloud