|
|
Message-ID: <4E54313D.9090700@bredband.net>
Date: Wed, 24 Aug 2011 01:01:17 +0200
From: magnum <rawsmooth@...dband.net>
To: john-dev@...ts.openwall.com
Subject: Re: valgrind vs rules
I tried the same thing. But I suspect we should actually memset it to
non-zero. I think that test in rules.c is a shortcut for sometimes
skipping a memchk().
So I just dropped my fix and posted to john-dev a couple of days ago and
will let Solar decide.
magnum
On 2011-08-24 00:55, jfoug@....net wrote:
> This 'fixes' the warning (it is just a warning). It stems all the way back to wordlist.c This is the 'jumbo' code, not the core code, but I think the same issue is in core john. This does appear to be an issue. I wonder if 'last' needs to be memset each time, of if the single \0 is enough? It it is enough, then likely this bug would have likely only affected a single candidate word.
>
> Jim.
>
> void do_wordlist_crack(struct db_main *db, char *name, int rules)
> {
> union {
> char buffer[2][LINE_BUFFER_SIZE + CACHE_BANK_SHIFT];
> ARCH_WORD dummy;
> } aligned;
> const char *line = aligned.buffer[0];
> char *last = aligned.buffer[1];
> struct rpp_context ctx;
> char *prerule, *rule, *word;
> char *(*apply)(const char *word, char *rule, int split, char *last);
> long file_len;
> int i, pipe_input=0, max_pipe_words=0, rules_keep=0, init_this_time=1, really_done=0;
> char msg_buf[128];
>
> #ifdef HAVE_MPI
> char file_line[LINE_BUFFER_SIZE];
> long my_size = 0;
> unsigned int myWordFileLines = 0;
> #endif
>
> log_event("Proceeding with wordlist mode");
>
> _db = db;
>
> length = db->format->params.plaintext_length;
>
> + memset(&aligned, 0, sizeof(aligned));
>
> if (name) {
>
>
> ---- magnum<rawsmooth@...dband.net> wrote:
>> I get this from valgrind when running wordlist + rules (even in plain
>> 1.7.8, no jumbo):
>>
>> ==10714== Conditional jump or move depends on uninitialised value(s)
>> ==10714== at 0x426690: rules_apply (rules.c:917)
>> ==10714== by 0x42AC35: do_wordlist_crack (wordlist.c:218)
>> ==10714== by 0x420170: main (john.c:306)
>> ==10714== Uninitialised value was created by a stack allocation
>> ==10714== at 0x42AA6D: do_wordlist_crack (wordlist.c:133)
>>
>>
>> relevant part of rules.c:
>>
>> 905 out_OK:
>> 906 in[rules_max_length] = 0;
>> 907 if (last) {
>> 908 if (length> rules_max_length)
>> 909 length = rules_max_length;
>> 910 if (length>= ARCH_SIZE - 1) {
>> 911 if (*(ARCH_WORD *)in != *(ARCH_WORD *)last)
>> 912 return in;
>> 913 if (strcmp(&in[ARCH_SIZE - 1],&last[ARCH_SIZE - 1]))
>> 914 return in;
>> 915 return NULL;
>> 916 }
>> 917 if (last[length])
>> 918 return in;
>> 919 if (memcmp(in, last, length))
>> 920 return in;
>> 921 return NULL;
>> 922 }
>> 923 return in;
>>
>> length here is the length of the current word. As I understand it, if
>> the current word is longer than last has ever been, last[length] is
>> uninitialized - and this is what valgrind complains about. I'm not sure
>> I understand the purpose of line 917 at all so I'm not sure this is a
>> problem at all?
>>
>> magnum
>
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.