Showing error 1812

User: Jiri Slaby
Error type: Invalid Pointer Dereference
Error type description: A pointer which is invalid is being dereferenced
File location: drivers/media/video/saa7134/saa7134-input.c
Line in file: 130
Project: Linux Kernel
Project version: 2.6.28
Confirmation: Fixed by 129c34d8fce443d1c43d32637abbab8433504497
Tools: Smatch (1.59)
Entered: 2013-09-11 08:47:26 UTC


Source:

100        if (ir->polling) {
101                if ((ir->mask_keydown  &&  (0 != (gpio & ir->mask_keydown))) ||
102                    (ir->mask_keyup    &&  (0 == (gpio & ir->mask_keyup)))) {
103                        ir_input_keydown(ir->dev, &ir->ir, data, data);
104                } else {
105                        ir_input_nokey(ir->dev, &ir->ir);
106                }
107        }
108        else {        /* IRQ driven mode - handle key press and release in one go */
109                if ((ir->mask_keydown  &&  (0 != (gpio & ir->mask_keydown))) ||
110                    (ir->mask_keyup    &&  (0 == (gpio & ir->mask_keyup)))) {
111                        ir_input_keydown(ir->dev, &ir->ir, data, data);
112                        ir_input_nokey(ir->dev, &ir->ir);
113                }
114        }
115
116        return 0;
117}
118
119/* --------------------- Chip specific I2C key builders ----------------- */
120
121static int get_key_msi_tvanywhere_plus(struct IR_i2c *ir, u32 *ir_key,
122                                       u32 *ir_raw)
123{
124        unsigned char b;
125        int gpio;
126
127        /* <dev> is needed to access GPIO. Used by the saa_readl macro. */
128        struct saa7134_dev *dev = ir->c.adapter->algo_data;
129        if (dev == NULL) {
130                dprintk("get_key_msi_tvanywhere_plus: "
131                        "gir->c.adapter->algo_data is NULL!\n");
132                return -EIO;
133        }
134
135        /* rising SAA7134_GPIO_GPRESCAN reads the status */
136
137        saa_clearb(SAA7134_GPIO_GPMODE3, SAA7134_GPIO_GPRESCAN);
138        saa_setb(SAA7134_GPIO_GPMODE3, SAA7134_GPIO_GPRESCAN);
139
140        gpio = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2);
Show full sources