aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergey Vlasov <vsu@altlinux.ru>2006-04-07 10:04:56 -0300
committerMauro Carvalho Chehab <mchehab@infradead.org>2006-05-12 19:54:41 -0300
commit7a766f9ddd74b50d6069f054a3004ece0439f5c1 (patch)
treedb88a76df1cf9dade1804bba8f1175a6556939e5
parenta7286033f951ebc78527e63f335516ea2f95e142 (diff)
downloadkernel_samsung_smdk4412-7a766f9ddd74b50d6069f054a3004ece0439f5c1.tar.gz
kernel_samsung_smdk4412-7a766f9ddd74b50d6069f054a3004ece0439f5c1.tar.bz2
kernel_samsung_smdk4412-7a766f9ddd74b50d6069f054a3004ece0439f5c1.zip
V4L/DVB (3738): Saa7134: Fix oops with disable_ir=1
When disable_ir=1 parameter is used, or when saa7134_input_init1() fails for any other reason, dev->remote will remain NULL, and the driver will oops in saa7134_hwinit2(). Therefore dev->remote must be checked before dereferencing. Signed-off-by: Sergey Vlasov <vsu@altlinux.ru> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
-rw-r--r--drivers/media/video/saa7134/saa7134-core.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/media/video/saa7134/saa7134-core.c b/drivers/media/video/saa7134/saa7134-core.c
index 13de05532e0..f0c2111f14a 100644
--- a/drivers/media/video/saa7134/saa7134-core.c
+++ b/drivers/media/video/saa7134/saa7134-core.c
@@ -548,6 +548,8 @@ static irqreturn_t saa7134_irq(int irq, void *dev_id, struct pt_regs *regs)
if (report & SAA7134_IRQ_REPORT_GPIO16) {
switch (dev->has_remote) {
case SAA7134_REMOTE_GPIO:
+ if (!dev->remote)
+ break;
if (dev->remote->mask_keydown & 0x10000) {
saa7134_input_irq(dev);
}
@@ -564,6 +566,8 @@ static irqreturn_t saa7134_irq(int irq, void *dev_id, struct pt_regs *regs)
if (report & SAA7134_IRQ_REPORT_GPIO18) {
switch (dev->has_remote) {
case SAA7134_REMOTE_GPIO:
+ if (!dev->remote)
+ break;
if ((dev->remote->mask_keydown & 0x40000) ||
(dev->remote->mask_keyup & 0x40000)) {
saa7134_input_irq(dev);
@@ -676,7 +680,7 @@ static int saa7134_hwinit2(struct saa7134_dev *dev)
SAA7134_IRQ2_INTE_PE |
SAA7134_IRQ2_INTE_AR;
- if (dev->has_remote == SAA7134_REMOTE_GPIO) {
+ if (dev->has_remote == SAA7134_REMOTE_GPIO && dev->remote) {
if (dev->remote->mask_keydown & 0x10000)
irq2_mask |= SAA7134_IRQ2_INTE_GPIO16;
else if (dev->remote->mask_keydown & 0x40000)