]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
macsec: limit ICV length to 16 octets
authorDavide Caratti <dcaratti@redhat.com>
Fri, 22 Jul 2016 13:07:56 +0000 (15:07 +0200)
committerDhaval Giani <dhaval.giani@oracle.com>
Mon, 16 Jan 2017 19:49:09 +0000 (14:49 -0500)
IEEE 802.1AE-2006 standard recommends that the ICV element in a MACsec
frame should not exceed 16 octets: add MACSEC_STD_ICV_LEN in uapi
definitions accordingly, and avoid accepting configurations where the ICV
length exceeds the standard value. Leave definition of MACSEC_MAX_ICV_LEN
unchanged for backwards compatibility with userspace programs.

Fixes: dece8d2b78d1 ("uapi: add MACsec bits")
Signed-off-by: Davide Caratti <dcaratti@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit 2ccbe2cb79f2f74ab739252299b6f9ff27586f2c)

Orabug: 24614549

Signed-off-by: Ethan Zhao <ethan.zhao@oracle.com>
Signed-off-by: Dhaval Giani <dhaval.giani@oracle.com>
drivers/net/macsec.c
include/uapi/linux/if_macsec.h

index 66fe1b081667523b105df5466d62f0ebba76d8f5..f6ce5f89f5d72febceedf93a36f04b0fb10527a3 100644 (file)
@@ -508,7 +508,7 @@ static bool macsec_validate_skb(struct sk_buff *skb, u16 icv_len)
 }
 
 #define MACSEC_NEEDED_HEADROOM (macsec_extra_len(true))
-#define MACSEC_NEEDED_TAILROOM MACSEC_MAX_ICV_LEN
+#define MACSEC_NEEDED_TAILROOM MACSEC_STD_ICV_LEN
 
 static void macsec_fill_iv(unsigned char *iv, sci_t sci, u32 pn)
 {
@@ -3151,7 +3151,7 @@ static int macsec_validate_attr(struct nlattr *tb[], struct nlattr *data[])
        case MACSEC_DEFAULT_CIPHER_ID:
        case MACSEC_DEFAULT_CIPHER_ALT:
                if (icv_len < MACSEC_MIN_ICV_LEN ||
-                   icv_len > MACSEC_MAX_ICV_LEN)
+                   icv_len > MACSEC_STD_ICV_LEN)
                        return -EINVAL;
                break;
        default:
index 3411ed06b9c0b80f81e3443772f1d2059b094fd1..52adb23f81323366a358b4dbb143c1e3c2909697 100644 (file)
@@ -26,6 +26,8 @@
 
 #define MACSEC_MIN_ICV_LEN 8
 #define MACSEC_MAX_ICV_LEN 32
+/* upper limit for ICV length as recommended by IEEE802.1AE-2006 */
+#define MACSEC_STD_ICV_LEN 16
 
 enum macsec_attrs {
        MACSEC_ATTR_UNSPEC,