From 33ce24ed460797596b14c9ec89e4eb7de262ba4d Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Thu, 11 Feb 2010 13:51:56 -0800 Subject: [PATCH] dpif-netdev: Fix validation of VLAN PCP value in userspace datapath. Reported-by: Jean Tourrilhes --- lib/dpif-netdev.c | 2 +- lib/packets.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index e9f006c3..1daa93b2 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -752,7 +752,7 @@ dpif_netdev_validate_actions(const union odp_action *actions, int n_actions, case ODPAT_SET_VLAN_PCP: *mutates = true; - if (a->vlan_pcp.vlan_pcp & ~VLAN_PCP_MASK) { + if (a->vlan_pcp.vlan_pcp & ~(VLAN_PCP_MASK >> VLAN_PCP_SHIFT)) { return EINVAL; } break; diff --git a/lib/packets.h b/lib/packets.h index 2c33078f..f0ccfdb9 100644 --- a/lib/packets.h +++ b/lib/packets.h @@ -179,7 +179,10 @@ struct llc_snap_header { BUILD_ASSERT_DECL(LLC_SNAP_HEADER_LEN == sizeof(struct llc_snap_header)); #define VLAN_VID_MASK 0x0fff +#define VLAN_VID_SHIFT 0 + #define VLAN_PCP_MASK 0xe000 +#define VLAN_PCP_SHIFT 13 #define VLAN_HEADER_LEN 4 struct vlan_header { -- 2.30.2