Openwall GNU/*/Linux - a small security-enhanced Linux distro for servers
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date: Thu, 14 Mar 2013 09:15:27 +0100
From: "Costin Enache" <e_costin@...oo.com>
To: <john-dev@...ts.openwall.com>
Subject: clock err in timers (alarm, status ...) and fix

HI,

 

John uses for the alarm, status, save and probably other timers the
sysconf(_SC_CLK_TCK) value, which, at least on Linux, is hard coded to a
value of 100. This means that the timers do not really work. On my system,
an abort timer set at 10 sec will abort after approx. 8 seconds. It is ok to
use the clock ticks value for timer polling (puts no additional stress on
the system), but the ticks cannot be used as seconds. I suggest the follwing
mods against the bleeding or similar, to fix the abort and status timers
(for me works fine):

 

 

 

john.c

@@ -815,10 +821,11 @@

 

static void john_done(void)

{

+       unsigned int time = status_get_time();

        if ((options.flags & (FLG_CRACKING_CHK | FLG_STDOUT)) ==

            FLG_CRACKING_CHK) {

                if (event_abort)

-                       log_event(timer_abort ?

+                       log_event((time < timer_abort) ?

                                  "Session aborted" :

                                  "Session stopped (max run-time reached)");

 

 

 

 

 

 

signals.c

@@ -49,6 +49,7 @@

#include "config.h"

#include "options.h"

#include "bench.h"

+#include "status.h"

 

volatile int event_pending = 0;

volatile int event_abort = 0, event_save = 0, event_status = 0;

@@ -154,11 +155,12 @@

void check_abort(int be_async_signal_safe)

{

        if (!event_abort) return;

+       unsigned int time = status_get_time();

 

        tty_done();

 

        if (be_async_signal_safe) {

-               if (timer_abort)

+               if (time < timer_abort)

                        write_loop(2, "Session aborted\n", 16);

                else

                        write_loop(2, "Session stopped (max run-time
reached)\n", 39);

@@ -171,7 +173,7 @@

                _exit(1);

        }

 

-       fprintf(stderr, "Session %s\n", timer_abort ?

+       fprintf(stderr, "Session %s\n", (time < timer_abort) ?

                "aborted" : "stopped (max run-time reached)");

        error();

}

@@ -273,6 +275,7 @@

 

static void sig_handle_timer(int signum)

{

+       unsigned int time = status_get_time();

        int saved_errno = errno;

 

        if (!--timer_save_value) {

@@ -281,13 +284,13 @@

                event_save = event_pending = 1;

        }

 

-       if (!--timer_abort)

+       if(time >= timer_abort)

                event_abort = event_pending = 1;

 

#ifndef BENCH_BUILD

-       if (!--timer_status) {

+       if(time >= timer_status) {

                event_status = event_pending = 1;

-               timer_status = options.status_interval;

+               timer_status += options.status_interval;

        }

#endif  

 

 

Costin

 


[ CONTENT OF TYPE text/html SKIPPED ]

[ CONTENT OF TYPE application/pkcs7-signature SKIPPED ]

Powered by blists - more mailing lists

Your e-mail address:

Powered by Openwall GNU/*/Linux - Powered by OpenVZ