diff --git a/kernel.spec b/kernel.spec index 3b905cb..ed84000 100644 --- a/kernel.spec +++ b/kernel.spec @@ -652,6 +652,9 @@ Patch841: audit-fix-a-double-fetch-in-audit_log_single_execve_arg.patch Patch842: kvm-ppc-Book3S-HV-Pull-out-TM-state-save.patch Patch843: kvm-ppc-Book3S-HV-Save-restore-TM-state.patch +#rhbz 1361414 +Patch844: openstack_fix.patch + # END OF PATCH DEFINITIONS %endif @@ -2177,6 +2180,9 @@ fi # # %changelog +* Thu Aug 11 2016 Laura Abbott +- Fix for crash seen with Open Stack (rhbz 1361414) + * Wed Aug 10 2016 Laura Abbott - 4.6.6-300 - Linux v4.6.6 diff --git a/openstack_fix.patch b/openstack_fix.patch new file mode 100644 index 0000000..a967c35 --- /dev/null +++ b/openstack_fix.patch @@ -0,0 +1,53 @@ +From 5ef9f289c4e698054e5687edb54f0da3cdc9173a Mon Sep 17 00:00:00 2001 +From: Ian Wienand +Date: Wed, 3 Aug 2016 15:44:57 +1000 +Subject: OVS: Ignore negative headroom value + +net_device->ndo_set_rx_headroom (introduced in +871b642adebe300be2e50aa5f65a418510f636ec) says + + "Setting a negtaive value reset the rx headroom + to the default value". + +It seems that the OVS implementation in +3a927bc7cf9d0fbe8f4a8189dd5f8440228f64e7 overlooked this and sets +dev->needed_headroom unconditionally. + +This doesn't have an immediate effect, but can mess up later +LL_RESERVED_SPACE calculations, such as done in +net/ipv6/mcast.c:mld_newpack. For reference, this issue was found +from a skb_panic raised there after the length calculations had given +the wrong result. + +Note the other current users of this interface +(drivers/net/tun.c:tun_set_headroom and +drivers/net/veth.c:veth_set_rx_headroom) are both checking this +correctly thus need no modification. + +Thanks to Ben for some pointers from the crash dumps! + +Cc: Benjamin Poirier +Cc: Paolo Abeni +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1361414 +Signed-off-by: Ian Wienand +Signed-off-by: David S. Miller +--- + net/openvswitch/vport-internal_dev.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c +index 434e04c..95c3614 100644 +--- a/net/openvswitch/vport-internal_dev.c ++++ b/net/openvswitch/vport-internal_dev.c +@@ -140,7 +140,7 @@ internal_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats) + + static void internal_set_rx_headroom(struct net_device *dev, int new_hr) + { +- dev->needed_headroom = new_hr; ++ dev->needed_headroom = new_hr < 0 ? 0 : new_hr; + } + + static const struct net_device_ops internal_dev_netdev_ops = { +-- +cgit v0.12 +