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

*** 24,62 **** #define COOKIE64 0xc0ffee4afee01deaULL #define COOKIE32 0x90125 #define RESERVED 0xc0ffee /* * Exits app on failure. */ static void write_and_read(int s, sadb_msg_t *samsg, uint64_t *readbuf, int readlen, char *msgtypestr) { ! int rc; uint8_t msgtype = samsg->sadb_msg_type; pid_t pid = samsg->sadb_msg_pid; uint8_t seq = samsg->sadb_msg_seq; rc = write(s, samsg, SADB_64TO8(samsg->sadb_msg_len)); if (rc == -1) ! err(-1, "%s write error", msgtypestr); /* Yes, parameter re-use, but we're done writing. */ samsg = (sadb_msg_t *)readbuf; do { rc = read(s, readbuf, readlen); if (rc == -1) ! err(-1, "%s read reply error", msgtypestr); } while (samsg->sadb_msg_seq != seq || samsg->sadb_msg_pid != pid || samsg->sadb_msg_type != msgtype); if (samsg->sadb_msg_errno != 0) { errno = samsg->sadb_msg_errno; ! err(-1, "%s reply has error (diag = %d)", msgtypestr, ! samsg->sadb_x_msg_diagnostic); } } int main(int argc, char *argv[]) --- 24,66 ---- #define COOKIE64 0xc0ffee4afee01deaULL #define COOKIE32 0x90125 #define RESERVED 0xc0ffee + #define EXIT_SETUP_FAIL -1 + #define EXIT_TEST_FAIL 1 + #define EXIT_SUCCESS 0 + /* * Exits app on failure. */ static void write_and_read(int s, sadb_msg_t *samsg, uint64_t *readbuf, int readlen, char *msgtypestr) { ! ssize_t rc; uint8_t msgtype = samsg->sadb_msg_type; pid_t pid = samsg->sadb_msg_pid; uint8_t seq = samsg->sadb_msg_seq; rc = write(s, samsg, SADB_64TO8(samsg->sadb_msg_len)); if (rc == -1) ! err(EXIT_SETUP_FAIL, "%s write error", msgtypestr); /* Yes, parameter re-use, but we're done writing. */ samsg = (sadb_msg_t *)readbuf; do { rc = read(s, readbuf, readlen); if (rc == -1) ! err(EXIT_SETUP_FAIL, "%s read reply error", msgtypestr); } while (samsg->sadb_msg_seq != seq || samsg->sadb_msg_pid != pid || samsg->sadb_msg_type != msgtype); if (samsg->sadb_msg_errno != 0) { errno = samsg->sadb_msg_errno; ! err(EXIT_SETUP_FAIL, "%s reply has error (diag = %d)", ! msgtypestr, samsg->sadb_x_msg_diagnostic); } } int main(int argc, char *argv[])
*** 76,103 **** int s; if (argc != 2 && argc != 3) { (void) fprintf(stderr, "Usage: %s <spi-value> {64}\n", argv[0]); ! exit(-1); } do_64_test = (argc == 3); spi = strtoul(argv[1], NULL, 0); if (spi == 0) { if (errno != 0) { ! err(-1, "Argument %s is not a parsable number:", ! argv[1]); } else { errno = EINVAL; ! err(-1, "Zero SPI not allowed:"); } } s = socket(PF_KEY, SOCK_RAW, PF_KEY_V2); if (s == -1) ! err(-1, "socket(PF_KEY)"); /* Base message. */ samsg = (sadb_msg_t *)writebuf; samsg->sadb_msg_version = PF_KEY_V2; samsg->sadb_msg_type = SADB_UPDATE; --- 80,108 ---- int s; if (argc != 2 && argc != 3) { (void) fprintf(stderr, "Usage: %s <spi-value> {64}\n", argv[0]); ! exit(EXIT_SETUP_FAIL); } do_64_test = (argc == 3); + errno = 0; /* Clear for strtoul() call. */ spi = strtoul(argv[1], NULL, 0); if (spi == 0) { if (errno != 0) { ! err(EXIT_SETUP_FAIL, ! "Argument %s is not a parsable number:", argv[1]); } else { errno = EINVAL; ! err(EXIT_SETUP_FAIL, "Zero SPI not allowed:"); } } s = socket(PF_KEY, SOCK_RAW, PF_KEY_V2); if (s == -1) ! err(EXIT_SETUP_FAIL, "socket(PF_KEY)"); /* Base message. */ samsg = (sadb_msg_t *)writebuf; samsg->sadb_msg_version = PF_KEY_V2; samsg->sadb_msg_type = SADB_UPDATE;
*** 183,193 **** ext = (sadb_ext_t *)extptr; } if (extptr == endptr) { (void) fprintf(stderr, "Can't find KMC extension in reply.\n"); ! exit(-1); } kmcext = (sadb_x_kmc_t *)extptr; if (do_64_test) { if (kmcext->sadb_x_kmc_proto != SADB_X_KMP_KINK || --- 188,198 ---- ext = (sadb_ext_t *)extptr; } if (extptr == endptr) { (void) fprintf(stderr, "Can't find KMC extension in reply.\n"); ! exit(EXIT_SETUP_FAIL); } kmcext = (sadb_x_kmc_t *)extptr; if (do_64_test) { if (kmcext->sadb_x_kmc_proto != SADB_X_KMP_KINK ||
*** 196,206 **** "KMC received was %d, expecting %d,\n", kmcext->sadb_x_kmc_proto, SADB_X_KMP_KINK); (void) fprintf(stderr, "64-bit cookie recevied was " "0x%"PRIx64", expecting 0x%"PRIx64"\n", kmcext->sadb_x_kmc_cookie64, COOKIE64); ! exit(1); } } else { if (kmcext->sadb_x_kmc_proto != SADB_X_KMP_IKE || kmcext->sadb_x_kmc_cookie != COOKIE32 || kmcext->sadb_x_kmc_reserved != 0) { --- 201,211 ---- "KMC received was %d, expecting %d,\n", kmcext->sadb_x_kmc_proto, SADB_X_KMP_KINK); (void) fprintf(stderr, "64-bit cookie recevied was " "0x%"PRIx64", expecting 0x%"PRIx64"\n", kmcext->sadb_x_kmc_cookie64, COOKIE64); ! exit(EXIT_TEST_FAIL); } } else { if (kmcext->sadb_x_kmc_proto != SADB_X_KMP_IKE || kmcext->sadb_x_kmc_cookie != COOKIE32 || kmcext->sadb_x_kmc_reserved != 0) {
*** 211,221 **** "0x%"PRIx32", expecting 0x%"PRIx32"\n", kmcext->sadb_x_kmc_cookie64, COOKIE32); (void) fprintf(stderr, "32-bit reserved recevied was " "0x%"PRIx32", expecting 0\n", kmcext->sadb_x_kmc_cookie64); ! exit(1); } } ! exit(0); } --- 216,226 ---- "0x%"PRIx32", expecting 0x%"PRIx32"\n", kmcext->sadb_x_kmc_cookie64, COOKIE32); (void) fprintf(stderr, "32-bit reserved recevied was " "0x%"PRIx32", expecting 0\n", kmcext->sadb_x_kmc_cookie64); ! exit(EXIT_TEST_FAIL); } } ! exit(EXIT_SUCCESS); }