openvswitch: Pad OVS_PACKET_ATTR_PACKET if linear copy was performed
While the zerocopy method is correctly omitted if user space does not support unaligned Netlink messages. The attribute is still not padded correctly as skb_zerocopy() will not ensure padding and the attribute size is no longer pre calculated though nla_reserve() which ensured padding previously. This patch applies appropriate padding if a linear data copy was performed in skb_zerocopy(). Signed-off-by: Thomas Graf <tgraf@suug.ch> Acked-by: Zoltan Kiss <zoltan.kiss@citrix.com> Signed-off-by: Jesse Gross <jesse@nicira.com>
This commit is contained in:
parent
bce3ea81d5
commit
aea0bb4f8e
|
@ -466,6 +466,14 @@ static int queue_userspace_packet(struct datapath *dp, struct sk_buff *skb,
|
|||
|
||||
skb_zerocopy(user_skb, skb, skb->len, hlen);
|
||||
|
||||
/* Pad OVS_PACKET_ATTR_PACKET if linear copy was performed */
|
||||
if (!(dp->user_features & OVS_DP_F_UNALIGNED)) {
|
||||
size_t plen = NLA_ALIGN(user_skb->len) - user_skb->len;
|
||||
|
||||
if (plen > 0)
|
||||
memset(skb_put(user_skb, plen), 0, plen);
|
||||
}
|
||||
|
||||
((struct nlmsghdr *) user_skb->data)->nlmsg_len = user_skb->len;
|
||||
|
||||
err = genlmsg_unicast(ovs_dp_get_net(dp), user_skb, upcall_info->portid);
|
||||
|
|
Loading…
Reference in a new issue