[PATCH 1/4] FIX: restore_backup() throws core dump

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



1. restore_backup() throws core dump during releasing fdlist.
Loop for closing handlers checks next_spare variable,
but iterates disk_count.

2. fdlist initialization/close is corrected to initialize/close
   whole allocated array

3. next_spare variable name is replaced by spares

Signed-off-by: Adam Kwolek <adam.kwolek@xxxxxxxxx>
---

 Grow.c |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/Grow.c b/Grow.c
index de177d8..ae0d112 100644
--- a/Grow.c
+++ b/Grow.c
@@ -38,7 +38,7 @@
 int restore_backup(struct supertype *st,
 		   struct mdinfo *content,
 		   int working_disks,
-		   int next_spare,
+		   int spares,
 		   char *backup_file,
 		   int verbose)
 {
@@ -46,7 +46,7 @@ int restore_backup(struct supertype *st,
 	int *fdlist;
 	struct mdinfo *dev;
 	int err;
-	int disk_count = next_spare + working_disks;
+	int disk_count = working_disks + spares;
 
 	dprintf("Called restore_backup()\n");
 	fdlist = malloc(sizeof(int) * disk_count);
@@ -55,7 +55,7 @@ int restore_backup(struct supertype *st,
 			Name ": cannot allocate memory for disk list\n");
 		return 1;
 	}
-	for (i = 0; i < next_spare; i++)
+	for (i = 0; i < disk_count; i++)
 		fdlist[i] = -1;
 	for (dev = content->devs; dev; dev = dev->next) {
 		char buf[22];
@@ -68,16 +68,16 @@ int restore_backup(struct supertype *st,
 		if (dev->disk.raid_disk >= 0)
 			fdlist[dev->disk.raid_disk] = fd;
 		else
-			fdlist[next_spare++] = fd;
+			fdlist[working_disks++] = fd;
 	}
 
 	if (st->ss->external && st->ss->recover_backup)
 		err = st->ss->recover_backup(st, content);
 	else
-		err = Grow_restart(st, content, fdlist, next_spare,
+		err = Grow_restart(st, content, fdlist, working_disks,
 				   backup_file, verbose > 0);
 
-	while (next_spare > 0) {
+	while (disk_count > 0) {
 		disk_count--;
 		if (fdlist[disk_count] >= 0)
 			close(fdlist[disk_count]);

--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux