Skip to content

Commit f928ef6

Browse files
committed
ucounts: Silence warning in dec_rlimit_ucounts
Dan Carpenter <[email protected]> wrote: > > url: https://github.com/0day-ci/linux/commits/legion-kernel-org/Count-rlimits-in-each-user-namespace/20210427-162857 > base: https://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest.git next > config: arc-randconfig-m031-20210426 (attached as .config) > compiler: arceb-elf-gcc (GCC) 9.3.0 > > If you fix the issue, kindly add following tag as appropriate > Reported-by: kernel test robot <[email protected]> > Reported-by: Dan Carpenter <[email protected]> > > smatch warnings: > kernel/ucount.c:270 dec_rlimit_ucounts() error: uninitialized symbol 'new'. > > vim +/new +270 kernel/ucount.c > > 176ec2b Alexey Gladkov 2021-04-22 260 bool dec_rlimit_ucounts(struct ucounts *ucounts, enum ucount_type type, long v) > 176ec2b Alexey Gladkov 2021-04-22 261 { > 176ec2b Alexey Gladkov 2021-04-22 262 struct ucounts *iter; > 176ec2b Alexey Gladkov 2021-04-22 263 long new; > ^^^^^^^^ > > 176ec2b Alexey Gladkov 2021-04-22 264 for (iter = ucounts; iter; iter = iter->ns->ucounts) { > 176ec2b Alexey Gladkov 2021-04-22 265 long dec = atomic_long_add_return(-v, &iter->ucount[type]); > 176ec2b Alexey Gladkov 2021-04-22 266 WARN_ON_ONCE(dec < 0); > 176ec2b Alexey Gladkov 2021-04-22 267 if (iter == ucounts) > 176ec2b Alexey Gladkov 2021-04-22 268 new = dec; > 176ec2b Alexey Gladkov 2021-04-22 269 } > 176ec2b Alexey Gladkov 2021-04-22 @270 return (new == 0); > ^^^^^^^^ > I don't know if this is a bug or not, but I can definitely tell why the > static checker complains about it. > > 176ec2b Alexey Gladkov 2021-04-22 271 } In the only two cases that care about the return value of dec_rlimit_ucounts the code first tests to see that ucounts is not NULL. In those cases it is guaranteed at least one iteration of the loop will execute guaranteeing the variable new will be initialized. Initialize new to -1 so that the return value is well defined even when the loop does not execute and the static checker is silenced. Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: "Eric W. Biederman" <[email protected]>
1 parent 9b62498 commit f928ef6

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

kernel/ucount.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ long inc_rlimit_ucounts(struct ucounts *ucounts, enum ucount_type type, long v)
263263
bool dec_rlimit_ucounts(struct ucounts *ucounts, enum ucount_type type, long v)
264264
{
265265
struct ucounts *iter;
266-
long new;
266+
long new = -1; /* Silence compiler warning */
267267
for (iter = ucounts; iter; iter = iter->ns->ucounts) {
268268
long dec = atomic_long_add_return(-v, &iter->ucount[type]);
269269
WARN_ON_ONCE(dec < 0);

0 commit comments

Comments
 (0)