Re: build for s390x system

David Raynor <[email protected]>
Newsgroups gmane.comp.security.virus.clamav.devel
Message-ID <CAAmFFgyvQXnoqhLJuM2pKcBjVgJUW+sJZzho6P-Uad4L+DVAFQ@mail.gmail.com>
On Thu, Sep 26, 2013 at 7:24 AM, Tsutomu Oyamada <[email protected]>wrote:

> Hi, Dave
>
> I've re-build of clamAV.
> As a result, confirmed that work just fine.
> Your advice was valid.
> Thank you very much.
>
> T.Oyamada
>
> On Thu, 26 Sep 2013 09:07:53 +0900
> Tsutomu Oyamada <[email protected]> wrote:
>
> > Hi, Dave.
> >
> > Thanks your advice.
> >
> > I changed type of fp_digit.
> > and I tried test program.
> >
> > fp_digit: 4
> > unsigned long: 8
> > FP_64BIT not defined
> > DIGIT_BIT: 32
> > CHAR_BIT: 8
> > FP_MAX_SIZE: 8448
> > FP_SIZE: 264
> > TFM_ASM not defined
> > fp_word: 8
> > ulong64: 8
> > unsigned long long: 8
> > CRYPT not defined
> >
> > It works good.
> > I will try re-compile clamav.
> > Later report the results.
> >
> > T.Oyamada
> >
> > On Wed, 25 Sep 2013 17:13:58 -0400
> > David Raynor <[email protected]> wrote:
> >
> > > On Wed, Sep 25, 2013 at 2:55 PM, David Raynor <[email protected]
> >wrote:
> > >
> > > >
> > > > On Tue, Sep 24, 2013 at 9:47 PM, Tsutomu Oyamada <
> [email protected]>wrote:
> > > >
> > > >> Hi, Dave.
> > > >>
> > > >> Thanks for your advice and quick respons.
> > > >> I tried it.
> > > >>
> > > >> ----
> > > >> fp_digit: 8
> > > >> unsigned long: 8
> > > >> FP_64BIT not defined
> > > >> DIGIT_BIT: 64
> > > >> CHAR_BIT: 8
> > > >> FP_MAX_SIZE: 8704
> > > >> FP_SIZE: 136
> > > >> TFM_ASM not defined
> > > >> fp_word: 8
> > > >> ulong64: 8
> > > >> unsigned long long: 8
> > > >> CRYPT not defined
> > > >> ----
> > > >>
> > > >> What should I just do in order to fix this problem?
> > > >> Please teach me how to set size of fp_word to 16.
> > > >>
> > > >> T.Oyamada
> > > >>
> > > >> On Tue, 24 Sep 2013 18:16:26 -0400
> > > >> David Raynor <[email protected]> wrote:
> > > >>
> > > >> > On Tue, Sep 24, 2013 at 4:37 PM, David Raynor <
> [email protected]
> > > >> >wrote:
> > > >> >
> > > >> > > On Tue, Sep 24, 2013 at 2:05 AM, Tsutomu Oyamada <
> > > >> [email protected]>wrote:
> > > >> > >
> > > >> > >> Hi,
> > > >> > >>
> > > >> > >> I investigated the value using the following programs.
> > > >> > >>
> > > >> > >> ----
> > > >> > >> #include "stdlib.h"
> > > >> > >> #include "bignum_fast.h"
> > > >> > >>
> > > >> > >> int main(int argc, char **argv) {
> > > >> > >>
> > > >> > >>         printf("fp_digit: %d\n",sizeof(fp_digit));
> > > >> > >>         printf("unsigned long: %d\n",sizeof(unsigned long));
> > > >> > >>
> > > >> > >> #ifdef FP_64BIT
> > > >> > >>         printf("FP_64BIT: %d\n",FP_64BIT);
> > > >> > >> #else
> > > >> > >>         printf("FP_64BIT not defined\n");
> > > >> > >> #endif
> > > >> > >>
> > > >> > >> #ifdef DIGIT_BIT
> > > >> > >>         printf("DIGIT_BIT: %d\n",DIGIT_BIT);
> > > >> > >> #else
> > > >> > >>         printf("DIGIT_BIT not defined\n");
> > > >> > >> #endif
> > > >> > >>
> > > >> > >> #ifdef CHAR_BIT
> > > >> > >>         printf("CHAR_BIT: %d\n",CHAR_BIT);
> > > >> > >> #else
> > > >> > >>         printf("CHAR_BIT not defined\n");
> > > >> > >> #endif
> > > >> > >>
> > > >> > >> #ifdef FP_MAX_SIZE
> > > >> > >>         printf("FP_MAX_SIZE: %d\n",FP_MAX_SIZE);
> > > >> > >> #else
> > > >> > >>         printf("FP_MAX_SIZE not defined\n");
> > > >> > >> #endif
> > > >> > >>
> > > >> > >> #ifdef FP_SIZE
> > > >> > >>         printf("FP_SIZE: %d\n",FP_SIZE);
> > > >> > >> #else
> > > >> > >>         printf("FP_SIZE not defined\n");
> > > >> > >> #endif
> > > >> > >>
> > > >> > >> #ifdef TFM_ASM
> > > >> > >>         printf("TFM_ASM: defined\n");
> > > >> > >> #else
> > > >> > >>         printf("TFM_ASM not defined\n");
> > > >> > >> #endif
> > > >> > >>
> > > >> > >>         exit(0);
> > > >> > >> }
> > > >> > >> ----
> > > >> > >>
> > > >> > >> The result was as follows.
> > > >> > >>
> > > >> > >> fp_digit: 8
> > > >> > >> unsigned long: 8
> > > >> > >> FP_64BIT not defined
> > > >> > >> DIGIT_BIT: 64
> > > >> > >> CHAR_BIT: 8
> > > >> > >> FP_MAX_SIZE: 8704
> > > >> > >> FP_SIZE: 136
> > > >> > >> TFM_ASM not defined
> > > >> > >>
> > > >> > >> Can you find a problem by this result?
> > > >> > >>
> > > >> > >> Thanks.
> > > >> > >>
> > > >> > >> --
> > > >> > >> T.Oyamada
> > > >> > >>
> > > >> > >> _______________________________________________
> > > >> > >> http://lurker.clamav.net/list/clamav-devel.html
> > > >> > >> Please submit your patches to our Bugzilla:
> http://bugs.clamav.net
> > > >> > >>
> > > >> > >
> > > >> > > I do not have an immediate fix, but that information does give
> me some
> > > >> > > leads.
> > > >> > >
> > > >> > > Basic issue: the tomsfastmath code must be falling through to
> the code
> > > >> > > block on lines 280-302 of fp_mul_comba.c.
> > > >> > > 1) The right shift causing the warning is DIGIT_BIT (64).
> > > >> > > 2) The datatype being shifted is fp_word.
> > > >> > > 3) fp_word defined as "typedef ulong64 fp_word;" from
> bignum_fast.h
> > > >> line
> > > >> > > 253
> > > >> > > 4) ulong64 defined as "typedef unsigned long long ulong64;" from
> > > >> > > bignum_fast.h line 248
> > > >> > >
> > > >> > > I think the problem is one of three issues:
> > > >> > > A) fp_word is not defined as a 64-bit datatype.
> > > >> > > B) line 301 of tomsfastmath/mul/fp_mul_comba.c is mistakenly
> > > >> downcasting t
> > > >> > > from fp_word to fp_digit before shifting.
> > > >> > > C) s390 is not allowing use of all 64 bits of fp_word.
> > > >> > >
> > > >> > > Problems A or B are easier fixed than C.
> > > >> > >
> > > >> > > Please add these lines to your test and re-run:
> > > >> > >
> > > >> > > printf("fp_word: %d\n",sizeof(fp_word));
> > > >> > > printf("ulong64: %d\n",sizeof(ulong64));
> > > >> > > printf("unsigned long long: %d\n",sizeof(unsigned long long));
> > > >> > > #ifdef CRYPT
> > > >> > >         printf("CRYPT: defined\n");
> > > >> > > #else
> > > >> > >         printf("CRYPT not defined\n");
> > > >> > > #endif
> > > >> > >
> > > >> > > I would like to see the config.log file generated by running
> > > >> configure. It
> > > >> > > would also be useful to have the full output from running make.
> The
> > > >> log
> > > >> > > snip shows line 91, but I expect that it first warned about
> line 15.
> > > >> > >
> > > >> > > The easiest way to continue and share logfiles is via Bugzilla.
> Please
> > > >> > > open a bug report on bugzilla.clamav.net on this issue. You
> can then
> > > >> > > attach the files to that bug.
> > > >> > >
> > > >> > > Hope this helps,
> > > >> > >
> > > >> > >
> > > >> > > Dave R.
> > > >> > >
> > > >> > > --
> > > >> > > ---
> > > >> > > Dave Raynor
> > > >> > > Sourcefire Vulnerability Research Team
> > > >> > > [email protected]
> > > >> > >
> > > >> >
> > > >> > I think I read something wrong, and I think I have an idea. It
> still
> > > >> needs
> > > >> > to be confirmed by the additional test lines above. Re-reading the
> > > >> output,
> > > >> > I think that the code is depending on fp_word being twice the
> size of
> > > >> > fp_digit. Based on fp_digit size of 8 that means it would expect
> it to
> > > >> be
> > > >> > 16. If sizeof(fp_word) is resolving to 8 and sizeof(fp_digit) is
> 8, that
> > > >> > could be the problem. Then the fix would depend on whether
> fp_word can
> > > >> be
> > > >> > made size 16 or must be constrained to size 8.
> > > >> >
> > > >> > Let me know what you find,
> > > >> >
> > > >> > Dave R.
> > > >> >
> > > >> > --
> > > >> > ---
> > > >> > Dave Raynor
> > > >> > Sourcefire Vulnerability Research Team
> > > >> > [email protected]
> > > >> > _______________________________________________
> > > >> > http://lurker.clamav.net/list/clamav-devel.html
> > > >> > Please submit your patches to our Bugzilla:
> http://bugs.clamav.net
> > > >> >
> > > >>
> > > >>
> > > >> _______________________________________________
> > > >> http://lurker.clamav.net/list/clamav-devel.html
> > > >> Please submit your patches to our Bugzilla: http://bugs.clamav.net
> > > >>
> > > >
> > > > From what I have read, gcc on s390 has a compiler option for setting
> the
> > > > size of "long double" type (64 or 128), but not "long long int". I
> expect
> > > > what we have to do instead is leave fp_word as 64 and tune down the
> > > > fp_digit to 32. That code block in bignum_fast.h is taken from
> tomsfastmath
> > > > and looks like it is aimed at 32-bit support anyway. This changes the
> > > > maximum ranges of the math calculations, but should be sufficient
> for our
> > > > needs (again, similar code runs on 32-bit).
> > > >
> > > > Please try changing this line: (bignum_fast.h:line 252)
> > > >    typedef unsigned long      fp_digit;
> > > > to this line:
> > > >    typedef unsigned int      fp_digit;
> > > >
> > > > If this is successful for you, we can determine the appropriate
> defines to
> > > > use to make this more portable.
> > > >
> > > > Dave R.
> > > >
> > > > --
> > > > ---
> > > > Dave Raynor
> > > > Sourcefire Vulnerability Research Team
> > > > [email protected]
> > > >
> > >
> > > Ideally, you should get these results from the test program after the
> > > change:
> > >
> > > fp_digit: 4
> > > unsigned long: 8
> > > FP_64BIT not defined
> > > DIGIT_BIT: 32
> > > CHAR_BIT: 8
> > > FP_MAX_SIZE: 8448
> > > FP_SIZE: 264
> > > TFM_ASM not defined
> > > fp_word: 8
> > > ulong64: 8
> > > unsigned long long: 8
> > > CRYPT not defined
> > >
> > > Except for the sizeof(unsigned long), this would match the values I
> see on
> > > a 32-bit test box.
> > >
> > > Dave R.
> > >
> > > --
> > > ---
> > > Dave Raynor
> > > Sourcefire Vulnerability Research Team
> > > [email protected]
> > > _______________________________________________
> > > http://lurker.clamav.net/list/clamav-devel.html
> > > Please submit your patches to our Bugzilla: http://bugs.clamav.net
> > >
> >
> >
> > _______________________________________________
> > http://lurker.clamav.net/list/clamav-devel.html
> > Please submit your patches to our Bugzilla: http://bugs.clamav.net
> >
>
>
> _______________________________________________
> http://lurker.clamav.net/list/clamav-devel.html
> Please submit your patches to our Bugzilla: http://bugs.clamav.net
>


Great! I am glad it works. I have recorded all of this in Bugzilla for
reference as bug #9017, including the fix.

This issue should also occur for any use of the tomsfastmath code on your
platform, based on the code in tomsfastmath/src/headers/tfm.h. For ClamAV
purposes, we do have type size checks run by configure that create defined
values we can reference.

Dave R.

-- 
---
Dave Raynor
Sourcefire Vulnerability Research Team
[email protected]
_______________________________________________
http://lurker.clamav.net/list/clamav-devel.html
Please submit your patches to our Bugzilla: http://bugs.clamav.net
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.