lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAFULd4bgdGosQ3byMW9S+ov0uDO9iK3jCmZ-fkZQbCGOpfUvXQ@mail.gmail.com>
Date:   Thu, 25 Aug 2022 08:20:28 +0200
From:   Uros Bizjak <ubizjak@...il.com>
To:     kernel test robot <lkp@...el.com>
Cc:     llvm@...ts.linux.dev, kbuild-all@...ts.01.org,
        Ammar Faizi <ammarfaizi2@...weeb.org>,
        "GNU/Weeb Mailing List" <gwml@...r.gnuweeb.org>,
        linux-kernel@...r.kernel.org,
        Andrew Morton <akpm@...ux-foundation.org>,
        Linux Memory Management List <linux-mm@...ck.org>
Subject: Re: [ammarfaizi2-block:akpm/mm/mm-nonmm-unstable 50/50]
 kernel/smpboot.c:435:6: warning: variable 'oldstate' is used uninitialized
 whenever 'if' condition is true

On Thu, Aug 25, 2022 at 6:30 AM kernel test robot <lkp@...el.com> wrote:
>
> Hi Uros,
>
> FYI, the error/warning was bisected to this commit, please ignore it if it's irrelevant.

No, the warning is correct, and although my compiler didn't emit the
warning, the variable is indeed uninitialized.

The patched kernel worked for me and I was not careful enough to find
all incoming edges to the label.

Attached is an incremental patch I am testing, will send it later
today as a proper patch.

Uros.

> tree:   https://github.com/ammarfaizi2/linux-block akpm/mm/mm-nonmm-unstable
> head:   2d1e07c7534c14e56ac3818fa24e7c1643a9b1dc
> commit: 2d1e07c7534c14e56ac3818fa24e7c1643a9b1dc [50/50] smpboot: use atomic_try_cmpxchg in cpu_wait_death and cpu_report_death
> config: x86_64-randconfig-a003 (https://download.01.org/0day-ci/archive/20220825/202208251224.teVMa7Yy-lkp@intel.com/config)
> compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
> reproduce (this is a W=1 build):
>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         # https://github.com/ammarfaizi2/linux-block/commit/2d1e07c7534c14e56ac3818fa24e7c1643a9b1dc
>         git remote add ammarfaizi2-block https://github.com/ammarfaizi2/linux-block
>         git fetch --no-tags ammarfaizi2-block akpm/mm/mm-nonmm-unstable
>         git checkout 2d1e07c7534c14e56ac3818fa24e7c1643a9b1dc
>         # save the config file
>         mkdir build_dir && cp config build_dir/.config
>         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash
>
> If you fix the issue, kindly add following tag where applicable
> Reported-by: kernel test robot <lkp@...el.com>
>
> All warnings (new ones prefixed by >>):
>
> >> kernel/smpboot.c:435:6: warning: variable 'oldstate' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
>            if (atomic_read(&per_cpu(cpu_hotplug_state, cpu)) == CPU_DEAD)
>                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    kernel/smpboot.c:449:6: note: uninitialized use occurs here
>            if (oldstate == CPU_DEAD) {
>                ^~~~~~~~
>    kernel/smpboot.c:435:2: note: remove the 'if' if its condition is always false
>            if (atomic_read(&per_cpu(cpu_hotplug_state, cpu)) == CPU_DEAD)
>            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    kernel/smpboot.c:428:14: note: initialize the variable 'oldstate' to silence this warning
>            int oldstate;
>                        ^
>                         = 0
>    1 warning generated.
>
>
> vim +435 kernel/smpboot.c
>
> 8038dad7e88858 Paul E. McKenney 2015-02-25  421
> 8038dad7e88858 Paul E. McKenney 2015-02-25  422  /*
> 8038dad7e88858 Paul E. McKenney 2015-02-25  423   * Wait for the specified CPU to exit the idle loop and die.
> 8038dad7e88858 Paul E. McKenney 2015-02-25  424   */
> 8038dad7e88858 Paul E. McKenney 2015-02-25  425  bool cpu_wait_death(unsigned int cpu, int seconds)
> 8038dad7e88858 Paul E. McKenney 2015-02-25  426  {
> 8038dad7e88858 Paul E. McKenney 2015-02-25  427         int jf_left = seconds * HZ;
> 8038dad7e88858 Paul E. McKenney 2015-02-25  428         int oldstate;
> 8038dad7e88858 Paul E. McKenney 2015-02-25  429         bool ret = true;
> 8038dad7e88858 Paul E. McKenney 2015-02-25  430         int sleep_jf = 1;
> 8038dad7e88858 Paul E. McKenney 2015-02-25  431
> 8038dad7e88858 Paul E. McKenney 2015-02-25  432         might_sleep();
> 8038dad7e88858 Paul E. McKenney 2015-02-25  433
> 8038dad7e88858 Paul E. McKenney 2015-02-25  434         /* The outgoing CPU will normally get done quite quickly. */
> 8038dad7e88858 Paul E. McKenney 2015-02-25 @435         if (atomic_read(&per_cpu(cpu_hotplug_state, cpu)) == CPU_DEAD)
> 8038dad7e88858 Paul E. McKenney 2015-02-25  436                 goto update_state;
> 8038dad7e88858 Paul E. McKenney 2015-02-25  437         udelay(5);
> 8038dad7e88858 Paul E. McKenney 2015-02-25  438
> 8038dad7e88858 Paul E. McKenney 2015-02-25  439         /* But if the outgoing CPU dawdles, wait increasingly long times. */
> 8038dad7e88858 Paul E. McKenney 2015-02-25  440         while (atomic_read(&per_cpu(cpu_hotplug_state, cpu)) != CPU_DEAD) {
> 8038dad7e88858 Paul E. McKenney 2015-02-25  441                 schedule_timeout_uninterruptible(sleep_jf);
> 8038dad7e88858 Paul E. McKenney 2015-02-25  442                 jf_left -= sleep_jf;
> 8038dad7e88858 Paul E. McKenney 2015-02-25  443                 if (jf_left <= 0)
> 8038dad7e88858 Paul E. McKenney 2015-02-25  444                         break;
> 8038dad7e88858 Paul E. McKenney 2015-02-25  445                 sleep_jf = DIV_ROUND_UP(sleep_jf * 11, 10);
> 8038dad7e88858 Paul E. McKenney 2015-02-25  446         }
> 8038dad7e88858 Paul E. McKenney 2015-02-25  447         oldstate = atomic_read(&per_cpu(cpu_hotplug_state, cpu));
> 2d1e07c7534c14 Uros Bizjak      2022-08-23  448  update_state:
> 8038dad7e88858 Paul E. McKenney 2015-02-25  449         if (oldstate == CPU_DEAD) {
> 8038dad7e88858 Paul E. McKenney 2015-02-25  450                 /* Outgoing CPU died normally, update state. */
> 8038dad7e88858 Paul E. McKenney 2015-02-25  451                 smp_mb(); /* atomic_read() before update. */
> 8038dad7e88858 Paul E. McKenney 2015-02-25  452                 atomic_set(&per_cpu(cpu_hotplug_state, cpu), CPU_POST_DEAD);
> 8038dad7e88858 Paul E. McKenney 2015-02-25  453         } else {
> 8038dad7e88858 Paul E. McKenney 2015-02-25  454                 /* Outgoing CPU still hasn't died, set state accordingly. */
> 2d1e07c7534c14 Uros Bizjak      2022-08-23  455                 if (!atomic_try_cmpxchg(&per_cpu(cpu_hotplug_state, cpu),
> 2d1e07c7534c14 Uros Bizjak      2022-08-23  456                                         &oldstate, CPU_BROKEN))
> 8038dad7e88858 Paul E. McKenney 2015-02-25  457                         goto update_state;
> 8038dad7e88858 Paul E. McKenney 2015-02-25  458                 ret = false;
> 8038dad7e88858 Paul E. McKenney 2015-02-25  459         }
> 8038dad7e88858 Paul E. McKenney 2015-02-25  460         return ret;
> 8038dad7e88858 Paul E. McKenney 2015-02-25  461  }
> 8038dad7e88858 Paul E. McKenney 2015-02-25  462
>
> :::::: The code at line 435 was first introduced by commit
> :::::: 8038dad7e888581266c76df15d70ca457a3c5910 smpboot: Add common code for notification from dying CPU
>
> :::::: TO: Paul E. McKenney <paulmck@...ux.vnet.ibm.com>
> :::::: CC: Paul E. McKenney <paulmck@...ux.vnet.ibm.com>
>
> --
> 0-DAY CI Kernel Test Service
> https://01.org/lkp

View attachment "0001-smpboot-Fix-cpu_wait_death-for-early-cpu-death.patch" of type "text/x-patch" (1227 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ