diff options
author | Jarno Rajahalme <jarno@ovn.org> | 2017-04-10 18:18:30 -0700 |
---|---|---|
committer | Jarno Rajahalme <jarno@ovn.org> | 2017-04-11 09:39:53 -0700 |
commit | 280337736851db0358511ee211d02dc0975aad1a (patch) | |
tree | 827178b23ea0115890a52b36f1faa99d62a95f22 /datapath | |
parent | 2f2b904f9e28afaff3dfb7adaa62b96c0d144ace (diff) | |
download | openvswitch-280337736851db0358511ee211d02dc0975aad1a.tar.gz |
datapath: Avoid struct copy on conntrack labels.
Older kernels have variable sized labels, and the struct itself
contains only the length, so we must memcpy the bits explicitly.
The modified system test fails on older kernels without this change.
VMware-BZ: #1841876
Fixes: 09aa98ad496d ("datapath: Inherit master's labels.")
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Andy Zhou <azhou@ovn.org>
Diffstat (limited to 'datapath')
-rw-r--r-- | datapath/conntrack.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/datapath/conntrack.c b/datapath/conntrack.c index 4df73528b..47f1a9938 100644 --- a/datapath/conntrack.c +++ b/datapath/conntrack.c @@ -365,9 +365,12 @@ static int ovs_ct_init_labels(struct nf_conn *ct, struct sw_flow_key *key, if (!cl) return -ENOSPC; - /* Inherit the master's labels, if any. */ + /* Inherit the master's labels, if any. Must use memcpy for backport + * as struct assignment only copies the length field in older + * kernels. + */ if (master_cl) - *cl = *master_cl; + memcpy(cl->bits, master_cl->bits, OVS_CT_LABELS_LEN); if (have_mask) { u32 *dst = (u32 *)cl->bits; |