+/* Clear memory regardless of compiler optimizations
+ * v = memory to clear
+ * c = character to set
+ * n = memory size to clear
+ */
+void *memset_secure(void *v, int c, size_t n)
+{
+ volatile unsigned char *p = (volatile unsigned char *)v;
+ while (n--) {
+ *p++ = (unsigned char) c;
+ }
+
+ return v;
+}