diff --git a/apphandler.cpp b/apphandler.cpp
index 7b7bc81..62b17a0 100644
--- a/apphandler.cpp
+++ b/apphandler.cpp
@@ -94,9 +94,7 @@
 static constexpr const char* cmdMaskStr = "commandMask";
 static constexpr int base_16 = 16;
 #endif // ENABLE_I2C_WHITELIST_CHECK
-static constexpr uint8_t maxIPMIWriteReadSize = 255;
 static constexpr uint8_t oemCmdStart = 192;
-static constexpr uint8_t oemCmdEnd = 255;
 static constexpr uint8_t invalidParamSelectorStart = 8;
 static constexpr uint8_t invalidParamSelectorEnd = 191;
 
@@ -1360,7 +1358,7 @@
     {
         return ipmi::responseInvalidFieldRequest();
     }
-    if ((paramSelector >= oemCmdStart) && (paramSelector <= oemCmdEnd))
+    if (paramSelector >= oemCmdStart)
     {
         return ipmi::responseParmNotSupported();
     }
@@ -1437,7 +1435,7 @@
     {
         return ipmi::responseInvalidFieldRequest();
     }
-    if ((paramSelector >= oemCmdStart) && (paramSelector <= oemCmdEnd))
+    if (paramSelector >= oemCmdStart)
     {
         return ipmi::responseParmNotSupported();
     }
@@ -1702,11 +1700,6 @@
     {
         return ipmi::responseInvalidFieldRequest();
     }
-    if (readCount > maxIPMIWriteReadSize)
-    {
-        log<level::ERR>("Master write read command: Read count exceeds limit");
-        return ipmi::responseParmOutOfRange();
-    }
     const size_t writeCount = writeData.size();
     if (!readCount && !writeCount)
     {
diff --git a/transporthandler.cpp b/transporthandler.cpp
index a9bc7c8..59d5f15 100644
--- a/transporthandler.cpp
+++ b/transporthandler.cpp
@@ -62,7 +62,6 @@
 };
 
 static constexpr uint8_t oemCmdStart = 192;
-static constexpr uint8_t oemCmdEnd = 255;
 
 // Checks if the ifname is part of the networkd path
 // This assumes the path came from the network subtree PATH_ROOT
@@ -1051,7 +1050,7 @@
         }
     }
 
-    if ((parameter >= oemCmdStart) && (parameter <= oemCmdEnd))
+    if (parameter >= oemCmdStart)
     {
         return setLanOem(channel, parameter, req);
     }
@@ -1354,7 +1353,7 @@
         }
     }
 
-    if ((parameter >= oemCmdStart) && (parameter <= oemCmdEnd))
+    if (parameter >= oemCmdStart)
     {
         return getLanOem(channel, parameter, set, block);
     }
diff --git a/user_channel/channel_layer.cpp b/user_channel/channel_layer.cpp
index fb70f1e..85c3426 100644
--- a/user_channel/channel_layer.cpp
+++ b/user_channel/channel_layer.cpp
@@ -51,9 +51,7 @@
 
 bool isValidAccessMode(const uint8_t accessMode)
 {
-    return (
-        (accessMode >= static_cast<uint8_t>(EChannelAccessMode::disabled)) &&
-        (accessMode <= static_cast<uint8_t>(EChannelAccessMode::shared)));
+    return (accessMode <= static_cast<uint8_t>(EChannelAccessMode::shared));
 }
 
 bool isValidChannel(const uint8_t chNum)
diff --git a/user_channel/channelcommands.cpp b/user_channel/channelcommands.cpp
index e860506..cd0a33b 100644
--- a/user_channel/channelcommands.cpp
+++ b/user_channel/channelcommands.cpp
@@ -195,7 +195,7 @@
         return response(ccActionNotSupportedForChannel);
     }
 
-    ChannelAccess chAccess;
+    ChannelAccess chAccess = {};
 
     Cc compCode = ipmi::ccUnspecifiedError;
 
diff --git a/user_channel/passwd_mgr.cpp b/user_channel/passwd_mgr.cpp
index 7b5b7ec..acf7c74 100644
--- a/user_channel/passwd_mgr.cpp
+++ b/user_channel/passwd_mgr.cpp
@@ -75,7 +75,10 @@
     {
         if ((st.st_mode & modeMask) != (S_IRUSR | S_IWUSR))
         {
-            chmod(passwdFileName, S_IRUSR | S_IWUSR);
+            if (chmod(passwdFileName, S_IRUSR | S_IWUSR) == -1)
+            {
+                log<level::DEBUG>("Error setting chmod for ipmi_pass file");
+            }
         }
     }
 
@@ -83,7 +86,10 @@
     {
         if ((st.st_mode & modeMask) != (S_IRUSR | S_IWUSR))
         {
-            chmod(encryptKeyFileName, S_IRUSR | S_IWUSR);
+            if (chmod(encryptKeyFileName, S_IRUSR | S_IWUSR) == -1)
+            {
+                log<level::DEBUG>("Error setting chmod for ipmi_pass file");
+            }
         }
     }
 }
