tree:   https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git 
willy-maple
head:   7e346d2845b4bd77663394f39fa70456e0084c86
commit: c4e6b1dfcb6f997eb870e859ab84ca9f39572eab [164/202] fs/proc/task_mmu: 
Stop using linked list and highest_vm_end
config: x86_64-randconfig-m001-20210202 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <l...@intel.com>
Reported-by: Dan Carpenter <dan.carpen...@oracle.com>

smatch warnings:
fs/proc/task_mmu.c:941 show_smaps_rollup() error: uninitialized symbol 
'vma_start'.

vim +/vma_start +941 fs/proc/task_mmu.c

258f669e7e88c1 Vlastimil Babka       2018-08-21  839  static int 
show_smaps_rollup(struct seq_file *m, void *v)
258f669e7e88c1 Vlastimil Babka       2018-08-21  840  {
258f669e7e88c1 Vlastimil Babka       2018-08-21  841    struct 
proc_maps_private *priv = m->private;
258f669e7e88c1 Vlastimil Babka       2018-08-21  842    struct mem_size_stats 
mss;
c4e6b1dfcb6f99 Liam R. Howlett       2021-01-04  843    struct mm_struct *mm = 
priv->mm;
258f669e7e88c1 Vlastimil Babka       2018-08-21  844    struct vm_area_struct 
*vma;
c4e6b1dfcb6f99 Liam R. Howlett       2021-01-04  845    unsigned long 
vma_start, last_vma_end = 0;
258f669e7e88c1 Vlastimil Babka       2018-08-21  846    int ret = 0;
c4e6b1dfcb6f99 Liam R. Howlett       2021-01-04  847    MA_STATE(mas, 
&mm->mm_mt, 0, 0);
258f669e7e88c1 Vlastimil Babka       2018-08-21  848  
258f669e7e88c1 Vlastimil Babka       2018-08-21  849    priv->task = 
get_proc_task(priv->inode);
258f669e7e88c1 Vlastimil Babka       2018-08-21  850    if (!priv->task)
258f669e7e88c1 Vlastimil Babka       2018-08-21  851            return -ESRCH;
258f669e7e88c1 Vlastimil Babka       2018-08-21  852  
258f669e7e88c1 Vlastimil Babka       2018-08-21  853    if (!mm || 
!mmget_not_zero(mm)) {
258f669e7e88c1 Vlastimil Babka       2018-08-21  854            ret = -ESRCH;
258f669e7e88c1 Vlastimil Babka       2018-08-21  855            goto 
out_put_task;
258f669e7e88c1 Vlastimil Babka       2018-08-21  856    }
258f669e7e88c1 Vlastimil Babka       2018-08-21  857  
258f669e7e88c1 Vlastimil Babka       2018-08-21  858    memset(&mss, 0, 
sizeof(mss));
258f669e7e88c1 Vlastimil Babka       2018-08-21  859  
d8ed45c5dcd455 Michel Lespinasse     2020-06-08  860    ret = 
mmap_read_lock_killable(mm);
a26a9781554857 Konstantin Khlebnikov 2019-07-11  861    if (ret)
a26a9781554857 Konstantin Khlebnikov 2019-07-11  862            goto out_put_mm;
a26a9781554857 Konstantin Khlebnikov 2019-07-11  863  
258f669e7e88c1 Vlastimil Babka       2018-08-21  864    
hold_task_mempolicy(priv);
c4e6b1dfcb6f99 Liam R. Howlett       2021-01-04  865    vma = mas_find(&mas, 0);
c4e6b1dfcb6f99 Liam R. Howlett       2021-01-04  866  
c4e6b1dfcb6f99 Liam R. Howlett       2021-01-04  867    if (vma)
c4e6b1dfcb6f99 Liam R. Howlett       2021-01-04  868            vma_start = 
vma->vm_start;

"vma_start" not initialized on else path.

258f669e7e88c1 Vlastimil Babka       2018-08-21  869  
c4e6b1dfcb6f99 Liam R. Howlett       2021-01-04  870    mas_set(&mas, 0);
c4e6b1dfcb6f99 Liam R. Howlett       2021-01-04  871    mas_for_each(&mas, vma, 
-1) {
03b4b1149308b0 Chinwen Chang         2020-10-13  872            
smap_gather_stats(vma, &mss, 0);
258f669e7e88c1 Vlastimil Babka       2018-08-21  873            last_vma_end = 
vma->vm_end;
ff9f47f6f00cfe Chinwen Chang         2020-10-13  874  
ff9f47f6f00cfe Chinwen Chang         2020-10-13  875            /*
ff9f47f6f00cfe Chinwen Chang         2020-10-13  876             * Release 
mmap_lock temporarily if someone wants to
ff9f47f6f00cfe Chinwen Chang         2020-10-13  877             * access it 
for write request.
ff9f47f6f00cfe Chinwen Chang         2020-10-13  878             */
ff9f47f6f00cfe Chinwen Chang         2020-10-13  879            if 
(mmap_lock_is_contended(mm)) {
c4e6b1dfcb6f99 Liam R. Howlett       2021-01-04  880                    
mas_pause(&mas);
ff9f47f6f00cfe Chinwen Chang         2020-10-13  881                    
mmap_read_unlock(mm);
ff9f47f6f00cfe Chinwen Chang         2020-10-13  882                    ret = 
mmap_read_lock_killable(mm);
ff9f47f6f00cfe Chinwen Chang         2020-10-13  883                    if 
(ret) {
ff9f47f6f00cfe Chinwen Chang         2020-10-13  884                            
release_task_mempolicy(priv);
ff9f47f6f00cfe Chinwen Chang         2020-10-13  885                            
goto out_put_mm;
ff9f47f6f00cfe Chinwen Chang         2020-10-13  886                    }
ff9f47f6f00cfe Chinwen Chang         2020-10-13  887  
ff9f47f6f00cfe Chinwen Chang         2020-10-13  888                    /*
ff9f47f6f00cfe Chinwen Chang         2020-10-13  889                     * 
After dropping the lock, there are four cases to
ff9f47f6f00cfe Chinwen Chang         2020-10-13  890                     * 
consider. See the following example for explanation.
ff9f47f6f00cfe Chinwen Chang         2020-10-13  891                     *
ff9f47f6f00cfe Chinwen Chang         2020-10-13  892                     *   
+------+------+-----------+
ff9f47f6f00cfe Chinwen Chang         2020-10-13  893                     *   | 
VMA1 | VMA2 | VMA3      |
ff9f47f6f00cfe Chinwen Chang         2020-10-13  894                     *   
+------+------+-----------+
ff9f47f6f00cfe Chinwen Chang         2020-10-13  895                     *   |  
    |      |           |
ff9f47f6f00cfe Chinwen Chang         2020-10-13  896                     *  4k  
   8k     16k         400k
ff9f47f6f00cfe Chinwen Chang         2020-10-13  897                     *
ff9f47f6f00cfe Chinwen Chang         2020-10-13  898                     * 
Suppose we drop the lock after reading VMA2 due to
ff9f47f6f00cfe Chinwen Chang         2020-10-13  899                     * 
contention, then we get:
ff9f47f6f00cfe Chinwen Chang         2020-10-13  900                     *
ff9f47f6f00cfe Chinwen Chang         2020-10-13  901                     *      
last_vma_end = 16k
ff9f47f6f00cfe Chinwen Chang         2020-10-13  902                     *
ff9f47f6f00cfe Chinwen Chang         2020-10-13  903                     * 1) 
VMA2 is freed, but VMA3 exists:
ff9f47f6f00cfe Chinwen Chang         2020-10-13  904                     *
ff9f47f6f00cfe Chinwen Chang         2020-10-13  905                     *    
find_vma(mm, 16k - 1) will return VMA3.
ff9f47f6f00cfe Chinwen Chang         2020-10-13  906                     *    
In this case, just continue from VMA3.
ff9f47f6f00cfe Chinwen Chang         2020-10-13  907                     *
ff9f47f6f00cfe Chinwen Chang         2020-10-13  908                     * 2) 
VMA2 still exists:
ff9f47f6f00cfe Chinwen Chang         2020-10-13  909                     *
ff9f47f6f00cfe Chinwen Chang         2020-10-13  910                     *    
find_vma(mm, 16k - 1) will return VMA2.
ff9f47f6f00cfe Chinwen Chang         2020-10-13  911                     *    
Iterate the loop like the original one.
ff9f47f6f00cfe Chinwen Chang         2020-10-13  912                     *
ff9f47f6f00cfe Chinwen Chang         2020-10-13  913                     * 3) 
No more VMAs can be found:
ff9f47f6f00cfe Chinwen Chang         2020-10-13  914                     *
ff9f47f6f00cfe Chinwen Chang         2020-10-13  915                     *    
find_vma(mm, 16k - 1) will return NULL.
ff9f47f6f00cfe Chinwen Chang         2020-10-13  916                     *    
No more things to do, just break.
ff9f47f6f00cfe Chinwen Chang         2020-10-13  917                     *
ff9f47f6f00cfe Chinwen Chang         2020-10-13  918                     * 4) 
(last_vma_end - 1) is the middle of a vma (VMA'):
ff9f47f6f00cfe Chinwen Chang         2020-10-13  919                     *
ff9f47f6f00cfe Chinwen Chang         2020-10-13  920                     *    
find_vma(mm, 16k - 1) will return VMA' whose range
ff9f47f6f00cfe Chinwen Chang         2020-10-13  921                     *    
contains last_vma_end.
ff9f47f6f00cfe Chinwen Chang         2020-10-13  922                     *    
Iterate VMA' from last_vma_end.
ff9f47f6f00cfe Chinwen Chang         2020-10-13  923                     */
c4e6b1dfcb6f99 Liam R. Howlett       2021-01-04  924                    
mas.index = mas.last = last_vma_end - 1;
c4e6b1dfcb6f99 Liam R. Howlett       2021-01-04  925                    vma = 
mas_find(&mas, -1);
ff9f47f6f00cfe Chinwen Chang         2020-10-13  926                    /* Case 
3 above */
ff9f47f6f00cfe Chinwen Chang         2020-10-13  927                    if 
(!vma)
ff9f47f6f00cfe Chinwen Chang         2020-10-13  928                            
break;
ff9f47f6f00cfe Chinwen Chang         2020-10-13  929  
ff9f47f6f00cfe Chinwen Chang         2020-10-13  930                    /* Case 
1 above */
ff9f47f6f00cfe Chinwen Chang         2020-10-13  931                    if 
(vma->vm_start >= last_vma_end)
ff9f47f6f00cfe Chinwen Chang         2020-10-13  932                            
continue;
ff9f47f6f00cfe Chinwen Chang         2020-10-13  933  
ff9f47f6f00cfe Chinwen Chang         2020-10-13  934                    /* Case 
4 above */
ff9f47f6f00cfe Chinwen Chang         2020-10-13  935                    if 
(vma->vm_end > last_vma_end)
ff9f47f6f00cfe Chinwen Chang         2020-10-13  936                            
smap_gather_stats(vma, &mss, last_vma_end);
ff9f47f6f00cfe Chinwen Chang         2020-10-13  937            }
ff9f47f6f00cfe Chinwen Chang         2020-10-13  938            /* Case 2 above 
*/
258f669e7e88c1 Vlastimil Babka       2018-08-21  939    }
258f669e7e88c1 Vlastimil Babka       2018-08-21  940  
c4e6b1dfcb6f99 Liam R. Howlett       2021-01-04 @941    
show_vma_header_prefix(m, vma_start, last_vma_end, 0, 0, 0, 0);
                                                                                
  ^^^^^^^^^
Uninitialized.

258f669e7e88c1 Vlastimil Babka       2018-08-21  942    seq_pad(m, ' ');
258f669e7e88c1 Vlastimil Babka       2018-08-21  943    seq_puts(m, 
"[rollup]\n");
258f669e7e88c1 Vlastimil Babka       2018-08-21  944  
ee2ad71b0756e9 Luigi Semenzato       2019-07-11  945    __show_smap(m, &mss, 
true);
258f669e7e88c1 Vlastimil Babka       2018-08-21  946  
258f669e7e88c1 Vlastimil Babka       2018-08-21  947    
release_task_mempolicy(priv);
d8ed45c5dcd455 Michel Lespinasse     2020-06-08  948    mmap_read_unlock(mm);
258f669e7e88c1 Vlastimil Babka       2018-08-21  949  
a26a9781554857 Konstantin Khlebnikov 2019-07-11  950  out_put_mm:
a26a9781554857 Konstantin Khlebnikov 2019-07-11  951    mmput(mm);
258f669e7e88c1 Vlastimil Babka       2018-08-21  952  out_put_task:
258f669e7e88c1 Vlastimil Babka       2018-08-21  953    
put_task_struct(priv->task);
258f669e7e88c1 Vlastimil Babka       2018-08-21  954    priv->task = NULL;
258f669e7e88c1 Vlastimil Babka       2018-08-21  955  
493b0e9d945fa9 Daniel Colascione     2017-09-06  956    return ret;
e070ad49f31155 Mauricio Lin          2005-09-03  957  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org

Attachment: .config.gz
Description: application/gzip

Reply via email to