|
|
Message-ID: <20110823185546.0TTF2.1506046.imail@eastrmwml48>
Date: Tue, 23 Aug 2011 18:55:46 -0400
From: <jfoug@....net>
To: john-dev@...ts.openwall.com
Cc: magnum <rawsmooth@...dband.net>
Subject: Re: valgrind vs rules
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.