Re: [PATCH] drivers: rtc: handle OTF clock changes

From: Dan Carpenter

Date: Fri Aug 07 2026 - 09:11:30 EST


Hi Elad,

kernel test robot noticed the following build warnings:

https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Elad-Nachman/drivers-rtc-handle-OTF-clock-changes/20260806-231215
base: https://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git rtc-next
patch link: https://lore.kernel.org/r/20260624123103.3523728-1-enachman%40marvell.com
patch subject: [PATCH] drivers: rtc: handle OTF clock changes
config: i386-randconfig-141 (https://download.01.org/0day-ci/archive/20260807/202608072059.hZ2oY5u0-lkp@xxxxxxxxx/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
smatch: v0.5.0-9187-g5189e3fb

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Reported-by: Dan Carpenter <error27@xxxxxxxxx>
| Closes: https://lore.kernel.org/r/202608072059.hZ2oY5u0-lkp@xxxxxxxxx/

smatch warnings:
drivers/rtc/interface.c:163 rtc_set_time() warn: variable dereferenced before check 'rtc' (see line 135)

vim +/rtc +163 drivers/rtc/interface.c

ab6a2d70d18edc David Brownell 2007-05-08 126 int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm)
0c86edc0d49706 Alessandro Zummo 2006-03-27 127 {
7e7c005b4b1f1f Alexandre Belloni 2019-10-21 128 int err, uie;
37b82b16c5f104 Elad Nachman 2026-06-24 129 struct rtc_time new_tm;
0c86edc0d49706 Alessandro Zummo 2006-03-27 130
0c86edc0d49706 Alessandro Zummo 2006-03-27 131 err = rtc_valid_tm(tm);
0c86edc0d49706 Alessandro Zummo 2006-03-27 132 if (err != 0)
0c86edc0d49706 Alessandro Zummo 2006-03-27 133 return err;
0c86edc0d49706 Alessandro Zummo 2006-03-27 134
4c4e5df1f346f7 Baolin Wang 2018-01-08 @135 err = rtc_valid_range(rtc, tm);
4c4e5df1f346f7 Baolin Wang 2018-01-08 136 if (err)
4c4e5df1f346f7 Baolin Wang 2018-01-08 137 return err;
71db049e7355f3 Alexandre Belloni 2018-02-17 138
989515647e7832 Baolin Wang 2018-01-08 139 rtc_subtract_offset(rtc, tm);
989515647e7832 Baolin Wang 2018-01-08 140
7e7c005b4b1f1f Alexandre Belloni 2019-10-21 141 #ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL
7e7c005b4b1f1f Alexandre Belloni 2019-10-21 142 uie = rtc->uie_rtctimer.enabled || rtc->uie_irq_active;
7e7c005b4b1f1f Alexandre Belloni 2019-10-21 143 #else
7e7c005b4b1f1f Alexandre Belloni 2019-10-21 144 uie = rtc->uie_rtctimer.enabled;
7e7c005b4b1f1f Alexandre Belloni 2019-10-21 145 #endif
7e7c005b4b1f1f Alexandre Belloni 2019-10-21 146 if (uie) {
7e7c005b4b1f1f Alexandre Belloni 2019-10-21 147 err = rtc_update_irq_enable(rtc, 0);
7e7c005b4b1f1f Alexandre Belloni 2019-10-21 148 if (err)
7e7c005b4b1f1f Alexandre Belloni 2019-10-21 149 return err;
7e7c005b4b1f1f Alexandre Belloni 2019-10-21 150 }
7e7c005b4b1f1f Alexandre Belloni 2019-10-21 151
0c86edc0d49706 Alessandro Zummo 2006-03-27 152 err = mutex_lock_interruptible(&rtc->ops_lock);
0c86edc0d49706 Alessandro Zummo 2006-03-27 153 if (err)
b68bb2632453a9 David Brownell 2008-07-29 154 return err;
0c86edc0d49706 Alessandro Zummo 2006-03-27 155
0c86edc0d49706 Alessandro Zummo 2006-03-27 156 if (!rtc->ops)
0c86edc0d49706 Alessandro Zummo 2006-03-27 157 err = -ENODEV;
bbccf83f6c4e1a Alessandro Zummo 2009-01-06 158 else if (rtc->ops->set_time)
cd9662094edf41 David Brownell 2007-05-08 159 err = rtc->ops->set_time(rtc->dev.parent, tm);
606cc43c720bde Alexandre Belloni 2019-03-20 160 else
bbccf83f6c4e1a Alessandro Zummo 2009-01-06 161 err = -EINVAL;
0c86edc0d49706 Alessandro Zummo 2006-03-27 162
37b82b16c5f104 Elad Nachman 2026-06-24 @163 if (rtc && rtc->ops && rtc->ops->read_time) {
^^^
There is no point in checking "rtc" after we have already dereferenced
it.

37b82b16c5f104 Elad Nachman 2026-06-24 164 if (!rtc->ops->read_time(rtc->dev.parent, &new_tm)) {
37b82b16c5f104 Elad Nachman 2026-06-24 165 pr_debug("new rtc time secs %d mins %d hours %d mday %d mon %d year %d way %d yday %d dst %d\n",
37b82b16c5f104 Elad Nachman 2026-06-24 166 new_tm.tm_sec, new_tm.tm_min,
37b82b16c5f104 Elad Nachman 2026-06-24 167 new_tm.tm_hour, new_tm.tm_mday,
37b82b16c5f104 Elad Nachman 2026-06-24 168 new_tm.tm_mon, new_tm.tm_year,
37b82b16c5f104 Elad Nachman 2026-06-24 169 new_tm.tm_wday, new_tm.tm_yday,
37b82b16c5f104 Elad Nachman 2026-06-24 170 new_tm.tm_isdst);
37b82b16c5f104 Elad Nachman 2026-06-24 171 }
37b82b16c5f104 Elad Nachman 2026-06-24 172 }
37b82b16c5f104 Elad Nachman 2026-06-24 173
14d0e347ea2db5 Zoran Markovic 2013-06-26 174 pm_stay_awake(rtc->dev.parent);
0c86edc0d49706 Alessandro Zummo 2006-03-27 175 mutex_unlock(&rtc->ops_lock);
5f9679d29c7959 NeilBrown 2011-12-09 176 /* A timer might have just expired */
5f9679d29c7959 NeilBrown 2011-12-09 177 schedule_work(&rtc->irqwork);
29a1f599c0cc37 Baolin Wang 2017-12-14 178
7e7c005b4b1f1f Alexandre Belloni 2019-10-21 179 if (uie) {
7e7c005b4b1f1f Alexandre Belloni 2019-10-21 180 err = rtc_update_irq_enable(rtc, 1);
7e7c005b4b1f1f Alexandre Belloni 2019-10-21 181 if (err)
7e7c005b4b1f1f Alexandre Belloni 2019-10-21 182 return err;
7e7c005b4b1f1f Alexandre Belloni 2019-10-21 183 }
7e7c005b4b1f1f Alexandre Belloni 2019-10-21 184
29a1f599c0cc37 Baolin Wang 2017-12-14 185 trace_rtc_set_time(rtc_tm_to_time64(tm), err);
0c86edc0d49706 Alessandro Zummo 2006-03-27 186 return err;
0c86edc0d49706 Alessandro Zummo 2006-03-27 187 }

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki