diff --git a/super0.c b/super0.c index dab85db..d53f025 100644 --- a/super0.c +++ b/super0.c @@ -1065,13 +1065,11 @@ static int write_bitmap0(struct supertype *st, int fd) int rv = 0; int towrite, n; - char abuf[4096+4096]; - char *buf = (char*)(((long)(abuf+4096))&~4095L); + void *buf; if (!get_dev_size(fd, NULL, &dsize)) return 1; - if (dsize < MD_RESERVED_SECTORS*512) return -1; @@ -1082,6 +1080,9 @@ static int write_bitmap0(struct supertype *st, int fd) if (lseek64(fd, offset + 4096, 0)< 0LL) return 3; + if (posix_memalign(&buf, 4096, 4096)) + return -ENOMEM; + memset(buf, 0xff, 4096); memcpy(buf, ((char*)sb)+MD_SB_BYTES, sizeof(bitmap_super_t)); towrite = 60*1024; @@ -1100,6 +1101,7 @@ static int write_bitmap0(struct supertype *st, int fd) if (towrite) rv = -2; + free(buf); return rv; } diff --git a/super1.c b/super1.c index cfa237a..a18952a 100644 --- a/super1.c +++ b/super1.c @@ -1641,12 +1641,14 @@ static int write_bitmap1(struct supertype *st, int fd) struct mdp_superblock_1 *sb = st->sb; bitmap_super_t *bms = (bitmap_super_t*)(((char*)sb)+1024); int rv = 0; - + void *buf; int towrite, n; - char buf[4096]; locate_bitmap1(st, fd); + if (posix_memalign(&buf, 4096, 4096)) + return -ENOMEM; + memset(buf, 0xff, 4096); memcpy(buf, ((char*)sb)+1024, sizeof(bitmap_super_t)); @@ -1669,6 +1671,7 @@ static int write_bitmap1(struct supertype *st, int fd) if (towrite) rv = -2; + free(buf); return rv; }