In debiirq(), data_0 stores the value of data[0], but it can be dropped by compiler optimization. Thus, data[0] is read through READ_ONCE(). Fixes: 6499a0db9b0f ("media: pci: ttpci: av7110: fix possible buffer overflow caused by bad DMA value in debiirq()") Reported-by: Pavel Machek <pavel@xxxxxx> Signed-off-by: Jia-Ju Bai <baijiaju@xxxxxxxxxxxxxxx> --- drivers/media/pci/ttpci/av7110.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/media/pci/ttpci/av7110.c b/drivers/media/pci/ttpci/av7110.c index bf36b1e22b63..f7d098d5b198 100644 --- a/drivers/media/pci/ttpci/av7110.c +++ b/drivers/media/pci/ttpci/av7110.c @@ -406,7 +406,7 @@ static void debiirq(unsigned long cookie) case DATA_CI_GET: { u8 *data = av7110->debi_virt; - u8 data_0 = data[0]; + u8 data_0 = READ_ONCE(data[0]); if (data_0 < 2 && data[2] == 0xff) { int flags = 0; -- 2.17.1