Source-Changes-HG archive

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

[src/trunk]: src/sys/net wg: Fix debug output now that the priority is mixed ...



details:   https://anonhg.NetBSD.org/src/rev/8c89e48db6a9
branches:  trunk
changeset: 943605:8c89e48db6a9
user:      riastradh <riastradh%NetBSD.org@localhost>
date:      Mon Sep 07 00:33:08 2020 +0000

description:
wg: Fix debug output now that the priority is mixed into it.

diffstat:

 sys/net/if_wg.c |  73 +++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 50 insertions(+), 23 deletions(-)

diffs (126 lines):

diff -r 1439ac50a118 -r 8c89e48db6a9 sys/net/if_wg.c
--- a/sys/net/if_wg.c   Mon Sep 07 00:32:49 2020 +0000
+++ b/sys/net/if_wg.c   Mon Sep 07 00:33:08 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_wg.c,v 1.52 2020/09/07 00:32:20 riastradh Exp $     */
+/*     $NetBSD: if_wg.c,v 1.53 2020/09/07 00:33:08 riastradh Exp $     */
 
 /*
  * Copyright (C) Ryota Ozaki <ozaki.ryota%gmail.com@localhost>
@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_wg.c,v 1.52 2020/09/07 00:32:20 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wg.c,v 1.53 2020/09/07 00:33:08 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -213,15 +213,39 @@
 
 #ifdef WG_DEBUG_DUMP
 
+static char *
+gethexdump(const char *p, size_t n)
+{
+       char *buf;
+       size_t i;
+
+       if (n > SIZE_MAX/3 - 1)
+               return NULL;
+       buf = kmem_alloc(3*n + 1, KM_NOSLEEP);
+       if (buf == NULL)
+               return NULL;
+       for (i = 0; i < n; i++)
+               snprintf(buf + 3*i, 3 + 1, " %02hhx", p[i]);
+       return buf;
+}
+
+static void
+puthexdump(char *buf, const void *p, size_t n)
+{
+
+       if (buf == NULL)
+               return;
+       kmem_free(buf, 3*n + 1);
+}
+
 #ifdef WG_RUMPKERNEL
 static void
 wg_dump_buf(const char *func, const char *buf, const size_t size)
 {
-
-       log(LOG_DEBUG, "%s: ", func);
-       for (int i = 0; i < size; i++)
-               log(LOG_DEBUG, "%02x ", (int)(0xff & buf[i]));
-       log(LOG_DEBUG, "\n");
+       char *hex = gethexdump(buf, size);
+
+       log(LOG_DEBUG, "%s: %s\n", func, hex ? hex : "(enomem)");
+       puthexdump(hex, buf, size);
 }
 #endif
 
@@ -229,11 +253,10 @@
 wg_dump_hash(const uint8_t *func, const uint8_t *name, const uint8_t *hash,
     const size_t size)
 {
-
-       log(LOG_DEBUG, "%s: %s: ", func, name);
-       for (int i = 0; i < size; i++)
-               log(LOG_DEBUG, "%02x ", (int)(0xff & hash[i]));
-       log(LOG_DEBUG, "\n");
+       char *hex = gethexdump(hash, size);
+
+       log(LOG_DEBUG, "%s: %s: %s\n", func, name, hex ? hex : "(enomem)");
+       puthexdump(hex, hash, size);
 }
 
 #define WG_DUMP_HASH(name, hash) \
@@ -3996,10 +4019,12 @@
                goto out;
        }
 #ifdef WG_DEBUG_DUMP
-       log(LOG_DEBUG, "pubkey=%p, pubkey_len=%lu\n", pubkey, pubkey_len);
-       for (int _i = 0; _i < pubkey_len; _i++)
-               log(LOG_DEBUG, "%c", ((const char *)pubkey)[_i]);
-       log(LOG_DEBUG, "\n");
+    {
+       char *hex = gethexdump(pubkey, pubkey_len);
+       log(LOG_DEBUG, "pubkey=%p, pubkey_len=%lu\n%s\n",
+           pubkey, pubkey_len, hex);
+       puthexdump(hex, pubkey, pubkey_len);
+    }
 #endif
 
        struct wg_peer *wgp = wg_alloc_peer(wg);
@@ -4157,9 +4182,9 @@
                return error;
        buf[ifd->ifd_len] = '\0';
 #ifdef WG_DEBUG_DUMP
-       for (int i = 0; i < ifd->ifd_len; i++)
-               log(LOG_DEBUG, "%c", buf[i]);
-       log(LOG_DEBUG, "\n");
+       log(LOG_DEBUG, "%.*s\n",
+           (int)MIN(INT_MAX, ifd->ifd_len),
+           (const char *)buf);
 #endif
        *_buf = buf;
        return 0;
@@ -4185,10 +4210,12 @@
                &privkey, &privkey_len))
                goto out;
 #ifdef WG_DEBUG_DUMP
-       log(LOG_DEBUG, "privkey=%p, privkey_len=%lu\n", privkey, privkey_len);
-       for (int i = 0; i < privkey_len; i++)
-               log(LOG_DEBUG, "%c", ((const char *)privkey)[i]);
-       log(LOG_DEBUG, "\n");
+    {
+       char *hex = gethexdump(privkey, privkey_len);
+       log(LOG_DEBUG, "privkey=%p, privkey_len=%lu\n%s\n",
+           privkey, privkey_len, hex);
+       puthexdump(hex, privkey, privkey_len);
+    }
 #endif
        if (privkey_len != WG_STATIC_KEY_LEN)
                goto out;



Home | Main Index | Thread Index | Old Index