Patch "[media] saa7164: fix double fetch PCIe access condition" has been added to the 4.12-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
[media] saa7164: fix double fetch PCIe access condition
to the 4.12-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
saa7164-fix-double-fetch-pcie-access-condition.patch
and it can be found in the queue-4.12 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
6fb05e0dd32e566facb96ea61a48c7488daa5ac3Mon Sep 17 00:00:00 2001
From: Steven Toth <[email protected]>
Date: Tue, 6 Jun 2017 09:30:27 -0300
Subject: [media] saa7164: fix double fetch PCIe access condition
From: Steven Toth <[email protected]>
commit 6fb05e0dd32e566facb96ea61a48c7488daa5ac3 upstream.
Avoid a double fetch by reusing the values from the prior transfer.
Originally reported via https://bugzilla.kernel.org/show_bug.cgi?id=195559
Thanks to Pengfei Wang <[email protected]> for reporting.
--- drivers/media/pci/saa7164/saa7164-bus.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-)
drivers/media/pci/saa7164/saa7164-bus.c +1 -12
@@ -389,11 +389,11 @@ int saa7164_bus_get(struct saa7164_dev * msg_tmp.size =le16_to_cpu ((__force __le16 )msg_tmp.size); msg_tmp.command =le32_to_cpu ((__force __le32 )msg_tmp.command); msg_tmp.controlselector =le16_to_cpu ((__force __le16 )msg_tmp.controlselector); +memcpy (msg, &msg_tmp,sizeof (*msg));/* No need to update the read positions, because this was a peek */ /* If the caller specifically want to peek, return */ if (peekonly) { -memcpy (msg, &msg_tmp,sizeof (*msg)); goto peekout; }
@@ -438,21 +438,15 @@ int saa7164_bus_get(struct saa7164_dev * space_rem = bus->m_dwSizeGetRing - curr_grp;if (space_rem <sizeof (*msg)) { -/* msg wraps around the ring */ -memcpy_fromio (msg, bus->m_pdwGetRing + curr_grp, space_rem); -memcpy_fromio ((u8 *)msg + space_rem, bus->m_pdwGetRing, -sizeof (*msg) - space_rem);if (buf)memcpy_fromio (buf, bus->m_pdwGetRing +sizeof (*msg) - space_rem, buf_size); }else if (space_rem ==sizeof (*msg)) { -memcpy_fromio (msg, bus->m_pdwGetRing + curr_grp,sizeof (*msg));if (buf)memcpy_fromio (buf, bus->m_pdwGetRing, buf_size); }else {/* Additional data wraps around the ring */ -memcpy_fromio (msg, bus->m_pdwGetRing + curr_grp,sizeof (*msg));if (buf) {memcpy_fromio (buf, bus->m_pdwGetRing + curr_grp +sizeof (*msg), space_rem -sizeof (*msg));
@@ -465,15 +459,10 @@ int saa7164_bus_get(struct saa7164_dev * }else {/* No wrapping */ -memcpy_fromio (msg, bus->m_pdwGetRing + curr_grp,sizeof (*msg));if (buf)memcpy_fromio (buf, bus->m_pdwGetRing + curr_grp +sizeof (*msg), buf_size); } -/* Convert from little endian to CPU */ - msg->size =le16_to_cpu ((__force __le16 )msg->size); - msg->command =le32_to_cpu ((__force __le32 )msg->command); - msg->controlselector =le16_to_cpu ((__force __le16 )msg->controlselector);/* Update the read positions, adjusting the ring */ saa7164_writel (bus->m_dwGetReadPos, new_grp);
Patches currently in stable-queue which might be from [email protected] are
queue-4.12/saa7164-fix-double-fetch-pcie-access-condition.patch