forked from mirrors/linux
		
	gpiolib: fix filtering out unwanted events
GPIOEVENT_REQUEST_BOTH_EDGES is not a single flag, but a binary OR of
GPIOEVENT_REQUEST_RISING_EDGE and GPIOEVENT_REQUEST_FALLING_EDGE.
The expression 'le->eflags & GPIOEVENT_REQUEST_BOTH_EDGES' we'll get
evaluated to true even if only one event type was requested.
Fix it by checking both RISING & FALLING flags explicitly.
Cc: stable@vger.kernel.org
Fixes: 61f922db72 ("gpio: userspace ABI for reading GPIO line events")
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
			
			
This commit is contained in:
		
							parent
							
								
									c0bc126f97
								
							
						
					
					
						commit
						ad537b8225
					
				
					 1 changed files with 2 additions and 1 deletions
				
			
		|  | @ -708,7 +708,8 @@ static irqreturn_t lineevent_irq_thread(int irq, void *p) | |||
| 
 | ||||
| 	ge.timestamp = ktime_get_real_ns(); | ||||
| 
 | ||||
| 	if (le->eflags & GPIOEVENT_REQUEST_BOTH_EDGES) { | ||||
| 	if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE | ||||
| 	    && le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE) { | ||||
| 		int level = gpiod_get_value_cansleep(le->desc); | ||||
| 
 | ||||
| 		if (level) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Bartosz Golaszewski
						Bartosz Golaszewski