diff --git a/src/opencl.c b/src/opencl.c index 043f7778f..fc6c167ef 100644 --- a/src/opencl.c +++ b/src/opencl.c @@ -92,7 +92,7 @@ static int ocl_check_dri (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx) fclose (fd_dri); - #endif + #endif // __linux__ return 0; } @@ -3148,6 +3148,32 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) if (device_param->skipped) continue; + #if defined(__APPLE__) + /** + * If '--force' is not set, we proceed to excluding unstable hash modes, + * because some of them cause segfault or inconclusive attack. + * + * common: 1500, 3000, 14000 + * gpu-only: 14100 + * cpu-only: 3200, 9000 + */ + bool checks = false; + + checks |= (user_options->hash_mode == 1500 || user_options->hash_mode == 3000 || user_options->hash_mode == 14000); + checks |= ((device_param->device_type & CL_DEVICE_TYPE_GPU) == CL_DEVICE_TYPE_GPU && user_options->hash_mode == 14100); + checks |= ((device_param->device_type & CL_DEVICE_TYPE_CPU) == CL_DEVICE_TYPE_CPU && (user_options->hash_mode == 3200 || user_options->hash_mode == 9000)); + + if (!user_options->force && checks) + { + event_log_warning (hashcat_ctx, "* Device #%u: hashmode %u is unstable for this Apple %s Device, skipping (use --force to override)\n", + device_id+1, user_options->hash_mode, (device_param->device_type & CL_DEVICE_TYPE_GPU) ? "GPU" : "CPU"); + + device_param->skipped = true; + + continue; + } + #endif // __APPLE__ + // vector_width cl_uint vector_width;