Print this page
8927 sadb_x_kmc_t's KM cookie should be 64-bits (fix improper upstream)
        
@@ -24,39 +24,43 @@
 
 #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)
 {
-        int rc;
+        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(-1, "%s write error", msgtypestr);
+                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(-1, "%s read reply error", msgtypestr);
+                        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(-1, "%s reply has error (diag = %d)", msgtypestr,
-                    samsg->sadb_x_msg_diagnostic);
+                err(EXIT_SETUP_FAIL, "%s reply has error (diag = %d)",
+                    msgtypestr, samsg->sadb_x_msg_diagnostic);
         }
 }
 
 int
 main(int argc, char *argv[])
@@ -76,28 +80,29 @@
         int s;
 
         if (argc != 2 && argc != 3) {
                 (void) fprintf(stderr, "Usage: %s <spi-value> {64}\n",
                     argv[0]);
-                exit(-1);
+                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(-1, "Argument %s is not a parsable number:",
-                            argv[1]);
+                        err(EXIT_SETUP_FAIL,
+                            "Argument %s is not a parsable number:", argv[1]);
                 } else {
                         errno = EINVAL;
-                        err(-1, "Zero SPI not allowed:");
+                        err(EXIT_SETUP_FAIL, "Zero SPI not allowed:");
                 }
         }
 
         s = socket(PF_KEY, SOCK_RAW, PF_KEY_V2);
         if (s == -1)
-                err(-1, "socket(PF_KEY)");
+                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,11 +188,11 @@
                 ext = (sadb_ext_t *)extptr;
         }
 
         if (extptr == endptr) {
                 (void) fprintf(stderr, "Can't find KMC extension in reply.\n");
-                exit(-1);
+                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,11 +201,11 @@
                             "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);
+                        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,11 +216,11 @@
                             "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(EXIT_TEST_FAIL);
                 }
         }
 
-        exit(0);
+        exit(EXIT_SUCCESS);
 }