Skip to contentSkip to conversation

kernel/time/sched_clock.c:219:13: sparse: sparse: dereference of noderef expression

PATCH Superseded kernel test robot 4 participants 6 messages Jan 13 – Jan 14

lore
Share & tools
lore

kernel test robot

author build bot
#0 lore raw
tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   b71e635feefc852405b14620a7fc58c4c80c0f73
commit: 04257da0c99c9d4ff7c5bb93046482e1f7d34938 hrtimers: Make callback function pointer private
date:   9 months ago
config: arm64-randconfig-r121-20260113 (https://download.01.org/0day-ci/archive/20260113/[email protected]/config)
compiler: aarch64-linux-gcc (GCC) 8.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260113/[email protected]/reproduce)

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 <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

sparse warnings: (new ones prefixed by >>)

>> kernel/time/sched_clock.c:219:13: sparse: sparse: dereference of noderef expression

vim +219 kernel/time/sched_clock.c

112f38a4a31668 arch/arm/kernel/sched_clock.c Russell King      2010-12-15  176  
32fea568aec5b7 kernel/time/sched_clock.c     Ingo Molnar       2015-03-27  177  void __init
32fea568aec5b7 kernel/time/sched_clock.c     Ingo Molnar       2015-03-27  178  sched_clock_register(u64 (*read)(void), int bits, unsigned long rate)
112f38a4a31668 arch/arm/kernel/sched_clock.c Russell King      2010-12-15  179  {
5ae8aabeaec3fe kernel/time/sched_clock.c     Stephen Boyd      2014-02-17  180  	u64 res, wrap, new_mask, new_epoch, cyc, ns;
5ae8aabeaec3fe kernel/time/sched_clock.c     Stephen Boyd      2014-02-17  181  	u32 new_mult, new_shift;
2707745533d6d3 kernel/time/sched_clock.c     Paul Cercueil     2020-01-07  182  	unsigned long r, flags;
112f38a4a31668 arch/arm/kernel/sched_clock.c Russell King      2010-12-15  183  	char r_unit;
1809bfa44e1019 kernel/time/sched_clock.c     Daniel Thompson   2015-03-26  184  	struct clock_read_data rd;
112f38a4a31668 arch/arm/kernel/sched_clock.c Russell King      2010-12-15  185  
c115739da801ea arch/arm/kernel/sched_clock.c Rob Herring       2013-02-08  186  	if (cd.rate > rate)
c115739da801ea arch/arm/kernel/sched_clock.c Rob Herring       2013-02-08  187  		return;
c115739da801ea arch/arm/kernel/sched_clock.c Rob Herring       2013-02-08  188  
2707745533d6d3 kernel/time/sched_clock.c     Paul Cercueil     2020-01-07  189  	/* Cannot register a sched_clock with interrupts on */
2707745533d6d3 kernel/time/sched_clock.c     Paul Cercueil     2020-01-07  190  	local_irq_save(flags);
112f38a4a31668 arch/arm/kernel/sched_clock.c Russell King      2010-12-15  191  
32fea568aec5b7 kernel/time/sched_clock.c     Ingo Molnar       2015-03-27  192  	/* Calculate the mult/shift to convert counter ticks to ns. */
5ae8aabeaec3fe kernel/time/sched_clock.c     Stephen Boyd      2014-02-17  193  	clocks_calc_mult_shift(&new_mult, &new_shift, rate, NSEC_PER_SEC, 3600);
5ae8aabeaec3fe kernel/time/sched_clock.c     Stephen Boyd      2014-02-17  194  
5ae8aabeaec3fe kernel/time/sched_clock.c     Stephen Boyd      2014-02-17  195  	new_mask = CLOCKSOURCE_MASK(bits);
8710e914027e4f kernel/time/sched_clock.c     Daniel Thompson   2015-03-26  196  	cd.rate = rate;
5ae8aabeaec3fe kernel/time/sched_clock.c     Stephen Boyd      2014-02-17  197  
32fea568aec5b7 kernel/time/sched_clock.c     Ingo Molnar       2015-03-27  198  	/* Calculate how many nanosecs until we risk wrapping */
fb82fe2fe85887 kernel/time/sched_clock.c     John Stultz       2015-03-11  199  	wrap = clocks_calc_max_nsecs(new_mult, new_shift, 0, new_mask, NULL);
8710e914027e4f kernel/time/sched_clock.c     Daniel Thompson   2015-03-26  200  	cd.wrap_kt = ns_to_ktime(wrap);
5ae8aabeaec3fe kernel/time/sched_clock.c     Stephen Boyd      2014-02-17  201  
1809bfa44e1019 kernel/time/sched_clock.c     Daniel Thompson   2015-03-26  202  	rd = cd.read_data[0];
1809bfa44e1019 kernel/time/sched_clock.c     Daniel Thompson   2015-03-26  203  
32fea568aec5b7 kernel/time/sched_clock.c     Ingo Molnar       2015-03-27  204  	/* Update epoch for new counter and update 'epoch_ns' from old counter*/
5ae8aabeaec3fe kernel/time/sched_clock.c     Stephen Boyd      2014-02-17  205  	new_epoch = read();
13dbeb384d2d3a kernel/time/sched_clock.c     Daniel Thompson   2015-03-26  206  	cyc = cd.actual_read_sched_clock();
32fea568aec5b7 kernel/time/sched_clock.c     Ingo Molnar       2015-03-27  207  	ns = rd.epoch_ns + cyc_to_ns((cyc - rd.epoch_cyc) & rd.sched_clock_mask, rd.mult, rd.shift);
13dbeb384d2d3a kernel/time/sched_clock.c     Daniel Thompson   2015-03-26  208  	cd.actual_read_sched_clock = read;
5ae8aabeaec3fe kernel/time/sched_clock.c     Stephen Boyd      2014-02-17  209  
1809bfa44e1019 kernel/time/sched_clock.c     Daniel Thompson   2015-03-26  210  	rd.read_sched_clock	= read;
1809bfa44e1019 kernel/time/sched_clock.c     Daniel Thompson   2015-03-26  211  	rd.sched_clock_mask	= new_mask;
1809bfa44e1019 kernel/time/sched_clock.c     Daniel Thompson   2015-03-26  212  	rd.mult			= new_mult;
1809bfa44e1019 kernel/time/sched_clock.c     Daniel Thompson   2015-03-26  213  	rd.shift		= new_shift;
1809bfa44e1019 kernel/time/sched_clock.c     Daniel Thompson   2015-03-26  214  	rd.epoch_cyc		= new_epoch;
1809bfa44e1019 kernel/time/sched_clock.c     Daniel Thompson   2015-03-26  215  	rd.epoch_ns		= ns;
32fea568aec5b7 kernel/time/sched_clock.c     Ingo Molnar       2015-03-27  216  
1809bfa44e1019 kernel/time/sched_clock.c     Daniel Thompson   2015-03-26  217  	update_clock_read_data(&rd);
112f38a4a31668 arch/arm/kernel/sched_clock.c Russell King      2010-12-15  218  
1b8955bc5ac575 kernel/time/sched_clock.c     David Engraf      2017-02-17 @219  	if (sched_clock_timer.function != NULL) {
1b8955bc5ac575 kernel/time/sched_clock.c     David Engraf      2017-02-17  220  		/* update timeout for clock wrap */
2c8bd58812ee3d kernel/time/sched_clock.c     Ahmed S. Darwish  2020-03-09  221  		hrtimer_start(&sched_clock_timer, cd.wrap_kt,
2c8bd58812ee3d kernel/time/sched_clock.c     Ahmed S. Darwish  2020-03-09  222  			      HRTIMER_MODE_REL_HARD);
1b8955bc5ac575 kernel/time/sched_clock.c     David Engraf      2017-02-17  223  	}
1b8955bc5ac575 kernel/time/sched_clock.c     David Engraf      2017-02-17  224  
112f38a4a31668 arch/arm/kernel/sched_clock.c Russell King      2010-12-15  225  	r = rate;
112f38a4a31668 arch/arm/kernel/sched_clock.c Russell King      2010-12-15  226  	if (r >= 4000000) {
92067440f1311d kernel/time/sched_clock.c     Maciej W. Rozycki 2022-04-24  227  		r = DIV_ROUND_CLOSEST(r, 1000000);
112f38a4a31668 arch/arm/kernel/sched_clock.c Russell King      2010-12-15  228  		r_unit = 'M';
f4b62e1e113750 kernel/time/sched_clock.c     Maciej W. Rozycki 2022-04-24  229  	} else if (r >= 4000) {
92067440f1311d kernel/time/sched_clock.c     Maciej W. Rozycki 2022-04-24  230  		r = DIV_ROUND_CLOSEST(r, 1000);
112f38a4a31668 arch/arm/kernel/sched_clock.c Russell King      2010-12-15  231  		r_unit = 'k';
32fea568aec5b7 kernel/time/sched_clock.c     Ingo Molnar       2015-03-27  232  	} else {
2f0778afac79bd arch/arm/kernel/sched_clock.c Marc Zyngier      2011-12-15  233  		r_unit = ' ';
32fea568aec5b7 kernel/time/sched_clock.c     Ingo Molnar       2015-03-27  234  	}
112f38a4a31668 arch/arm/kernel/sched_clock.c Russell King      2010-12-15  235  
32fea568aec5b7 kernel/time/sched_clock.c     Ingo Molnar       2015-03-27  236  	/* Calculate the ns resolution of this counter */
5ae8aabeaec3fe kernel/time/sched_clock.c     Stephen Boyd      2014-02-17  237  	res = cyc_to_ns(1ULL, new_mult, new_shift);
5ae8aabeaec3fe kernel/time/sched_clock.c     Stephen Boyd      2014-02-17  238  
a08ca5d1089da0 kernel/time/sched_clock.c     Stephen Boyd      2013-07-18  239  	pr_info("sched_clock: %u bits at %lu%cHz, resolution %lluns, wraps every %lluns\n",
a08ca5d1089da0 kernel/time/sched_clock.c     Stephen Boyd      2013-07-18  240  		bits, r, r_unit, res, wrap);
112f38a4a31668 arch/arm/kernel/sched_clock.c Russell King      2010-12-15  241  
32fea568aec5b7 kernel/time/sched_clock.c     Ingo Molnar       2015-03-27  242  	/* Enable IRQ time accounting if we have a fast enough sched_clock() */
a42c362980430b arch/arm/kernel/sched_clock.c Russell King      2012-09-09  243  	if (irqtime > 0 || (irqtime == -1 && rate >= 1000000))
a42c362980430b arch/arm/kernel/sched_clock.c Russell King      2012-09-09  244  		enable_sched_clock_irqtime();
a42c362980430b arch/arm/kernel/sched_clock.c Russell King      2012-09-09  245  
2707745533d6d3 kernel/time/sched_clock.c     Paul Cercueil     2020-01-07  246  	local_irq_restore(flags);
2707745533d6d3 kernel/time/sched_clock.c     Paul Cercueil     2020-01-07  247  
d75f773c86a2b8 kernel/time/sched_clock.c     Sakari Ailus      2019-03-25  248  	pr_debug("Registered %pS as sched_clock source\n", read);
2f0778afac79bd arch/arm/kernel/sched_clock.c Marc Zyngier      2011-12-15  249  }
2f0778afac79bd arch/arm/kernel/sched_clock.c Marc Zyngier      2011-12-15  250  

:::::: The code at line 219 was first introduced by commit
:::::: 1b8955bc5ac575009835e371ae55e7f3af2197a9 timers, sched_clock: Update timeout for clock wrap

:::::: TO: David Engraf <[email protected]>
:::::: CC: John Stultz <[email protected]>

Signature · 2 lines
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
#1 lore raw

PATCH 1/1 time/sched_clock: Use ACCESS_PRIVATE() to evaluate hrtimer::function

This dereference of sched_clock_timer::function was missed when the hrtimer callback function pointer was marked private.

Fixes 04257da0c99c ("hrtimers: Make callback function pointer private")
---
 kernel/time/sched_clock.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/time/sched_clock.c +1 -1
@@ -215,7 +215,7 @@ void sched_clock_register(u64 (*read)(vo
 
 	update_clock_read_data(&rd);
 
-	if (sched_clock_timer.function != NULL) {
+	if (ACCESS_PRIVATE(sched_clock_timer, function) != NULL)) {
 		/* update timeout for clock wrap */
 		hrtimer_start(&sched_clock_timer, cd.wrap_kt,
 			      HRTIMER_MODE_REL_HARD);
#2 lore raw

Re: [PATCH] time/sched_clock: Use ACCESS_PRIVATE() to evaluate hrtimer::function

kernel/time/sched_clock.c void sched_clock_register(u64 (*read)(vo · line 218

Quoted 1 line · Thomas Gleixner
kernel/time/sched_clock.c +1 -0
+	if (ACCESS_PRIVATE(sched_clock_timer, function) != NULL)) {

Bah. Sent the draft not the real thing.

#3 lore raw

PATCH v2 1/1 time/sched_clock: Use ACCESS_PRIVATE() to evaluate hrtimer::function

In reply to Thomas Gleixner

This dereference of sched_clock_timer::function was missed when the hrtimer callback function pointer was marked private.

Fixes 04257da0c99c ("hrtimers: Make callback function pointer private")

---
V2: Send the actually functional variant...

---
 kernel/time/sched_clock.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/time/sched_clock.c +1 -1
@@ -215,7 +215,7 @@ void sched_clock_register(u64 (*read)(vo
 
 	update_clock_read_data(&rd);
 
-	if (sched_clock_timer.function != NULL) {
+	if (ACCESS_PRIVATE(&sched_clock_timer, function) != NULL) {
 		/* update timeout for clock wrap */
 		hrtimer_start(&sched_clock_timer, cd.wrap_kt,
 			      HRTIMER_MODE_REL_HARD);
#4 lore raw

[tip: timers/core] time/sched_clock: Use ACCESS_PRIVATE() to evaluate hrtimer::function

The following commit has been merged into the timers/core branch of tip:

The following commit has been merged into the timers/core branch of tip:

Commit-ID:     3db5306b0bd562ac0fe7eddad26c60ebb6f5fdd4
Gitweb:        https://git.kernel.org/tip/3db5306b0bd562ac0fe7eddad26c60ebb6f5fdd4
Author:        Thomas Gleixner <[email protected]>
AuthorDate:    Tue, 13 Jan 2026 17:47:37 +01:00
Committer:     Thomas Gleixner <[email protected]>
CommitterDate: Tue, 13 Jan 2026 18:08:57 +01:00

time/sched_clock: Use ACCESS_PRIVATE() to evaluate hrtimer::function

This dereference of sched_clock_timer::function was missed when the hrtimer callback function pointer was marked private.

---
 kernel/time/sched_clock.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/time/sched_clock.c +1 -1
index f391118..f3aaef6 100644
@@ -215,7 +215,7 @@ void sched_clock_register(u64 (*read)(void), int bits, unsigned long rate)
 
 	update_clock_read_data(&rd);
 
-	if (sched_clock_timer.function != NULL) {
+	if (ACCESS_PRIVATE(&sched_clock_timer, function) != NULL) {
 		/* update timeout for clock wrap */
 		hrtimer_start(&sched_clock_timer, cd.wrap_kt,
 			      HRTIMER_MODE_REL_HARD);
Acked-by on v2 1/1
#5 lore raw

Re: [PATCH v2] time/sched_clock: Use ACCESS_PRIVATE() to evaluate hrtimer::function

In reply to Thomas Gleixner
Quoted 7 lines · Thomas Gleixner

This dereference of sched_clock_timer::function was missed when the hrtimer callback function pointer was marked private.

Fixes 04257da0c99c ("hrtimers: Make callback function pointer private")