diff mbox

[net] macsec: set actual real device for xmit when !protect_frames

Message ID 920063998328f5014b267defd80eec862f181ad8.1467323773.git.daniel@iogearbox.net
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Daniel Borkmann June 30, 2016, 10 p.m. UTC
Avoid recursions of dev_queue_xmit() to the wrong net device when
frames are unprotected, since at that time skb->dev still points to
our own macsec dev and unlike macsec_encrypt_finish() dev pointer
doesn't get updated to real underlying device.

Fixes: c09440f7dcb3 ("macsec: introduce IEEE 802.1AE driver")
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Sabrina Dubroca <sd@queasysnail.net>
---
 drivers/net/macsec.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Hannes Frederic Sowa July 1, 2016, 11:32 a.m. UTC | #1
On 01.07.2016 00:00, Daniel Borkmann wrote:
> Avoid recursions of dev_queue_xmit() to the wrong net device when
> frames are unprotected, since at that time skb->dev still points to
> our own macsec dev and unlike macsec_encrypt_finish() dev pointer
> doesn't get updated to real underlying device.
> 
> Fixes: c09440f7dcb3 ("macsec: introduce IEEE 802.1AE driver")
> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
> Acked-by: Sabrina Dubroca <sd@queasysnail.net>

Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>

Thanks!
David Miller July 1, 2016, 8:36 p.m. UTC | #2
From: Daniel Borkmann <daniel@iogearbox.net>
Date: Fri,  1 Jul 2016 00:00:54 +0200

> Avoid recursions of dev_queue_xmit() to the wrong net device when
> frames are unprotected, since at that time skb->dev still points to
> our own macsec dev and unlike macsec_encrypt_finish() dev pointer
> doesn't get updated to real underlying device.
> 
> Fixes: c09440f7dcb3 ("macsec: introduce IEEE 802.1AE driver")
> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
> Acked-by: Sabrina Dubroca <sd@queasysnail.net>

Applied and queued up for -stable, thanks.
diff mbox

Patch

diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
index 0e7eff7..8bcd78f 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -2640,6 +2640,7 @@  static netdev_tx_t macsec_start_xmit(struct sk_buff *skb,
 		u64_stats_update_begin(&secy_stats->syncp);
 		secy_stats->stats.OutPktsUntagged++;
 		u64_stats_update_end(&secy_stats->syncp);
+		skb->dev = macsec->real_dev;
 		len = skb->len;
 		ret = dev_queue_xmit(skb);
 		count_tx(dev, ret, len);