diff --git a/kernel.spec b/kernel.spec index 027d9b6a7..6587971f5 100644 --- a/kernel.spec +++ b/kernel.spec @@ -605,6 +605,9 @@ Patch839: drm-i915-Acquire-audio-powerwell-for-HD-Audio-regist.patch #rhbz 1365686 Patch840: 0001-mm-rmap-fix-false-positive-VM_BUG-in-page_add_file_r.patch +#rhbz 1361414 +Patch841: openstack_fix.patch + # END OF PATCH DEFINITIONS %endif @@ -2139,6 +2142,9 @@ fi # # %changelog +* Thu Aug 11 2016 Laura Abbott +- Fix for crash seen with open stack (rhbz 1361414) + * Thu Aug 11 2016 Peter Robinson - Minor ARM config updates - Disable long running watchdog in VM patch (in theory fixed) diff --git a/openstack_fix.patch b/openstack_fix.patch new file mode 100644 index 000000000..a967c350e --- /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 +