Print this page
8927 sadb_x_kmc_t's KM cookie should be 64-bits (fix improper upstream)

Split Close
Expand all
Collapse all
          --- old/usr/src/test/os-tests/tests/pf_key/kmc-updater.c
          +++ new/usr/src/test/os-tests/tests/pf_key/kmc-updater.c
↓ open down ↓ 18 lines elided ↑ open up ↑
  19   19  #include <errno.h>
  20   20  #include <err.h>
  21   21  #include <unistd.h>
  22   22  #include <stdlib.h>
  23   23  #include <string.h>
  24   24  
  25   25  #define COOKIE64 0xc0ffee4afee01deaULL
  26   26  #define COOKIE32 0x90125
  27   27  #define RESERVED 0xc0ffee
  28   28  
       29 +#define EXIT_SETUP_FAIL -1
       30 +#define EXIT_TEST_FAIL 1
       31 +#define EXIT_SUCCESS 0
       32 +
  29   33  /*
  30   34   * Exits app on failure.
  31   35   */
  32   36  static void
  33   37  write_and_read(int s, sadb_msg_t *samsg, uint64_t *readbuf, int readlen,
  34   38      char *msgtypestr)
  35   39  {
  36      -        int rc;
       40 +        ssize_t rc;
  37   41          uint8_t msgtype = samsg->sadb_msg_type;
  38   42          pid_t pid = samsg->sadb_msg_pid;
  39   43          uint8_t seq = samsg->sadb_msg_seq;
  40   44  
  41   45          rc = write(s, samsg, SADB_64TO8(samsg->sadb_msg_len));
  42   46          if (rc == -1)
  43      -                err(-1, "%s write error", msgtypestr);
       47 +                err(EXIT_SETUP_FAIL, "%s write error", msgtypestr);
  44   48  
  45   49          /* Yes, parameter re-use, but we're done writing. */
  46   50          samsg = (sadb_msg_t *)readbuf;
  47   51          do {
  48   52                  rc = read(s, readbuf, readlen);
  49   53                  if (rc == -1)
  50      -                        err(-1, "%s read reply error", msgtypestr);
       54 +                        err(EXIT_SETUP_FAIL, "%s read reply error", msgtypestr);
  51   55          } while (samsg->sadb_msg_seq != seq || samsg->sadb_msg_pid != pid ||
  52   56              samsg->sadb_msg_type != msgtype);
  53   57  
  54   58          if (samsg->sadb_msg_errno != 0) {
  55   59                  errno = samsg->sadb_msg_errno;
  56      -                err(-1, "%s reply has error (diag = %d)", msgtypestr,
  57      -                    samsg->sadb_x_msg_diagnostic);
       60 +                err(EXIT_SETUP_FAIL, "%s reply has error (diag = %d)",
       61 +                    msgtypestr, samsg->sadb_x_msg_diagnostic);
  58   62          }
  59   63  }
  60   64  
  61   65  int
  62   66  main(int argc, char *argv[])
  63   67  {
  64   68          uint32_t spi;
  65   69          sadb_ext_t *ext;
  66   70          sadb_sa_t *saext;
  67   71          sadb_msg_t *samsg;
↓ open down ↓ 3 lines elided ↑ open up ↑
  71   75          uint64_t writebuf[20];          /* PF_KEY likes 64-bit alignment. */
  72   76          uint64_t readbuf[128];
  73   77          uint64_t *extptr, *endptr;
  74   78          pid_t pid = getpid();
  75   79          boolean_t do_64_test;
  76   80          int s;
  77   81  
  78   82          if (argc != 2 && argc != 3) {
  79   83                  (void) fprintf(stderr, "Usage: %s <spi-value> {64}\n",
  80   84                      argv[0]);
  81      -                exit(-1);
       85 +                exit(EXIT_SETUP_FAIL);
  82   86          }
  83   87          do_64_test = (argc == 3);
  84   88  
       89 +        errno = 0;      /* Clear for strtoul() call. */
  85   90          spi = strtoul(argv[1], NULL, 0);
  86   91          if (spi == 0) {
  87   92                  if (errno != 0) {
  88      -                        err(-1, "Argument %s is not a parsable number:",
  89      -                            argv[1]);
       93 +                        err(EXIT_SETUP_FAIL,
       94 +                            "Argument %s is not a parsable number:", argv[1]);
  90   95                  } else {
  91   96                          errno = EINVAL;
  92      -                        err(-1, "Zero SPI not allowed:");
       97 +                        err(EXIT_SETUP_FAIL, "Zero SPI not allowed:");
  93   98                  }
  94   99          }
  95  100  
  96  101          s = socket(PF_KEY, SOCK_RAW, PF_KEY_V2);
  97  102          if (s == -1)
  98      -                err(-1, "socket(PF_KEY)");
      103 +                err(EXIT_SETUP_FAIL, "socket(PF_KEY)");
  99  104  
 100  105          /* Base message. */
 101  106          samsg = (sadb_msg_t *)writebuf;
 102  107          samsg->sadb_msg_version = PF_KEY_V2;
 103  108          samsg->sadb_msg_type = SADB_UPDATE;
 104  109          samsg->sadb_msg_errno = 0;
 105  110          samsg->sadb_msg_satype = SADB_SATYPE_AH;
 106  111          samsg->sadb_msg_reserved = 0;
 107  112          samsg->sadb_msg_seq = 1;
 108  113          samsg->sadb_msg_pid = pid;
↓ open down ↓ 69 lines elided ↑ open up ↑
 178  183          ext = (sadb_ext_t *)extptr;
 179  184  
 180  185          while ((extptr < endptr) &&
 181  186              (ext->sadb_ext_type != SADB_X_EXT_KM_COOKIE)) {
 182  187                  extptr += ext->sadb_ext_len;
 183  188                  ext = (sadb_ext_t *)extptr;
 184  189          }
 185  190  
 186  191          if (extptr == endptr) {
 187  192                  (void) fprintf(stderr, "Can't find KMC extension in reply.\n");
 188      -                exit(-1);
      193 +                exit(EXIT_SETUP_FAIL);
 189  194          }
 190  195          kmcext = (sadb_x_kmc_t *)extptr;
 191  196  
 192  197          if (do_64_test) {
 193  198                  if (kmcext->sadb_x_kmc_proto != SADB_X_KMP_KINK ||
 194  199                      kmcext->sadb_x_kmc_cookie64 != COOKIE64) {
 195  200                          (void) fprintf(stderr, "Unexpected 64-bit results: "
 196  201                              "KMC received was %d, expecting %d,\n",
 197  202                              kmcext->sadb_x_kmc_proto, SADB_X_KMP_KINK);
 198  203                          (void) fprintf(stderr, "64-bit cookie recevied was "
 199  204                              "0x%"PRIx64", expecting 0x%"PRIx64"\n",
 200  205                              kmcext->sadb_x_kmc_cookie64, COOKIE64);
 201      -                        exit(1);
      206 +                        exit(EXIT_TEST_FAIL);
 202  207                  }
 203  208          } else {
 204  209                  if (kmcext->sadb_x_kmc_proto != SADB_X_KMP_IKE ||
 205  210                      kmcext->sadb_x_kmc_cookie != COOKIE32 ||
 206  211                      kmcext->sadb_x_kmc_reserved != 0) {
 207  212                          (void) fprintf(stderr, "Unexpected IKE/32-bit results:"
 208  213                              " KMC received was %d, expecting %d,\n",
 209  214                              kmcext->sadb_x_kmc_proto, SADB_X_KMP_IKE);
 210  215                          (void) fprintf(stderr, "32-bit cookie recevied was "
 211  216                              "0x%"PRIx32", expecting 0x%"PRIx32"\n",
 212  217                              kmcext->sadb_x_kmc_cookie64, COOKIE32);
 213  218                          (void) fprintf(stderr, "32-bit reserved recevied was "
 214  219                              "0x%"PRIx32", expecting 0\n",
 215  220                              kmcext->sadb_x_kmc_cookie64);
 216      -                        exit(1);
      221 +                        exit(EXIT_TEST_FAIL);
 217  222                  }
 218  223          }
 219  224  
 220      -        exit(0);
      225 +        exit(EXIT_SUCCESS);
 221  226  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX