Changeset 544 for trunk/src


Ignore:
Timestamp:
Feb 17, 2019, 2:41:49 PM (6 years ago)
Author:
katerina
Message:

Fix for ticket #436 (new gcc compiler options, including LTO).

Location:
trunk/src
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bignum.c

    r454 r544  
    425425{
    426426    DIGIT *a_ptr, *b_ptr;
     427    int retval = 0;
    427428
    428429    if (a->dgs_used  == b->dgs_used)
     
    437438        if (a_ptr < a->dp)
    438439        {
    439             return 0;
     440            return retval;
    440441        }
    441442        else
    442443        {
    443             return (*a_ptr > *b_ptr) ? 1 : -1;
    444         }
     444            if (retval == 0)
     445                retval = (*a_ptr > *b_ptr) ? 1 : -1;
     446        }
     447        return retval;
    445448    }
    446449    return (a->dgs_used > b->dgs_used) ? 1 : -1;
  • trunk/src/cutest_slib.c

    r248 r544  
    5858}
    5959
     60void Test_sl_ts_strncmp (CuTest *tc) {
     61  char one[64], two[64];
     62  int  res;
     63
     64  strcpy(one, "foo");
     65  strcpy(two, "foo");
     66  res = sl_ts_strncmp(one, two, 3);
     67  CuAssertIntEquals(tc, 0, res);
     68
     69  strcpy(one, "fox");
     70  strcpy(two, "foo");
     71  res = sl_ts_strncmp(one, two, 2);
     72  CuAssertIntEquals(tc, 0, res);
     73 
     74  strcpy(one, "f9o");
     75  strcpy(two, "foo");
     76  res = sl_ts_strncmp(one, two, 3);
     77  CuAssertTrue(tc, 0 != res);
     78
     79}
     80
    6081void Test_sl_strcasecmp (CuTest *tc) {
    6182  char one[64], two[64];
  • trunk/src/sh_calls.c

    r509 r544  
    5151#include "samhain.h"
    5252#include "sh_error.h"
    53 #include "sh_calls.h"
    5453#include "sh_ipvx.h"
    5554#include "sh_sub.h"
  • trunk/src/sh_srp.c

    r474 r544  
    4848#define bignum MP_INT
    4949
    50 inline
     50static
    5151int big_create (bignum * a)
    5252{
     
    5555}
    5656
    57 inline
     57static
    5858int big_zerop (bignum * a)
    5959{
     
    6969}
    7070
    71 inline
     71static
    7272int big_trunc (bignum * a, bignum * b, bignum * q, bignum *r)
    7373{
     
    7676}
    7777
    78 inline
     78static
    7979int big_exptmod (bignum * a, bignum * b, bignum * c, bignum *d)
    8080{
     
    136136}
    137137
    138 inline
     138static
    139139int big_add(bignum * a, bignum * b, bignum * c)
    140140{
     
    143143}
    144144
    145 inline
     145static
    146146int big_sub(bignum * a, bignum * b, bignum * c)
    147147{
     
    150150}
    151151
    152 inline
     152static
    153153int big_mul(bignum * a, bignum * b, bignum * c)
    154154{
     
    157157}
    158158
    159 inline
     159static
    160160int big_greaterp(bignum * a, bignum * b)
    161161{
     
    163163}
    164164
    165 inline
     165static
    166166int big_set_big(bignum * a, bignum * b)
    167167{
     
    171171
    172172
    173 inline
     173static
    174174int big_set_string(const char * str, int base, bignum * a)
    175175{
  • trunk/src/sh_xfer_client.c

    r541 r544  
    769769   */
    770770  sh_passwd (nounce, NULL, NULL, temp);
    771   if ( 0 != sl_strncmp(temp, answer, KEY_LEN))
     771  if ( 0 != sl_ts_strncmp(temp, answer, KEY_LEN))
    772772    flag_err = (-1);
    773773 
     
    10031003                                    );
    10041004                      if (M != NULL &&
    1005                           0 == sl_strncmp (answer, M, KEY_LEN+1))
     1005                          0 == sl_ts_strncmp (answer, M, KEY_LEN+1))
    10061006                        {
    10071007                          sl_strlcpy (skey->session,
     
    10831083                        pos+1);
    10841084      flag_err =
    1085         sl_strncmp(&answer[KEY_LEN+pos],
     1085        sl_ts_strncmp(&answer[KEY_LEN+pos],
    10861086                   sh_util_siggen(skey->session,
    10871087                                  buffer,
     
    12021202      (void) sl_strlcpy(buffer, errmsg, len);
    12031203      (void) sl_strlcat(buffer, nsrv,   len);
    1204       flag_err = sl_strncmp(answer,
    1205                             sh_util_siggen(skey->session,
    1206                                            buffer,
    1207                                            sl_strlen(buffer),
    1208                                            sigbuf, sizeof(sigbuf)),
    1209                             KEY_LEN);
     1204      flag_err = sl_ts_strncmp(answer,
     1205                               sh_util_siggen(skey->session,
     1206                                              buffer,
     1207                                              sl_strlen(buffer),
     1208                                              sigbuf, sizeof(sigbuf)),
     1209                               KEY_LEN);
    12101210      TPT((0, FIL__, __LINE__, _("msg=<sign %s.>\n"),
    12111211           sh_util_siggen(skey->session, buffer,
  • trunk/src/sh_xfer_server.c

    r541 r544  
    11981198              KEY_LEN+1);
    11991199 
    1200   if (0 != sl_strncmp(conn->K, conn->buf, KEY_LEN))
     1200  if (0 != sl_ts_strncmp(conn->K, conn->buf, KEY_LEN))
    12011201    {
    12021202      TPT((0, FIL__, __LINE__, _("msg=<clt %s>\n"), conn->buf));
     
    16641664           */
    16651665          buffer = sh_util_strconcat(conn->buf, conn->challenge, NULL);
    1666           i =  sl_strncmp(hash,
    1667                           sh_util_siggen(conn->client_entry->session_key,
    1668                                          buffer,
    1669                                          sl_strlen(buffer),
    1670                                          sigbuf, sizeof(sigbuf)),
    1671                           KEY_LEN);
     1666          i =  sl_ts_strncmp(hash,
     1667                             sh_util_siggen(conn->client_entry->session_key,
     1668                                            buffer,
     1669                                            sl_strlen(buffer),
     1670                                            sigbuf, sizeof(sigbuf)),
     1671                             KEY_LEN);
    16721672          TPT((0, FIL__, __LINE__, _("msg=<sign %s.>\n"),
    16731673               sh_util_siggen(conn->client_entry->session_key,
     
    20882088      TPT((0, FIL__, __LINE__, _("msg=<c/r: P = %s>\n"), conn->M1));
    20892089     
    2090       if ( 0 != sl_strncmp(conn->M1, conn->buf, KEY_LEN))
     2090      if ( 0 != sl_ts_strncmp(conn->M1, conn->buf, KEY_LEN))
    20912091        {
    20922092          sh_error_handle((-1), FIL__, __LINE__, 0, MSG_TCP_BADCONN,
     
    24142414       */
    24152415      if (conn->buf != NULL &&
    2416           sl_strncmp(conn->buf, conn->M1, KEY_LEN) == 0)
     2416          sl_ts_strncmp(conn->buf, conn->M1, KEY_LEN) == 0)
    24172417        {
    24182418          /*
  • trunk/src/slib.c

    r539 r544  
    588588/*
    589589 * Have memset in a different translation unit (i.e. this) to prevent
    590  * it to get optimized away
     590 * it to get optimized away ...not safe with link-time optimisation...
    591591 */
    592 void *sl_memset(void *s, int c, size_t n)
    593 {
    594   return memset(s, c,n);
     592void * sl_memset(void *s, int c, size_t n)
     593{
     594  /* See:
     595   * https://www.usenix.org/sites/default/files/conference/protected-files/usenixsecurity17_slides_zhaomo_yang.pdf
     596   */
     597#if defined(HAVE_EXPLICIT_MEMSET)
     598  return explicit_memset(s, c, n);
     599#elif defined(HAVE_EXPLICIT_BZERO)
     600  if (c == 0) {
     601    explicit_bzero(s, n);
     602    return s;
     603  } else {
     604    return memset(s, c, n);
     605  }
     606#elif defined(__GNUC__)
     607  memset(s, c, n);
     608  __asm__  __volatile__ ("" ::"r"(s): "memory"); /* compiler barrier */
     609  return s;
     610#else
     611  if (c == 0) {
     612    size_t i;
     613    volatile unsigned char * t_s = (volatile unsigned char *)s;
     614    for (i=0; i<n; ++i)
     615      t_s[i] = 0;
     616    return s;
     617  } else {
     618    return memset(s, c, n);
     619  }
     620#endif 
    595621}
    596622
     
    10711097  if (a != NULL && b != NULL)
    10721098    return (strcmp(a, b));
     1099  else if (a == NULL && b != NULL)
     1100    return (-1);
     1101  else if (a != NULL && b == NULL)
     1102    return (1);
     1103  else
     1104    return (-7); /* default to not equal */
     1105}
     1106
     1107/* Does not report sign. */
     1108int sl_ts_strncmp(const char * a, const char * b, size_t n)
     1109{
     1110#ifdef SL_FAIL_ON_ERROR
     1111  SL_REQUIRE (a != NULL, _("a != NULL"));
     1112  SL_REQUIRE (b != NULL, _("b != NULL"));
     1113  SL_REQUIRE (n > 0, _("n > 0"));
     1114#endif
     1115
     1116  if (a != NULL && b != NULL)
     1117    {
     1118      const unsigned char *a1 = (const unsigned char *)a;
     1119      const unsigned char *b1 = (const unsigned char *)b;
     1120      size_t i;
     1121      int  retval=0;
     1122      /* The simple index based access is optimized best by the
     1123       * compiler (tested with gcc 7.3.0). */
     1124      for (i = 0; i < n; ++i)
     1125        {
     1126          if (a1[i] == '\0' || b1[i] == '\0')
     1127            break;
     1128          retval |= (a1[i] ^ b1[i]);
     1129        }
     1130      /* if (retval == 0) --> false (0) */
     1131      return (retval != 0);
     1132    }
    10731133  else if (a == NULL && b != NULL)
    10741134    return (-1);
Note: See TracChangeset for help on using the changeset viewer.