diff --git a/tools/io.cpp b/tools/io.cpp
index cc9e7d1..420dd94 100644
--- a/tools/io.cpp
+++ b/tools/io.cpp
@@ -16,15 +16,10 @@
 bool DevMemDevice::read(const std::size_t offset, const std::size_t length,
                         void* const destination)
 {
-    if (!opened)
+    devMemFd = sys->open(devMemPath.c_str(), O_RDONLY);
+    if (devMemFd < 0)
     {
-        devMemFd = sys->open(devMemPath.c_str(), O_RDWR);
-        if (devMemFd < 0)
-        {
-            return false;
-        }
-
-        opened = true;
+        return false;
     }
 
     /* Map based on aligned addresses - behind the scenes. */
@@ -37,7 +32,10 @@
                              alignedOffset);
     if (devMemMapped == MAP_FAILED)
     {
-        return false; /* but leave the file open. */
+        std::fprintf(stderr, "Failed to mmap at offset: 0x%lx, length: %lu\n",
+                     offset, length);
+        sys->close(devMemFd);
+        return false;
     }
 
     void* alignedSource =
@@ -48,6 +46,7 @@
 
     /* Close the map between reads for now. */
     sys->munmap(devMemMapped, length);
+    sys->close(devMemFd);
 
     return true;
 }
@@ -55,15 +54,11 @@
 bool DevMemDevice::write(const std::size_t offset, const std::size_t length,
                          const void* const source)
 {
-    if (!opened)
+    devMemFd = sys->open(devMemPath.c_str(), O_RDWR);
+    if (devMemFd < 0)
     {
-        devMemFd = sys->open(devMemPath.c_str(), O_RDWR);
-        if (devMemFd < 0)
-        {
-            return false;
-        }
-
-        opened = true;
+        std::fprintf(stderr, "Failed to open /dev/mem for writing\n");
+        return false;
     }
 
     /* Map based on aligned addresses - behind the scenes. */
@@ -77,7 +72,10 @@
 
     if (devMemMapped == MAP_FAILED)
     {
-        return false; /* but leave the file open. */
+        std::fprintf(stderr, "Failed to mmap at offset: 0x%lx, length: %lu\n",
+                     offset, length);
+        sys->close(devMemFd);
+        return false;
     }
 
     void* alignedDestination =
@@ -88,6 +86,7 @@
 
     /* Close the map between writes for now. */
     sys->munmap(devMemMapped, length);
+    sys->close(devMemFd);
 
     return true;
 }
