|
|
92bdd1 |
From 088d53dd15b14a1868b70fd0b8d695ac6b68f642 Mon Sep 17 00:00:00 2001
|
|
|
92bdd1 |
Message-Id: <088d53dd15b14a1868b70fd0b8d695ac6b68f642.1488376601.git.dcaratti@redhat.com>
|
|
|
92bdd1 |
From: Sabrina Dubroca <sd@queasysnail.net>
|
|
|
92bdd1 |
Date: Tue, 15 Nov 2016 18:06:23 +0100
|
|
|
92bdd1 |
Subject: [PATCH] mka: Fix getting capabilities from the driver
|
|
|
92bdd1 |
|
|
|
92bdd1 |
In commit a25e4efc9e428d968e83398bd8c9c94698ba5851 ('mka: Add driver op
|
|
|
92bdd1 |
to get macsec capabilities') I added some code to check the driver's
|
|
|
92bdd1 |
capabilities. This commit has two problems:
|
|
|
92bdd1 |
- wrong enum type set in kay->macsec_confidentiality
|
|
|
92bdd1 |
- ignores that drivers could report MACSEC_CAP_NOT_IMPLEMENTED, in
|
|
|
92bdd1 |
which case the MKA would claim that MACsec is supported.
|
|
|
92bdd1 |
|
|
|
92bdd1 |
Fix this by interpreting MACSEC_CAP_NOT_IMPLEMENTED in the same way as a
|
|
|
92bdd1 |
DO_NOT_SECURE policy, and set the correct value in
|
|
|
92bdd1 |
kay->macsec_confidentiality.
|
|
|
92bdd1 |
|
|
|
92bdd1 |
Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
|
|
|
92bdd1 |
---
|
|
|
92bdd1 |
src/pae/ieee802_1x_kay.c | 16 +++++++++-------
|
|
|
92bdd1 |
1 file changed, 9 insertions(+), 7 deletions(-)
|
|
|
92bdd1 |
|
|
|
92bdd1 |
diff --git a/src/pae/ieee802_1x_kay.c b/src/pae/ieee802_1x_kay.c
|
|
|
92bdd1 |
index 63bbd13..2841b10 100644
|
|
|
92bdd1 |
--- a/src/pae/ieee802_1x_kay.c
|
|
|
92bdd1 |
+++ b/src/pae/ieee802_1x_kay.c
|
|
|
92bdd1 |
@@ -3111,7 +3111,14 @@ ieee802_1x_kay_init(struct ieee802_1x_kay_ctx *ctx, enum macsec_policy policy,
|
|
|
92bdd1 |
|
|
|
92bdd1 |
dl_list_init(&kay->participant_list);
|
|
|
92bdd1 |
|
|
|
92bdd1 |
- if (policy == DO_NOT_SECURE) {
|
|
|
92bdd1 |
+ if (policy != DO_NOT_SECURE &&
|
|
|
92bdd1 |
+ secy_get_capability(kay, &kay->macsec_capable) < 0) {
|
|
|
92bdd1 |
+ os_free(kay);
|
|
|
92bdd1 |
+ return NULL;
|
|
|
92bdd1 |
+ }
|
|
|
92bdd1 |
+
|
|
|
92bdd1 |
+ if (policy == DO_NOT_SECURE ||
|
|
|
92bdd1 |
+ kay->macsec_capable == MACSEC_CAP_NOT_IMPLEMENTED) {
|
|
|
92bdd1 |
kay->macsec_capable = MACSEC_CAP_NOT_IMPLEMENTED;
|
|
|
92bdd1 |
kay->macsec_desired = FALSE;
|
|
|
92bdd1 |
kay->macsec_protect = FALSE;
|
|
|
92bdd1 |
@@ -3120,11 +3127,6 @@ ieee802_1x_kay_init(struct ieee802_1x_kay_ctx *ctx, enum macsec_policy policy,
|
|
|
92bdd1 |
kay->macsec_replay_window = 0;
|
|
|
92bdd1 |
kay->macsec_confidentiality = CONFIDENTIALITY_NONE;
|
|
|
92bdd1 |
} else {
|
|
|
92bdd1 |
- if (secy_get_capability(kay, &kay->macsec_capable) < 0) {
|
|
|
92bdd1 |
- os_free(kay);
|
|
|
92bdd1 |
- return NULL;
|
|
|
92bdd1 |
- }
|
|
|
92bdd1 |
-
|
|
|
92bdd1 |
kay->macsec_desired = TRUE;
|
|
|
92bdd1 |
kay->macsec_protect = TRUE;
|
|
|
92bdd1 |
kay->macsec_validate = Strict;
|
|
|
92bdd1 |
@@ -3133,7 +3135,7 @@ ieee802_1x_kay_init(struct ieee802_1x_kay_ctx *ctx, enum macsec_policy policy,
|
|
|
92bdd1 |
if (kay->macsec_capable >= MACSEC_CAP_INTEG_AND_CONF)
|
|
|
92bdd1 |
kay->macsec_confidentiality = CONFIDENTIALITY_OFFSET_0;
|
|
|
92bdd1 |
else
|
|
|
92bdd1 |
- kay->macsec_confidentiality = MACSEC_CAP_INTEGRITY;
|
|
|
92bdd1 |
+ kay->macsec_confidentiality = CONFIDENTIALITY_NONE;
|
|
|
92bdd1 |
}
|
|
|
92bdd1 |
|
|
|
92bdd1 |
wpa_printf(MSG_DEBUG, "KaY: state machine created");
|
|
|
92bdd1 |
--
|
|
|
92bdd1 |
2.7.4
|
|
|
92bdd1 |
|