While running `make func` on ia64, I found that
truncate_sigbus_versus_oom was adding a negative value to a pointer and
causing a SEGV. This was because hpage_size was of type int, even though
the return type of gethugepagesize() is long. The multiplication was
truncated and led to negative values. Fix this throughout the tests,
just in case, by making hpage_size always a long.
Signed-off-by: Nishanth Aravamudan <[EMAIL PROTECTED]>
---
elflink.c | 2 +-
tests/alloc-instantiate-race.c | 2 +-
tests/brk_near_huge.c | 2 +-
tests/chunk-overcommit.c | 2 +-
tests/direct.c | 2 +-
tests/empty_mounts.c | 2 +-
tests/gethugepagesize.c | 4 ++--
tests/huge_at_4GB_normal_below.c | 3 ++-
tests/huge_below_4GB_normal_above.c | 3 ++-
tests/icache-hygeine.c | 2 +-
tests/map_high_truncate_2.c | 2 +-
tests/meminfo_nohuge.c | 4 ++--
tests/misaligned_offset.c | 4 ++--
tests/mmap-cow.c | 5 +++--
tests/mmap-gettest.c | 2 +-
tests/mprotect.c | 2 +-
tests/private.c | 2 +-
tests/ptrace-write-hugepage.c | 2 +-
tests/readback.c | 2 +-
tests/shared.c | 2 +-
tests/shm-fork.c | 2 +-
tests/shm-getraw.c | 4 ++--
tests/shm-gettest.c | 2 +-
tests/slbpacaflush.c | 2 +-
tests/stack_grow_into_huge.c | 2 +-
tests/straddle_4GB.c | 2 +-
tests/task-size-overrun.c | 2 +-
tests/truncate.c | 2 +-
tests/truncate_above_4GB.c | 2 +-
tests/truncate_reserve_wraparound.c | 2 +-
tests/truncate_sigbus_versus_oom.c | 2 +-
tests/unlinked_fd.c | 2 +-
32 files changed, 40 insertions(+), 37 deletions(-)
diff --git a/elflink.c b/elflink.c
index d80f3d3..03b79db 100644
--- a/elflink.c
+++ b/elflink.c
@@ -539,7 +539,7 @@ static void parse_elf(Elf_Ehdr *ehdr)
*/
static int prepare_segment(struct seg_info *seg)
{
- int hpage_size = gethugepagesize();
+ long hpage_size = gethugepagesize();
void *p;
unsigned long gap;
unsigned long size;
diff --git a/tests/alloc-instantiate-race.c b/tests/alloc-instantiate-race.c
index 5f7837c..e324870 100644
--- a/tests/alloc-instantiate-race.c
+++ b/tests/alloc-instantiate-race.c
@@ -54,7 +54,7 @@ pid_t gettid(void)
return syscall(__NR_gettid);
}
-static int hpage_size;
+static long hpage_size;
static pid_t child1, child2;
static pthread_t thread1, thread2;
diff --git a/tests/brk_near_huge.c b/tests/brk_near_huge.c
index 4ed6bc9..11ec0cf 100644
--- a/tests/brk_near_huge.c
+++ b/tests/brk_near_huge.c
@@ -66,7 +66,7 @@ void *next_chunk(void *addr)
int main(int argc, char *argv[])
{
- int hpage_size;
+ long hpage_size;
int fd;
void *brk0, *hugemap_addr, *newbrk;
char *p;
diff --git a/tests/chunk-overcommit.c b/tests/chunk-overcommit.c
index f46c2f2..767e8e3 100644
--- a/tests/chunk-overcommit.c
+++ b/tests/chunk-overcommit.c
@@ -50,7 +50,7 @@
int main(int argc, char *argv[])
{
- int hpage_size;
+ long hpage_size;
unsigned long totpages, chunk1, chunk2;
int fd;
void *p, *q;
diff --git a/tests/direct.c b/tests/direct.c
index e0a3d93..353e857 100644
--- a/tests/direct.c
+++ b/tests/direct.c
@@ -38,7 +38,7 @@ char buf[IOSZ] __attribute__ ((aligned (IOSZ)));
int main(int argc, char *argv[])
{
- int hpage_size;
+ long hpage_size;
int fd, dfd;
void *p;
size_t ret;
diff --git a/tests/empty_mounts.c b/tests/empty_mounts.c
index 12d7241..2ad2abc 100644
--- a/tests/empty_mounts.c
+++ b/tests/empty_mounts.c
@@ -57,7 +57,7 @@ int open(const char *path, int flags, ...)
int main(int argc, char *argv[])
{
- int hpage_size;
+ long hpage_size;
int fd;
test_init(argc, argv);
diff --git a/tests/gethugepagesize.c b/tests/gethugepagesize.c
index 6d47fb2..7668b04 100644
--- a/tests/gethugepagesize.c
+++ b/tests/gethugepagesize.c
@@ -26,14 +26,14 @@
int main(int argc, char *argv[])
{
- int hpage_size;
+ long hpage_size;
test_init(argc, argv);
hpage_size = gethugepagesize();
if (hpage_size > 0) {
- verbose_printf("Huge page size is %d bytes\n", hpage_size);
+ verbose_printf("Huge page size is %ld bytes\n", hpage_size);
PASS();
}
diff --git a/tests/huge_at_4GB_normal_below.c b/tests/huge_at_4GB_normal_below.c
index 7e6a4ee..11aa2d1 100644
--- a/tests/huge_at_4GB_normal_below.c
+++ b/tests/huge_at_4GB_normal_below.c
@@ -41,7 +41,8 @@
int main(int argc, char *argv[])
{
- int page_size, hpage_size;
+ int page_size;
+ long hpage_size;
int fd;
void *p, *q;
unsigned long lowaddr;
diff --git a/tests/huge_below_4GB_normal_above.c
b/tests/huge_below_4GB_normal_above.c
index 532ee44..c1d1091 100644
--- a/tests/huge_below_4GB_normal_above.c
+++ b/tests/huge_below_4GB_normal_above.c
@@ -41,7 +41,8 @@
int main(int argc, char *argv[])
{
- int page_size, hpage_size;
+ int page_size;
+ long hpage_size;
int fd;
void *p, *q;
unsigned long lowaddr, highaddr;
diff --git a/tests/icache-hygeine.c b/tests/icache-hygeine.c
index 725dfc1..0167ebb 100644
--- a/tests/icache-hygeine.c
+++ b/tests/icache-hygeine.c
@@ -138,7 +138,7 @@ static void sig_handler(int signum, siginfo_t *si, void *uc)
static void test_once(int fd)
{
- int hpage_size = gethugepagesize();
+ long hpage_size = gethugepagesize();
void *p, *q;
ftruncate(fd, 0);
diff --git a/tests/map_high_truncate_2.c b/tests/map_high_truncate_2.c
index 7d04852..cdd757a 100644
--- a/tests/map_high_truncate_2.c
+++ b/tests/map_high_truncate_2.c
@@ -55,7 +55,7 @@
int main(int argc, char *argv[])
{
- int hpage_size;
+ long hpage_size;
int fd;
char *p, *q;
unsigned long i;
diff --git a/tests/meminfo_nohuge.c b/tests/meminfo_nohuge.c
index 2791414..026ccd1 100644
--- a/tests/meminfo_nohuge.c
+++ b/tests/meminfo_nohuge.c
@@ -60,7 +60,7 @@ int open(const char *path, int flags, ...)
int main(int argc, char *argv[])
{
- int hpage_size;
+ long hpage_size;
test_init(argc, argv);
@@ -68,5 +68,5 @@ int main(int argc, char *argv[])
if (hpage_size == -1)
PASS();
- FAIL("Mysteriously found a hugepage size of %d\n", hpage_size);
+ FAIL("Mysteriously found a hugepage size of %ld\n", hpage_size);
}
diff --git a/tests/misaligned_offset.c b/tests/misaligned_offset.c
index 0f57652..6a02a26 100644
--- a/tests/misaligned_offset.c
+++ b/tests/misaligned_offset.c
@@ -66,7 +66,7 @@ static unsigned long long read_free(void)
int main(int argc, char *argv[])
{
int page_size;
- int hpage_size;
+ long hpage_size;
off_t buggy_offset;
int fd;
void *p, *q;
@@ -121,7 +121,7 @@ int main(int argc, char *argv[])
* can get thrown away by a pud_clear() */
err = mprotect(p, hpage_size, PROT_READ);
if (err)
- FAIL("mprotect(%p, 0x%x, PROT_READ)", p, hpage_size);
+ FAIL("mprotect(%p, 0x%lx, PROT_READ)", p, hpage_size);
/* Replace top hpage by hpage mapping at confusing file offset */
buggy_offset = page_size;
diff --git a/tests/mmap-cow.c b/tests/mmap-cow.c
index 4419a8c..223a59f 100644
--- a/tests/mmap-cow.c
+++ b/tests/mmap-cow.c
@@ -109,7 +109,8 @@ static void do_work(int thread, size_t size, int fd)
int main(int argc, char ** argv)
{
char *addr;
- size_t hpage_size, size;
+ long hpage_size;
+ size_t size;
int i, pid, status, fd, ret;
int wait_list[MAX_PROCS];
@@ -128,7 +129,7 @@ int main(int argc, char ** argv)
/* Have to have enough available hugepages for each thread to
* get its own copy, plus one for the parent/page-cache */
size = (nr_hugepages / (threads+1)) * hpage_size;
- verbose_printf("hpage_size is %zx, Size is %zu, threads: %u\n",
+ verbose_printf("hpage_size is %lx, Size is %zu, threads: %u\n",
hpage_size, size, threads);
/* First, open the file */
diff --git a/tests/mmap-gettest.c b/tests/mmap-gettest.c
index 1be656f..4567037 100644
--- a/tests/mmap-gettest.c
+++ b/tests/mmap-gettest.c
@@ -47,7 +47,7 @@ extern int errno;
static char hugetlb_mount[BUF_SZ];
static unsigned int iter;
static int nr_hugepages;
-static size_t hpage_size;
+static long hpage_size;
static int do_one(char *mountpoint, size_t size) {
char *ma;
diff --git a/tests/mprotect.c b/tests/mprotect.c
index 173eb79..1027f15 100644
--- a/tests/mprotect.c
+++ b/tests/mprotect.c
@@ -34,7 +34,7 @@
static sigjmp_buf sig_escape;
static void *sig_expected = MAP_FAILED;
-static int hpage_size;
+static long hpage_size;
static void sig_handler(int signum, siginfo_t *si, void *uc)
{
diff --git a/tests/private.c b/tests/private.c
index 046b110..55e95b7 100644
--- a/tests/private.c
+++ b/tests/private.c
@@ -32,7 +32,7 @@
int main(int argc, char *argv[])
{
- int hpage_size;
+ long hpage_size;
int fd;
void *p, *q;
unsigned int *pl, *ql;
diff --git a/tests/ptrace-write-hugepage.c b/tests/ptrace-write-hugepage.c
index a86e301..f885cd2 100644
--- a/tests/ptrace-write-hugepage.c
+++ b/tests/ptrace-write-hugepage.c
@@ -33,7 +33,7 @@
#define CONST 0xdeadbeefL
-static int hpage_size;
+static long hpage_size;
static volatile int ready_to_trace = 0;
static void sigchld_handler(int signum, siginfo_t *si, void *uc)
diff --git a/tests/readback.c b/tests/readback.c
index f631187..b967b41 100644
--- a/tests/readback.c
+++ b/tests/readback.c
@@ -30,7 +30,7 @@
int main(int argc, char *argv[])
{
- int hpage_size;
+ long hpage_size;
int fd;
void *p;
unsigned int *q;
diff --git a/tests/shared.c b/tests/shared.c
index 06e2a6c..c3948a2 100644
--- a/tests/shared.c
+++ b/tests/shared.c
@@ -32,7 +32,7 @@
int main(int argc, char *argv[])
{
- int hpage_size;
+ long hpage_size;
int fd;
void *p, *q;
unsigned int *pl, *ql;
diff --git a/tests/shm-fork.c b/tests/shm-fork.c
index 9ae47c2..ab6b103 100644
--- a/tests/shm-fork.c
+++ b/tests/shm-fork.c
@@ -85,7 +85,7 @@ static void do_child(int thread, unsigned long size)
int main(int argc, char ** argv)
{
unsigned long size;
- unsigned int hpage_size;
+ long hpage_size;
int pid, status;
int i;
int wait_list[MAX_PROCS];
diff --git a/tests/shm-getraw.c b/tests/shm-getraw.c
index 4ad46e3..577f2a4 100644
--- a/tests/shm-getraw.c
+++ b/tests/shm-getraw.c
@@ -51,7 +51,7 @@ int main(int argc, char ** argv)
{
size_t size;
size_t i;
- size_t hpage_size = gethugepagesize();
+ long hpage_size = gethugepagesize();
volatile char *shmaddr;
char *buffer;
int raw_fd;
@@ -63,7 +63,7 @@ int main(int argc, char ** argv)
nr_hugepages = atoi(argv[1]);
- verbose_printf("hpage_size is: %zu\n", hpage_size);
+ verbose_printf("hpage_size is: %ld\n", hpage_size);
buffer = malloc(hpage_size*sizeof(char));
diff --git a/tests/shm-gettest.c b/tests/shm-gettest.c
index 03eea0e..8b13b12 100644
--- a/tests/shm-gettest.c
+++ b/tests/shm-gettest.c
@@ -40,7 +40,7 @@ extern int errno;
static unsigned int iter;
static int nr_hugepages;
static int shmid = -1;
-static size_t hpage_size;
+static long hpage_size;
void cleanup(void)
{
diff --git a/tests/slbpacaflush.c b/tests/slbpacaflush.c
index bf95dfe..8953a84 100644
--- a/tests/slbpacaflush.c
+++ b/tests/slbpacaflush.c
@@ -53,7 +53,7 @@
int main(int argc, char *argv[])
{
- int hpage_size;
+ long hpage_size;
int fd;
void *p;
volatile unsigned long *q;
diff --git a/tests/stack_grow_into_huge.c b/tests/stack_grow_into_huge.c
index 33232bf..a88a237 100644
--- a/tests/stack_grow_into_huge.c
+++ b/tests/stack_grow_into_huge.c
@@ -59,7 +59,7 @@ int main(int argc, char *argv[])
int fd, pid, s, ret;
struct rlimit r;
char *b;
- unsigned long hpage_size = gethugepagesize();
+ long hpage_size = gethugepagesize();
test_init(argc, argv);
diff --git a/tests/straddle_4GB.c b/tests/straddle_4GB.c
index 9428486..f1e2047 100644
--- a/tests/straddle_4GB.c
+++ b/tests/straddle_4GB.c
@@ -29,7 +29,7 @@
int main(int argc, char *argv[])
{
- int hpage_size;
+ long hpage_size;
int fd;
void *p;
unsigned long straddle_addr;
diff --git a/tests/task-size-overrun.c b/tests/task-size-overrun.c
index 05a9cc9..c91b988 100644
--- a/tests/task-size-overrun.c
+++ b/tests/task-size-overrun.c
@@ -86,7 +86,7 @@ static unsigned long find_task_size(void)
int main(int argc, char *argv[])
{
- int hpage_size;
+ long hpage_size;
int fd;
void *p;
unsigned long task_size;
diff --git a/tests/truncate.c b/tests/truncate.c
index 1c0bb75..c42e00b 100644
--- a/tests/truncate.c
+++ b/tests/truncate.c
@@ -35,7 +35,7 @@ static void sigbus_handler(int signum, siginfo_t *si, void
*uc)
int main(int argc, char *argv[])
{
- int hpage_size;
+ long hpage_size;
int fd;
void *p;
volatile unsigned int *q;
diff --git a/tests/truncate_above_4GB.c b/tests/truncate_above_4GB.c
index d680044..0207306 100644
--- a/tests/truncate_above_4GB.c
+++ b/tests/truncate_above_4GB.c
@@ -60,7 +60,7 @@ static void sigbus_handler_pass(int signum, siginfo_t *si,
void *uc)
int main(int argc, char *argv[])
{
int page_size;
- int hpage_size;
+ long hpage_size;
long long buggy_offset, truncate_point;
int fd;
void *p, *q;
diff --git a/tests/truncate_reserve_wraparound.c
b/tests/truncate_reserve_wraparound.c
index 38a69cf..cd090a7 100644
--- a/tests/truncate_reserve_wraparound.c
+++ b/tests/truncate_reserve_wraparound.c
@@ -69,7 +69,7 @@ static unsigned long long read_reserved(void)
int main(int argc, char *argv[])
{
- int hpage_size;
+ long hpage_size;
int fd;
void *p;
volatile unsigned int *q;
diff --git a/tests/truncate_sigbus_versus_oom.c
b/tests/truncate_sigbus_versus_oom.c
index 10501b2..ec9ecd4 100644
--- a/tests/truncate_sigbus_versus_oom.c
+++ b/tests/truncate_sigbus_versus_oom.c
@@ -47,7 +47,7 @@ static void sigbus_handler(int signum, siginfo_t *si, void
*uc)
int main(int argc, char *argv[])
{
- int hpage_size;
+ long hpage_size;
int fd, fdx;
unsigned long totpages;
void *p, *q;
diff --git a/tests/unlinked_fd.c b/tests/unlinked_fd.c
index bfae464..be608d7 100644
--- a/tests/unlinked_fd.c
+++ b/tests/unlinked_fd.c
@@ -27,7 +27,7 @@
int main(int argc, char *argv[])
{
- int hpage_size;
+ long hpage_size;
int fd;
void *p;
int err;
--
Nishanth Aravamudan <[EMAIL PROTECTED]>
IBM Linux Technology Center
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Libhugetlbfs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libhugetlbfs-devel