| From f5bf43f041f9356412aacdad9350c3470f7c2861 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 8 Feb 2022 11:29:07 -0500 |
| Subject: rtc: pcf2127: fix bug when reading alarm registers |
| |
| From: Hugo Villeneuve <hvilleneuve@dimonoff.com> |
| |
| [ Upstream commit 73ce05302007eece23a6acb7dc124c92a2209087 ] |
| |
| The first bug is that reading the 5 alarm registers results in a read |
| operation of 20 bytes. The reason is because the destination buffer is |
| defined as an array of "unsigned int", and we use the sizeof() |
| operator on this array to define the bulk read count. |
| |
| The second bug is that the read value is invalid, because we are |
| indexing the destination buffer as integers (4 bytes), instead of |
| indexing it as u8. |
| |
| Changing the destination buffer type to u8 fixes both problems. |
| |
| Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com> |
| Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> |
| Link: https://lore.kernel.org/r/20220208162908.3182581-1-hugo@hugovil.com |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/rtc/rtc-pcf2127.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/rtc/rtc-pcf2127.c b/drivers/rtc/rtc-pcf2127.c |
| index 56c58b055dff..43f801107095 100644 |
| --- a/drivers/rtc/rtc-pcf2127.c |
| +++ b/drivers/rtc/rtc-pcf2127.c |
| @@ -374,7 +374,8 @@ static int pcf2127_watchdog_init(struct device *dev, struct pcf2127 *pcf2127) |
| static int pcf2127_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) |
| { |
| struct pcf2127 *pcf2127 = dev_get_drvdata(dev); |
| - unsigned int buf[5], ctrl2; |
| + u8 buf[5]; |
| + unsigned int ctrl2; |
| int ret; |
| |
| ret = regmap_read(pcf2127->regmap, PCF2127_REG_CTRL2, &ctrl2); |
| -- |
| 2.35.1 |
| |