diff -Nur secure_delete-3.1-old/smem.1 secure_delete-3.1/smem.1 --- secure_delete-3.1-old/smem.1 2011-06-20 16:31:36.890599669 +0300 +++ secure_delete-3.1/smem.1 2011-06-20 16:37:11.867622820 +0300 @@ -9,7 +9,7 @@ sdmem \- secure memory wiper (secure_deletion toolkit) .SH SYNOPSIS -.B sdmem [-f] [-l] [-l] [-v] +.B sdmem [-f] [-l] [-l] [-m] [-v] .SH DESCRIPTION .I sdmem @@ -54,6 +54,9 @@ -l for a second time lessons the security even more: only one pass with 0x00 is written. .TP +.B \-m +moderate security. Five passes are written. +.TP .B \-v verbose mode .PP diff -Nur secure_delete-3.1-old/smem.c secure_delete-3.1/smem.c --- secure_delete-3.1-old/smem.c 2011-06-20 16:31:36.889599617 +0300 +++ secure_delete-3.1/smem.c 2011-06-20 16:32:58.805684329 +0300 @@ -46,6 +46,7 @@ printf("Options:\n"); printf("\t-f fast (and insecure mode): no /dev/urandom.\n"); printf("\t-l lessens the security (use twice for total insecure mode).\n"); + printf("\t-m moderate security (5 writes).\n"); printf("\t-v is verbose mode.\n"); printf("\nsmem does a secure overwrite of the memory (RAM), because memory contents can\n"); printf("be recovered even after a shutdown! Default is secure mode (38 writes).\n"); @@ -127,7 +128,19 @@ alarm(600); /* needed to prevent mem caching */ while ( (ptr = calloc(4096, 16)) != NULL) { - if (mode > 0) { + if (mode == 3) { + __sdel_fill_buf(write_modes[0], BLOCKSIZE + 2, buf); + memcpy(ptr, buf, BLOCKSIZE); + __sdel_fill_buf(write_modes[1], BLOCKSIZE + 2, buf); + memcpy(ptr, buf, BLOCKSIZE); + __sdel_random_buf(BLOCKSIZE + 2, buf); + memcpy(ptr, buf, BLOCKSIZE); + __sdel_fill_buf(write_modes[0], BLOCKSIZE + 2, buf); + memcpy(ptr, buf, BLOCKSIZE); + __sdel_fill_buf(write_modes[1], BLOCKSIZE + 2, buf); + memcpy(ptr, buf, BLOCKSIZE); + } + else if (mode > 0) { for (turn=0; turn<=36; turn++) { if ((mode == 1) && (turn > 0)) break; if ((turn>=5) && (turn<=31)) { @@ -170,7 +183,7 @@ help(); while (1) { - result = getopt(argc, argv, "FfLlSsVvZz"); + result = getopt(argc, argv, "FfLlmSsVvZz"); if (result<0) break; switch (result) { case 'F' : @@ -179,6 +192,8 @@ case 'L' : case 'l' : if (secure) secure--; break; + case 'm' : secure = 3; + break; case 'S' : case 's' : secure++; break;