On Thu, 25 Sep 2003, Geoff Thorpe wrote:
> On September 25, 2003 03:33 am, Nils Larsch wrote: > > Otto Moerbeek wrote: > > .... > > > > > OK, that would amount to the fixes below: > > > > > > - in BN_cmp, call bn_fix_top just before comparing the two tops. > > > > Not really necessary as the normal BN_* functions which change the > > value of the bignum should always ensure that the top value is > > correct (i.e. as small as possible), but of course adding bn_fix_top > > does not really harm (besides wasting some cpu time :-) . > > I would go one step further and suggest that BN_cmp() and operations like > it that should treat their inputs as "const" should not modify the > BIGNUMs at all. Fixing BIGNUMs wherever we spot problems helps propogate > the current mess, the correct fix (as Nils implied) is to trace the > problem back to where it is caused and fix it there. No BIGNUM structure > should ever be in an invalid state outside the scope of a BN_*** API > function (or macro). So each function should, on exit, have correctly > adjusted any data as necessary. Well mmust say I agree, but until a more or less complete audit of the BN code has been done, I like to bet on the safe side. The moment one is sure that all BN ops result in valid BN's, the extra bn_fix_top() calls can and should be removed. But since my work does concentrate on using the NM lib, and _not_ on maintaining it, i went for the safe, albeit ugly solution. > Perhaps (any volunteers?) the best way to do this would be to define a > validation function/macro and call it from every exit path for every > BIGNUM API function and macro. This could sanity-check the in/out > variables and abort() if there's something wrong so that the debugger can > catch these problems where they occur rather than where we first notice > them (later on in things like BN_cmp). IMHO this would be infinitely more > useful than continually adding calls to bn_fix_top() everywhere it seems > it could seal off another "case". This is extra tricky. The particular problem I found was not dependent on the exit path taken, but on the particular values supplied to BN_add_word(). But having a test set that has a full return path coverage _would_ be a good start. > > Perhaps you should send a bug report to [EMAIL PROTECTED] containing the > > patch and a link to this thread. > > Yup, this should certainly go into RT - but I think this would be the > ideal opportunity to audit the BIGNUM code properly for this sort of > thing. In particular, it would be nice if the result of this work would > also allow us to better constify the BIGNUM API (in CVS HEAD of course, > the stable branches would merely benefit from cleaner implementations;-). In the meantime, the bug report has been submitted. -Otto ______________________________________________________________________ OpenSSL Project http://www.openssl.org Development Mailing List [EMAIL PROTECTED] Automated List Manager [EMAIL PROTECTED]