From 343014b3095462dbec20efe456cbb945d4844b4e Mon Sep 17 00:00:00 2001
From: Nick Bofferding <bofferdn@us.ibm.com>
Date: Mon, 2 Mar 2015 18:04:05 -0600
Subject: Prevent out-of-order data access to FSP mailbox memory area

- Added system call to map FSP mailbox memory with guard permission
- Call new mapping in DMA area init
- Propagate guard permission down to MMIO map
- Apply guard permission in page fault handler
- Updated debug tools to support extra bit in MMIO struct

Change-Id: I8335ac7d3ef57e46d4c8b6c2b2a42b8a0bf7c4b0
Backport: release-fips830
Backport: release-fips820
CQ: SW295345
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/16307
Tested-by: Jenkins Server
Reviewed-by: Brian H. Horton <brianh@linux.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
---
 src/usr/mbox/mbox_dma_buffer.C | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

(limited to 'src/usr/mbox')

diff --git a/src/usr/mbox/mbox_dma_buffer.C b/src/usr/mbox/mbox_dma_buffer.C
index 102e67171..ca333e1c8 100644
--- a/src/usr/mbox/mbox_dma_buffer.C
+++ b/src/usr/mbox/mbox_dma_buffer.C
@@ -5,7 +5,9 @@
 /*                                                                        */
 /* OpenPOWER HostBoot Project                                             */
 /*                                                                        */
-/* COPYRIGHT International Business Machines Corp. 2012,2014              */
+/* Contributors Listed Below - COPYRIGHT 2012,2015                        */
+/* [+] International Business Machines Corp.                              */
+/*                                                                        */
 /*                                                                        */
 /* Licensed under the Apache License, Version 2.0 (the "License");        */
 /* you may not use this file except in compliance with the License.       */
@@ -183,7 +185,7 @@ void DmaBuffer::initPhysicalArea(void*& io_addr, uint64_t& o_phys)
               VMM_UNSECURE_RESERVED_MEMORY_BASEADDR;
 
     // Allocate a new VMM block for the buffer.
-    io_addr = mm_block_map(reinterpret_cast<void*>(o_phys),
+    io_addr = mm_guarded_block_map(reinterpret_cast<void*>(o_phys),
                            VmmManager::MBOX_DMA_SIZE);
         // Note: We do not plan on deleting this block, even when the buffer
         //       is destructed, because we have fundamentally changed the
-- 
cgit v1.2.1