Evil Bug: Because of not-zeroing a buffer it's possible a hash was cracked but not...
authorJens Steube <jens.steube@gmail.com>
Tue, 23 Feb 2016 09:36:43 +0000 (10:36 +0100)
committerJens Steube <jens.steube@gmail.com>
Tue, 23 Feb 2016 09:36:43 +0000 (10:36 +0100)
include/types.h
src/oclHashcat.c

index 9092ef1..6d65913 100644 (file)
@@ -879,6 +879,10 @@ struct __hc_device_param
   uint    size_pws;
   uint    size_tmps;
   uint    size_hooks;
+  uint    size_bfs;
+  uint    size_combs;
+  uint    size_rules;
+  uint    size_rules_c;
   uint    size_root_css;
   uint    size_markov_css;
   uint    size_digests;
index bdfb65d..8f8b07e 100644 (file)
@@ -4495,7 +4495,14 @@ static void *thread_calc_stdin (void *p)
 
       device_param->pws_cnt = 0;
 
-      memset (device_param->pws_buf, 0, device_param->size_pws);
+      if (attack_kern == ATTACK_KERN_STRAIGHT)
+      {
+        run_kernel_bzero (device_param, device_param->d_rules_c, device_param->size_rules_c);
+      }
+      else if (attack_kern == ATTACK_KERN_COMBI)
+      {
+        run_kernel_bzero (device_param, device_param->d_combs_c, device_param->size_combs);
+      }
     }
   }
 
@@ -4538,6 +4545,8 @@ static void *thread_calc (void *p)
         run_cracker (device_param, pws_cnt);
 
         device_param->pws_cnt = 0;
+
+        run_kernel_bzero (device_param, device_param->d_bfs_c, device_param->size_bfs);
       }
 
       if (data.devices_status == STATUS_STOP_AT_CHECKPOINT) check_checkpoint ();
@@ -4756,7 +4765,14 @@ static void *thread_calc (void *p)
 
         device_param->pws_cnt = 0;
 
-        memset (device_param->pws_buf, 0, device_param->size_pws);
+        if (attack_kern == ATTACK_KERN_STRAIGHT)
+        {
+          run_kernel_bzero (device_param, device_param->d_rules_c, device_param->size_rules_c);
+        }
+        else if (attack_kern == ATTACK_KERN_COMBI)
+        {
+          run_kernel_bzero (device_param, device_param->d_combs_c, device_param->size_combs);
+        }
       }
 
       if (data.devices_status == STATUS_STOP_AT_CHECKPOINT) check_checkpoint ();
@@ -13682,9 +13698,13 @@ int main (int argc, char **argv)
       }
       */
 
-      device_param->size_pws   = size_pws;
-      device_param->size_tmps  = size_tmps;
-      device_param->size_hooks = size_hooks;
+      device_param->size_bfs     = size_bfs;
+      device_param->size_combs   = size_combs;
+      device_param->size_rules   = size_rules;
+      device_param->size_rules_c = size_rules_c;
+      device_param->size_pws     = size_pws;
+      device_param->size_tmps    = size_tmps;
+      device_param->size_hooks   = size_hooks;
 
       // do not confuse kernel_accel_max with kernel_accel here