diff options
Diffstat (limited to 'pkg/libfido2/patch/0005-dev-avoid-use-of-packed-struct.patch')
| -rw-r--r-- | pkg/libfido2/patch/0005-dev-avoid-use-of-packed-struct.patch | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/pkg/libfido2/patch/0005-dev-avoid-use-of-packed-struct.patch b/pkg/libfido2/patch/0005-dev-avoid-use-of-packed-struct.patch new file mode 100644 index 00000000..c31e64db --- /dev/null +++ b/pkg/libfido2/patch/0005-dev-avoid-use-of-packed-struct.patch @@ -0,0 +1,72 @@ +From 38ddc101ebcf864112f646026e149a6b0cc7f44a Mon Sep 17 00:00:00 2001 +From: Michael Forney <mforney@mforney.org> +Date: Tue, 26 Nov 2019 19:02:46 -0800 +Subject: [PATCH] dev: avoid use of packed struct + +--- + src/dev.c | 13 +++++++++++-- + src/types.h | 5 ++--- + 2 files changed, 13 insertions(+), 5 deletions(-) + +diff --git a/src/dev.c b/src/dev.c +index d0efac7..d24f707 100644 +--- a/src/dev.c ++++ b/src/dev.c +@@ -102,19 +102,28 @@ fido_dev_open_tx(fido_dev_t *dev, const char *path) + static int + fido_dev_open_rx(fido_dev_t *dev, int ms) + { ++ uint8_t data[17]; + const uint8_t cmd = CTAP_FRAME_INIT | CTAP_CMD_INIT; + int n; + +- if ((n = fido_rx(dev, cmd, &dev->attr, sizeof(dev->attr), ms)) < 0) { ++ if ((n = fido_rx(dev, cmd, data, sizeof(data), ms)) < 0) { + fido_log_debug("%s: fido_rx", __func__); + goto fail; + } + ++ memcpy(&dev->attr.nonce, &data[0], 8); ++ memcpy(&dev->attr.cid, &data[8], 4); ++ dev->attr.protocol = data[12]; ++ dev->attr.major = data[13]; ++ dev->attr.minor = data[14]; ++ dev->attr.build = data[15]; ++ dev->attr.flags = data[16]; ++ + #ifdef FIDO_FUZZ + dev->attr.nonce = dev->nonce; + #endif + +- if ((size_t)n != sizeof(dev->attr) || dev->attr.nonce != dev->nonce) { ++ if ((size_t)n != sizeof(data) || dev->attr.nonce != dev->nonce) { + fido_log_debug("%s: invalid nonce", __func__); + goto fail; + } +diff --git a/src/types.h b/src/types.h +index 42ed1b7..af72710 100644 +--- a/src/types.h ++++ b/src/types.h +@@ -148,9 +148,8 @@ typedef struct fido_dev_info { + char *product; /* product string */ + } fido_dev_info_t; + +-PACKED_TYPE(fido_ctap_info_t, + /* defined in section 8.1.9.1.3 (CTAPHID_INIT) of the fido2 ctap spec */ +-struct fido_ctap_info { ++typedef struct fido_ctap_info { + uint64_t nonce; /* echoed nonce */ + uint32_t cid; /* channel id */ + uint8_t protocol; /* ctaphid protocol id */ +@@ -158,7 +157,7 @@ struct fido_ctap_info { + uint8_t minor; /* minor version number */ + uint8_t build; /* build version number */ + uint8_t flags; /* capabilities flags; see FIDO_CAP_* */ +-}) ++} fido_ctap_info_t; + + typedef struct fido_dev { + uint64_t nonce; /* issued nonce */ +-- +2.24.0 + |
