The string returned from add_ramdisk_swap points to local memory that
can be overwritten after return.  This patch makes a global string
ramdisk_list which is used to store the list of ramdisks swap is
initialized on.

Signed-off-by: Avantika Mathur <mat...@us.ibm.com>

diff -uprNb libhugetlbfs.orig/hugeadm.c libhugetlbfs/hugeadm.c
--- libhugetlbfs.orig/hugeadm.c	2009-06-29 17:23:45.000000000 -0700
+++ libhugetlbfs/hugeadm.c	2009-06-29 17:22:45.000000000 -0700
@@ -133,6 +133,7 @@ int opt_temp_swap = 0;
 int opt_ramdisk_swap = 0;
 int opt_swap_persist = 0;
 int verbose_level = VERBOSITY_DEFAULT;
+char ramdisk_list[PATH_MAX] = "";
 
 void setup_environment(char *var, char *val)
 {
@@ -685,11 +686,9 @@ void rem_temp_swap() {
 	DEBUG("swapoff %s\n", file);
 }
 
-char* add_ramdisk_swap(long page_size) {
+void add_ramdisk_swap(long page_size) {
 	char ramdisk[PATH_MAX];
 	char mkswap_cmd[PATH_MAX];
-	char disk_list[PATH_MAX] = "";
-	char *ret_list;
 	int disk_num=0;
 	int count = 0;
 	long ramdisk_size;
@@ -697,14 +696,12 @@ char* add_ramdisk_swap(long page_size) {
 	int fd;
 
 	snprintf(ramdisk, PATH_MAX, "/dev/ram%i", disk_num);
-	ret_list = ramdisk;
 	fd = open(ramdisk, O_RDONLY);
 	ioctl(fd, BLKGETSIZE, &ramdisk_size);
 	close(fd);
 
 	ramdisk_size = ramdisk_size * 512;
 	count = (page_size/ramdisk_size) + 1;
-	opt_ramdisk_swap = count;
 
 	if (count > 1) {
 		INFO("Swap will be initialized on multiple ramdisks because\n\
@@ -738,14 +735,12 @@ char* add_ramdisk_swap(long page_size) {
 			continue;
 	        }
 		count--;
-		strcat(disk_list, " ");
-		strcat(disk_list, ramdisk);
+		strcat(ramdisk_list, " ");
+		strcat(ramdisk_list, ramdisk);
 	}
-	ret_list = disk_list;
-	return ret_list;
 }
 
-void rem_ramdisk_swap(char* ramdisk_list){
+void rem_ramdisk_swap(){
 	char *ramdisk;
 	char *iter = NULL;
 
@@ -803,7 +798,6 @@ void pool_adjust(char *cmd, unsigned int
 	char *iter = NULL;
 	char *page_size_str = NULL;
 	char *adjust_str = NULL;
-	char *disk_list = NULL;
 	long page_size;
 
 	unsigned long min;
@@ -873,11 +867,9 @@ void pool_adjust(char *cmd, unsigned int
 		if (opt_temp_swap)
 			add_temp_swap(page_size);
 		if (opt_ramdisk_swap)
-			disk_list = add_ramdisk_swap(page_size);
+			add_ramdisk_swap(page_size);
 		check_swap();
 	}
-
-
 	INFO("setting HUGEPAGES_TOTAL to %ld\n", min);
 	set_huge_page_counter(page_size, HUGEPAGES_TOTAL, min);
 	get_pool_size(page_size, &pools[pos]);
@@ -903,7 +895,7 @@ void pool_adjust(char *cmd, unsigned int
 		if (opt_temp_swap)
 			rem_temp_swap();
 		else if (opt_ramdisk_swap)
-			rem_ramdisk_swap(disk_list);
+			rem_ramdisk_swap();
 	}
 
 	/*
------------------------------------------------------------------------------
_______________________________________________
Libhugetlbfs-devel mailing list
Libhugetlbfs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libhugetlbfs-devel

Reply via email to