diff -ruN /tmp/sos-code-article5/sos/kmem_vmm.c ../sos-code-article5/sos/kmem_vmm.c
--- /tmp/sos-code-article5/sos/kmem_vmm.c	2004-09-28 09:19:57.000000000 +0200
+++ ../sos-code-article5/sos/kmem_vmm.c	2004-11-14 22:04:44.000000000 +0100
@@ -120,10 +120,11 @@
   struct sos_kmem_range *range;
 
   /* First: try to retrieve the physical page mapped at this address */
-  sos_paddr_t ppage_paddr = sos_paging_get_paddr(vaddr);
-  if (! ppage_paddr)
+  sos_paddr_t ppage_paddr = SOS_PAGE_ALIGN_INF(sos_paging_get_paddr(vaddr));
+  if (ppage_paddr)
     {
       range = sos_physmem_get_kmem_range(ppage_paddr);
+
       /* If a page is mapped at this address, it is EXPECTED that it
 	 is really associated with a range */
       SOS_ASSERT_FATAL(range != NULL);
@@ -138,6 +139,11 @@
       /* Not found */
       if (! range)
 	return NULL;
+
+      /* vaddr not covered by this range */
+      if ( (vaddr < range->base_vaddr)
+	   || (vaddr >= (range->base_vaddr + range->nb_pages*SOS_PAGE_SIZE)) )
+	return NULL;
     }
 
   return range;
