Patch "media: bt878: do not schedule tasklet when it is not setup" has been added to the 5.12-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    media: bt878: do not schedule tasklet when it is not setup

to the 5.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:
     media-bt878-do-not-schedule-tasklet-when-it-is-not-s.patch
and it can be found in the queue-5.12 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 5dcd4b2c0b7303854e84b894c2c745bc3d39a355
Author: Tong Zhang <ztong0001@xxxxxxxxx>
Date:   Thu Apr 29 00:12:26 2021 +0200

    media: bt878: do not schedule tasklet when it is not setup
    
    [ Upstream commit a3a54bf4bddaecda8b5767209cfc703f0be2841d ]
    
    There is a problem with the tasklet in bt878. bt->tasklet is set by
    dvb-bt8xx.ko, and bt878.ko can be loaded independently.
    In this case if interrupt comes it may cause null-ptr-dereference.
    To solve this issue, we check if the tasklet is actually set before
    calling tasklet_schedule.
    
    [    1.750438] bt878(0): irq FDSR FBUS risc_pc=
    [    1.750728] BUG: kernel NULL pointer dereference, address: 0000000000000000
    [    1.752969] RIP: 0010:0x0
    [    1.757526] Call Trace:
    [    1.757659]  <IRQ>
    [    1.757770]  tasklet_action_common.isra.0+0x107/0x110
    [    1.758041]  tasklet_action+0x22/0x30
    [    1.758237]  __do_softirq+0xe0/0x29b
    [    1.758430]  irq_exit_rcu+0xa4/0xb0
    [    1.758618]  common_interrupt+0x8d/0xa0
    [    1.758824]  </IRQ>
    
    Signed-off-by: Tong Zhang <ztong0001@xxxxxxxxx>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/media/pci/bt8xx/bt878.c b/drivers/media/pci/bt8xx/bt878.c
index 78dd35c9b65d..7ca309121fb5 100644
--- a/drivers/media/pci/bt8xx/bt878.c
+++ b/drivers/media/pci/bt8xx/bt878.c
@@ -300,7 +300,8 @@ static irqreturn_t bt878_irq(int irq, void *dev_id)
 		}
 		if (astat & BT878_ARISCI) {
 			bt->finished_block = (stat & BT878_ARISCS) >> 28;
-			tasklet_schedule(&bt->tasklet);
+			if (bt->tasklet.callback)
+				tasklet_schedule(&bt->tasklet);
 			break;
 		}
 		count++;



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux