diff options
author | phk <phk@FreeBSD.org> | 2002-12-18 19:57:27 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2002-12-18 19:57:27 +0000 |
commit | 761d063e808061f78a2bd10e65cc88ff442124c6 (patch) | |
tree | 73efd719fdb177063848159195753ffb42085e80 /sys/geom/bde/g_bde_crypt.c | |
parent | 4052863334f88b834ae48faa0160fd6fdd753299 (diff) | |
download | FreeBSD-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.c | 4 |
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++) |