Fix virtio devices and crda
This commit is contained in:
parent
d99a489b14
commit
a4dbe86b01
|
@ -0,0 +1,55 @@
|
|||
From: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||
Date: 2017-03-22 15:08:33
|
||||
Subject: [PATCH 4.11] genetlink: fix counting regression on ctrl_dumpfamily()
|
||||
|
||||
Commit 2ae0f17df1cd ("genetlink: use idr to track families") replaced
|
||||
|
||||
if (++n < fams_to_skip)
|
||||
continue;
|
||||
into:
|
||||
|
||||
if (n++ < fams_to_skip)
|
||||
continue;
|
||||
|
||||
This subtle change cause that on retry ctrl_dumpfamily() call we omit
|
||||
one family that failed to do ctrl_fill_info() on previous call, because
|
||||
cb->args[0] = n number counts also family that failed to do
|
||||
ctrl_fill_info().
|
||||
|
||||
Patch fixes the problem and avoid confusion in the future just decrease
|
||||
n counter when ctrl_fill_info() fail.
|
||||
|
||||
User visible problem caused by this bug is failure to get access to
|
||||
some genetlink family i.e. nl80211. However problem is reproducible
|
||||
only if number of registered genetlink families is big enough to
|
||||
cause second call of ctrl_dumpfamily().
|
||||
|
||||
Cc: Xose Vazquez Perez <xose.vazquez@gmail.com>
|
||||
Cc: Larry Finger <Larry.Finger@lwfinger.net>
|
||||
Cc: Johannes Berg <johannes@sipsolutions.net>
|
||||
Fixes: 2ae0f17df1cd ("genetlink: use idr to track families")
|
||||
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||
---
|
||||
Dave, please also target this for 4.10+ -stable.
|
||||
|
||||
net/netlink/genetlink.c | 4 +++-
|
||||
1 files changed, 3 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c
|
||||
index fb6e10f..92e0981 100644
|
||||
--- a/net/netlink/genetlink.c
|
||||
+++ b/net/netlink/genetlink.c
|
||||
@@ -783,8 +783,10 @@ static int ctrl_dumpfamily(struct sk_buff *skb, struct netlink_callback *cb)
|
||||
|
||||
if (ctrl_fill_info(rt, NETLINK_CB(cb->skb).portid,
|
||||
cb->nlh->nlmsg_seq, NLM_F_MULTI,
|
||||
- skb, CTRL_CMD_NEWFAMILY) < 0)
|
||||
+ skb, CTRL_CMD_NEWFAMILY) < 0) {
|
||||
+ n--;
|
||||
break;
|
||||
+ }
|
||||
}
|
||||
|
||||
cb->args[0] = n;
|
||||
--
|
||||
1.7.1
|
12
kernel.spec
12
kernel.spec
|
@ -42,7 +42,7 @@ Summary: The Linux kernel
|
|||
# For non-released -rc kernels, this will be appended after the rcX and
|
||||
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
|
||||
#
|
||||
%global baserelease 1
|
||||
%global baserelease 2
|
||||
%global fedora_build %{baserelease}
|
||||
|
||||
# base_sublevel is the kernel version we're starting with and patching
|
||||
|
@ -603,6 +603,12 @@ Patch665: netfilter-x_tables-deal-with-bogus-nextoffset-values.patch
|
|||
# grabbed from mailing list
|
||||
Patch667: v3-Revert-tty-serial-pl011-add-ttyAMA-for-matching-pl011-console.patch
|
||||
|
||||
# Fix crda rhbz 1422247
|
||||
Patch668: genetlink-fix-counting-regression-on-ctrl_dumpfamily.patch
|
||||
|
||||
# Fix virtio devices rhbz 1430297
|
||||
Patch669: virtio_pci-fix-out-of-bound-access-for-msix_names.patch
|
||||
|
||||
# END OF PATCH DEFINITIONS
|
||||
|
||||
%endif
|
||||
|
@ -2167,6 +2173,10 @@ fi
|
|||
#
|
||||
#
|
||||
%changelog
|
||||
* Thu Mar 23 2017 Justin M. Forbes <jforbes@fedoraproject.org> 4.11.0-0.rc3.git0.2
|
||||
- Fix virtio devices (rhbz 1430297)
|
||||
- Fix crda (rhbz 1422247)
|
||||
|
||||
* Mon Mar 20 2017 Laura Abbott <labbott@fedoraproject.org> - 4.11.0-0.rc3.git0.1
|
||||
- Linux v4.11-rc3
|
||||
- Fix for debuginfo conflicts (rhbz 1431296)
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
From: Jason Wang <jasowang@redhat.com>
|
||||
Date: Thu, 23 Mar 2017 13:07:16 +0800
|
||||
Subject: [PATCH] virtio_pci: fix out of bound access for msix_names
|
||||
|
||||
---
|
||||
drivers/virtio/virtio_pci_common.c | 9 +++++----
|
||||
1 file changed, 5 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
|
||||
index df548a6..5905349 100644
|
||||
--- a/drivers/virtio/virtio_pci_common.c
|
||||
+++ b/drivers/virtio/virtio_pci_common.c
|
||||
@@ -147,7 +147,7 @@ static int vp_find_vqs_msix(struct virtio_device *vdev, unsigned nvqs,
|
||||
{
|
||||
struct virtio_pci_device *vp_dev = to_vp_device(vdev);
|
||||
const char *name = dev_name(&vp_dev->vdev.dev);
|
||||
- int i, err = -ENOMEM, allocated_vectors, nvectors;
|
||||
+ int i, j, err = -ENOMEM, allocated_vectors, nvectors;
|
||||
unsigned flags = PCI_IRQ_MSIX;
|
||||
bool shared = false;
|
||||
u16 msix_vec;
|
||||
@@ -212,7 +212,7 @@ static int vp_find_vqs_msix(struct virtio_device *vdev, unsigned nvqs,
|
||||
if (!vp_dev->msix_vector_map)
|
||||
goto out_disable_config_irq;
|
||||
|
||||
- allocated_vectors = 1; /* vector 0 is the config interrupt */
|
||||
+ allocated_vectors = j = 1; /* vector 0 is the config interrupt */
|
||||
for (i = 0; i < nvqs; ++i) {
|
||||
if (!names[i]) {
|
||||
vqs[i] = NULL;
|
||||
@@ -236,18 +236,19 @@ static int vp_find_vqs_msix(struct virtio_device *vdev, unsigned nvqs,
|
||||
continue;
|
||||
}
|
||||
|
||||
- snprintf(vp_dev->msix_names[i + 1],
|
||||
+ snprintf(vp_dev->msix_names[j],
|
||||
sizeof(*vp_dev->msix_names), "%s-%s",
|
||||
dev_name(&vp_dev->vdev.dev), names[i]);
|
||||
err = request_irq(pci_irq_vector(vp_dev->pci_dev, msix_vec),
|
||||
vring_interrupt, IRQF_SHARED,
|
||||
- vp_dev->msix_names[i + 1], vqs[i]);
|
||||
+ vp_dev->msix_names[j], vqs[i]);
|
||||
if (err) {
|
||||
/* don't free this irq on error */
|
||||
vp_dev->msix_vector_map[i] = VIRTIO_MSI_NO_VECTOR;
|
||||
goto out_remove_vqs;
|
||||
}
|
||||
vp_dev->msix_vector_map[i] = msix_vec;
|
||||
+ j++;
|
||||
|
||||
/*
|
||||
* Use a different vector for each queue if they are available,
|
||||
--
|
||||
2.7.4
|
||||
|
||||
|
Loading…
Reference in New Issue