From dcfca1f02b1a549ba57ca8e28372cef3e84268d0 Mon Sep 17 00:00:00 2001
From: Matthew Barth <msbarth@us.ibm.com>
Date: Mon, 29 Aug 2011 15:48:57 -0500
Subject: Additional good/error path checks for creating block

Change-Id: If3bd74e0ee5ca4177d4bac506a4433ac3e1e778d
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/289
Tested-by: Jenkins Server
Reviewed-by: MATTHEW S. BARTH <msbarth@us.ibm.com>
---
 src/kernel/basesegment.C  | 11 +++++------
 src/kernel/blockmsghdlr.C |  1 -
 2 files changed, 5 insertions(+), 7 deletions(-)

(limited to 'src/kernel')

diff --git a/src/kernel/basesegment.C b/src/kernel/basesegment.C
index 72ace03c8..94aafec40 100644
--- a/src/kernel/basesegment.C
+++ b/src/kernel/basesegment.C
@@ -23,13 +23,13 @@
 #include <limits.h>
 #include <errno.h>
 #include <util/singleton.H>
+#include <util/align.H>
 
 #include <kernel/basesegment.H>
 #include <kernel/segmentmgr.H>
 #include <kernel/block.H>
 #include <kernel/vmmmgr.H>
 #include <kernel/cpuid.H>
-//#include <kernel/console.H>
 
 #define SLBE_s 40
 
@@ -117,14 +117,13 @@ int BaseSegment::_mmAllocBlock(MessageQueue* i_mq,void* i_va,uint64_t i_size)
     uint64_t l_blockSizeTotal = 0;
     iv_block->totalBlocksAlloc(l_blockSizeTotal);
     //Verify input address and size falls within this segment's address range
-    if ((l_vaddr < this->getBaseAddress() ||
-        l_vaddr >= (this->getBaseAddress() + (1ull << SLBE_s))) &&
-        (l_blockSizeTotal+i_size <= (1ull << SLBE_s)))
+    if (l_vaddr < this->getBaseAddress() ||
+        l_vaddr >= (this->getBaseAddress() + (1ull << SLBE_s)) ||
+        (l_blockSizeTotal + ALIGN_PAGE(i_size)) >= (1ull << SLBE_s))
     {
         return -1;
     }
-    //TODO - Align i_size to page size
-    Block* l_block = new Block(l_vaddr, i_size, i_mq);
+    Block* l_block = new Block(l_vaddr, ALIGN_PAGE(i_size), i_mq);
     l_block->setParent(this);
     iv_block->appendBlock(l_block);
     return 0;
diff --git a/src/kernel/blockmsghdlr.C b/src/kernel/blockmsghdlr.C
index 0a3140e9d..cf1683cab 100644
--- a/src/kernel/blockmsghdlr.C
+++ b/src/kernel/blockmsghdlr.C
@@ -22,7 +22,6 @@
 //  IBM_PROLOG_END
 #include <kernel/blockmsghdlr.H>
 #include <kernel/block.H>
-//#include <kernel/console.H>
 
 MessageHandler::HandleResult BlockMsgHdlr::handleResponse(
         msg_sys_types_t i_type, void* i_key, task_t* i_task, int i_rc)
-- 
cgit v1.2.1