From 10dcd077d24fd3a63791549637e26f9284dfa94b Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Mon, 1 Oct 2007 13:18:19 +0100 Subject: [PATCH] libxenctrl: Fix lock_pages()/unlock_pages() region-size calculation. Signed-off-by: Isaku Yamahata --- tools/libxc/xc_private.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/libxc/xc_private.c b/tools/libxc/xc_private.c index 18a18f4c65..03d7904d61 100644 --- a/tools/libxc/xc_private.c +++ b/tools/libxc/xc_private.c @@ -130,7 +130,8 @@ int lock_pages(void *addr, size_t len) int e = 0; #ifndef __sun__ void *laddr = (void *)((unsigned long)addr & PAGE_MASK); - size_t llen = (len + PAGE_SIZE - 1) & PAGE_MASK; + size_t llen = (len + ((unsigned long)addr - (unsigned long)laddr) + + PAGE_SIZE - 1) & PAGE_MASK; e = mlock(laddr, llen); #endif return e; @@ -140,7 +141,8 @@ void unlock_pages(void *addr, size_t len) { #ifndef __sun__ void *laddr = (void *)((unsigned long)addr & PAGE_MASK); - size_t llen = (len + PAGE_SIZE - 1) & PAGE_MASK; + size_t llen = (len + ((unsigned long)addr - (unsigned long)laddr) + + PAGE_SIZE - 1) & PAGE_MASK; safe_munlock(laddr, llen); #endif } -- 2.39.5