summaryrefslogtreecommitdiffstats
path: root/sys/geom/bde/g_bde_crypt.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2002-12-18 19:57:27 +0000
committerphk <phk@FreeBSD.org>2002-12-18 19:57:27 +0000
commit761d063e808061f78a2bd10e65cc88ff442124c6 (patch)
tree73efd719fdb177063848159195753ffb42085e80 /sys/geom/bde/g_bde_crypt.c
parent4052863334f88b834ae48faa0160fd6fdd753299 (diff)
downloadFreeBSD-src-761d063e808061f78a2bd10e65cc88ff442124c6.zip
FreeBSD-src-761d063e808061f78a2bd10e65cc88ff442124c6.tar.gz
Fix two blunders in the mapping functions which can lead to corrupt data,
for request sizes larger than the sectorsize or for multi-key setups. See warning mailed to current@ for details of recovery. Found by: Marcus Reid <marcus@blazingdot.com>
Diffstat (limited to 'sys/geom/bde/g_bde_crypt.c')
-rw-r--r--sys/geom/bde/g_bde_crypt.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/geom/bde/g_bde_crypt.c b/sys/geom/bde/g_bde_crypt.c
index b769f68..6b5619b 100644
--- a/sys/geom/bde/g_bde_crypt.c
+++ b/sys/geom/bde/g_bde_crypt.c
@@ -275,7 +275,7 @@ g_bde_map_sector(struct g_bde_key *kp,
/* Find physical sector address */
os = zone * kp->zone_width + zoff;
os += kp->keyoffset;
- os %= kp->media_width - (G_BDE_MAXKEYS * kp->sectorsize);
+ os %= kp->media_width;
os += kp->sector0;
/* Compensate for lock sectors */
@@ -288,7 +288,7 @@ g_bde_map_sector(struct g_bde_key *kp,
/* The key sector is the last in this zone. */
os = (1 + zone) * kp->zone_width - kp->sectorsize;
os += kp->keyoffset;
- os %= kp->media_width - (G_BDE_MAXKEYS * kp->sectorsize);
+ os %= kp->media_width;
os += kp->sector0;
for (u = 0; u < G_BDE_MAXKEYS; u++)
OpenPOWER on IntegriCloud