mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	rtc: pl031: fix rtc features null pointer dereference
When there is no interrupt line, rtc alarm feature is disabled.
The clearing of the alarm feature bit was being done prior to allocations
of ldata->rtc device, resulting in a null pointer dereference.
Clear RTC_FEATURE_ALARM after the rtc device is allocated.
Fixes: d9b0dd54a1 ("rtc: pl031: use RTC_FEATURE_ALARM")
Cc: stable@vger.kernel.org
Signed-off-by: Ali Pouladi <quic_apouladi@quicinc.com>
Signed-off-by: Elliot Berman <quic_eberman@quicinc.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Link: https://lore.kernel.org/r/20220225161924.274141-1-quic_eberman@quicinc.com
			
			
This commit is contained in:
		
							parent
							
								
									811f555927
								
							
						
					
					
						commit
						ea6af39f3d
					
				
					 1 changed files with 3 additions and 3 deletions
				
			
		| 
						 | 
					@ -350,9 +350,6 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!adev->irq[0])
 | 
					 | 
				
			||||||
		clear_bit(RTC_FEATURE_ALARM, ldata->rtc->features);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	device_init_wakeup(&adev->dev, true);
 | 
						device_init_wakeup(&adev->dev, true);
 | 
				
			||||||
	ldata->rtc = devm_rtc_allocate_device(&adev->dev);
 | 
						ldata->rtc = devm_rtc_allocate_device(&adev->dev);
 | 
				
			||||||
	if (IS_ERR(ldata->rtc)) {
 | 
						if (IS_ERR(ldata->rtc)) {
 | 
				
			||||||
| 
						 | 
					@ -360,6 +357,9 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!adev->irq[0])
 | 
				
			||||||
 | 
							clear_bit(RTC_FEATURE_ALARM, ldata->rtc->features);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ldata->rtc->ops = ops;
 | 
						ldata->rtc->ops = ops;
 | 
				
			||||||
	ldata->rtc->range_min = vendor->range_min;
 | 
						ldata->rtc->range_min = vendor->range_min;
 | 
				
			||||||
	ldata->rtc->range_max = vendor->range_max;
 | 
						ldata->rtc->range_max = vendor->range_max;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue