Re: endless loop in probable_prime

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2020-06-18 18:13, Salz, Rich via openssl-users wrote:
    BN_bin2bn assumes that the size of a BN_ULONG (the type of a bn->d) is
     BN_BYTES. You have already told us that sizeof(*d) is 4. So BN_BYTES
     should also be 4. If BN_BYTES is being incorrectly set to 8 on your
     platform then that would explain the discrepancy. Can you check?

This seems HIGHLY likely since Ronny said earlier that the same config/toolchain is used for 32bit userspace and 64bit kernel, right?
Maybe the internal headers should contain lines that abort compilation if
inconsistencies are found in the values provided by the (public or private)
headers.

For example, if BN_BYTES > sizeof(BN_ULONG), compilation should stop via
an abstraction over the presence/absence of the _Static_assert, static_assert
or macro emulation of same in any given compiler.

/* Something like this, but via a macro abstraction: */
#if (some C++ compilers)
  /* Works if  defined(__cplusplus) && __cplusplus >= 201103l */
  /* Works for clang++ if has_feature(cxx_static_assert) */
  /* Works for g++ >= 4.3.x if defined(__GXX_EXPERIMENTAL_CXX0X__) */
  /* Works for MSC++ >= 16.00 */
  /* Fails for g++ 4.7.x specifically */
  /* Fails for some versions of Apple XCode */
  static_assert(
    (BN_BYTES <= sizeof(BN_ULONG)),
    "Failed static assert: " "BN_BYTES <= sizeof(BN_ULONG)");
#elif (some C compilers)
  /* Works for clang with has_feature(c_static_assert) */
  /* Works for gcc >= 4.6.x */
  /* Fails for some versions of Apple XCode */
  _Static_assert(
    (BN_BYTES <= sizeof(BN_ULONG)),
    "Failed static assert: " "BN_BYTES <= sizeof(BN_ULONG)");
#else
  /* Portable fallback, but some fudging may be needed for compilers
   *    without __COUNTER__ */
  /* If assertion fails, compiler will complain about invalid array size */
  /* If assertion is not a const expression, compiler will complain about that */
  typedef char OSSL_const_assert_##fudge##__LINE__##_##__COUNTER__[
    (BN_BYTES <= sizeof(BN_ULONG)) ? 1 : -1];
#endif


Enjoy

Jakob
--
Jakob Bohm, CIO, Partner, WiseMo A/S.  https://www.wisemo.com
Transformervej 29, 2860 Søborg, Denmark.  Direct +45 31 13 16 10
This public discussion message is non-binding and may contain errors.
WiseMo - Remote Service Management for PCs, Phones and Embedded




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux