CC: [email protected]
CC: [email protected]
TO: Michel Lespinasse <[email protected]>
CC: Andrew Morton <[email protected]>
CC: Linux Memory Management List <[email protected]>
CC: Vlastimil Babka <[email protected]>
CC: Davidlohr Bueso <[email protected]>
CC: Daniel Jordan <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   e8de4575cf7601917c2eae9f8ee1a8ee3d9be2a7
commit: da1c55f1b272f4bd54671d459b39ea7b54944ef9 mmap locking API: rename 
mmap_sem to mmap_lock
date:   2 days ago
:::::: branch date: 63 minutes ago
:::::: commit date: 2 days ago
config: s390-randconfig-m031-20200611 (attached as .config)
compiler: s390-linux-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]>

New smatch warnings:
arch/s390/mm/fault.c:517 do_exception() error: double locked 'mm->mmap_lock' 
(orig line 436)

Old smatch warnings:
arch/s390/include/asm/uaccess.h:143 __get_user_fn() error: uninitialized symbol 
'rc'.

# 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=da1c55f1b272f4bd54671d459b39ea7b54944ef9
git remote add linus 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git remote update linus
git checkout da1c55f1b272f4bd54671d459b39ea7b54944ef9
vim +517 arch/s390/mm/fault.c

50d7280d430484 Martin Schwidefsky 2009-12-07  372  
^1da177e4c3f41 Linus Torvalds     2005-04-16  373  /*
^1da177e4c3f41 Linus Torvalds     2005-04-16  374   * This routine handles page 
faults.  It determines the address,
^1da177e4c3f41 Linus Torvalds     2005-04-16  375   * and the problem, and then 
passes it off to one of the appropriate
^1da177e4c3f41 Linus Torvalds     2005-04-16  376   * routines.
^1da177e4c3f41 Linus Torvalds     2005-04-16  377   *
50d7280d430484 Martin Schwidefsky 2009-12-07  378   * interruption code 
(int_code):
^1da177e4c3f41 Linus Torvalds     2005-04-16  379   *   04       Protection     
      ->  Write-Protection  (suprression)
^1da177e4c3f41 Linus Torvalds     2005-04-16  380   *   10       Segment 
translation  ->  Not present       (nullification)
^1da177e4c3f41 Linus Torvalds     2005-04-16  381   *   11       Page 
translation     ->  Not present       (nullification)
^1da177e4c3f41 Linus Torvalds     2005-04-16  382   *   3b       Region third 
trans.  ->  Not present       (nullification)
^1da177e4c3f41 Linus Torvalds     2005-04-16  383   */
50a7ca3c6fc869 Souptick Joarder   2018-08-17  384  static inline vm_fault_t 
do_exception(struct pt_regs *regs, int access)
^1da177e4c3f41 Linus Torvalds     2005-04-16  385  {
24eb3a824c4f3c Dominik Dingel     2013-06-17  386       struct gmap *gmap;
^1da177e4c3f41 Linus Torvalds     2005-04-16  387       struct task_struct *tsk;
^1da177e4c3f41 Linus Torvalds     2005-04-16  388       struct mm_struct *mm;
^1da177e4c3f41 Linus Torvalds     2005-04-16  389       struct vm_area_struct 
*vma;
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  390       enum fault_type type;
aa33c8cbbae2eb Martin Schwidefsky 2011-12-27  391       unsigned long 
trans_exc_code;
^1da177e4c3f41 Linus Torvalds     2005-04-16  392       unsigned long address;
33ce614029576b Heiko Carstens     2011-05-26  393       unsigned int flags;
50a7ca3c6fc869 Souptick Joarder   2018-08-17  394       vm_fault_t fault;
^1da177e4c3f41 Linus Torvalds     2005-04-16  395  
39efd4ec9a2967 Martin Schwidefsky 2012-11-21  396       tsk = current;
39efd4ec9a2967 Martin Schwidefsky 2012-11-21  397       /*
39efd4ec9a2967 Martin Schwidefsky 2012-11-21  398        * The instruction that 
caused the program check has
39efd4ec9a2967 Martin Schwidefsky 2012-11-21  399        * been nullified. 
Don't signal single step via SIGTRAP.
39efd4ec9a2967 Martin Schwidefsky 2012-11-21  400        */
d3a73acbc26a4a Martin Schwidefsky 2014-04-15  401       
clear_pt_regs_flag(regs, PIF_PER_TRAP);
39efd4ec9a2967 Martin Schwidefsky 2012-11-21  402  
b98cca444d287a Anshuman Khandual  2019-07-16  403       if 
(kprobe_page_fault(regs, 14))
50d7280d430484 Martin Schwidefsky 2009-12-07  404               return 0;
4ba069b802c29e Michael Grundy     2006-09-20  405  
10c1031f706bbe Martin Schwidefsky 2007-04-27  406       mm = tsk->mm;
aa33c8cbbae2eb Martin Schwidefsky 2011-12-27  407       trans_exc_code = 
regs->int_parm_long;
^1da177e4c3f41 Linus Torvalds     2005-04-16  408  
^1da177e4c3f41 Linus Torvalds     2005-04-16  409       /*
^1da177e4c3f41 Linus Torvalds     2005-04-16  410        * Verify that the 
fault happened in user space, that
^1da177e4c3f41 Linus Torvalds     2005-04-16  411        * we are not in an 
interrupt and that there is a 
^1da177e4c3f41 Linus Torvalds     2005-04-16  412        * user context.
^1da177e4c3f41 Linus Torvalds     2005-04-16  413        */
50d7280d430484 Martin Schwidefsky 2009-12-07  414       fault = 
VM_FAULT_BADCONTEXT;
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  415       type = 
get_fault_type(regs);
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  416       switch (type) {
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  417       case KERNEL_FAULT:
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  418               goto out;
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  419       case VDSO_FAULT:
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  420               fault = 
VM_FAULT_BADMAP;
50d7280d430484 Martin Schwidefsky 2009-12-07  421               goto out;
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  422       case USER_FAULT:
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  423       case GMAP_FAULT:
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  424               if 
(faulthandler_disabled() || !mm)
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  425                       goto 
out;
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  426               break;
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  427       }
^1da177e4c3f41 Linus Torvalds     2005-04-16  428  
61365e132ef987 Martin Schwidefsky 2009-12-07  429       address = 
trans_exc_code & __FAIL_ADDR_MASK;
a8b0ca17b80e92 Peter Zijlstra     2011-06-27  430       
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
dde1607248328c Peter Xu           2020-04-01  431       flags = 
FAULT_FLAG_DEFAULT;
759496ba6407c6 Johannes Weiner    2013-09-12  432       if (user_mode(regs))
759496ba6407c6 Johannes Weiner    2013-09-12  433               flags |= 
FAULT_FLAG_USER;
33ce614029576b Heiko Carstens     2011-05-26  434       if (access == VM_WRITE 
|| (trans_exc_code & store_indication) == 0x400)
33ce614029576b Heiko Carstens     2011-05-26  435               flags |= 
FAULT_FLAG_WRITE;
d8ed45c5dcd455 Michel Lespinasse  2020-06-08 @436       mmap_read_lock(mm);
^1da177e4c3f41 Linus Torvalds     2005-04-16  437  
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  438       gmap = NULL;
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  439       if 
(IS_ENABLED(CONFIG_PGSTE) && type == GMAP_FAULT) {
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  440               gmap = (struct 
gmap *) S390_lowcore.gmap;
527e30b41d8b86 Martin Schwidefsky 2014-04-30  441               
current->thread.gmap_addr = address;
4be130a08420d6 Martin Schwidefsky 2016-03-08  442               
current->thread.gmap_write_flag = !!(flags & FAULT_FLAG_WRITE);
4a494439247318 David Hildenbrand  2016-03-08  443               
current->thread.gmap_int_code = regs->int_code & 0xffff;
527e30b41d8b86 Martin Schwidefsky 2014-04-30  444               address = 
__gmap_translate(gmap, address);
e5992f2e6c3829 Martin Schwidefsky 2011-07-24  445               if (address == 
-EFAULT) {
e5992f2e6c3829 Martin Schwidefsky 2011-07-24  446                       fault = 
VM_FAULT_BADMAP;
e5992f2e6c3829 Martin Schwidefsky 2011-07-24  447                       goto 
out_up;
e5992f2e6c3829 Martin Schwidefsky 2011-07-24  448               }
24eb3a824c4f3c Dominik Dingel     2013-06-17  449               if 
(gmap->pfault_enabled)
24eb3a824c4f3c Dominik Dingel     2013-06-17  450                       flags 
|= FAULT_FLAG_RETRY_NOWAIT;
e5992f2e6c3829 Martin Schwidefsky 2011-07-24  451       }
e5992f2e6c3829 Martin Schwidefsky 2011-07-24  452  
e5992f2e6c3829 Martin Schwidefsky 2011-07-24  453  retry:
50d7280d430484 Martin Schwidefsky 2009-12-07  454       fault = VM_FAULT_BADMAP;
^1da177e4c3f41 Linus Torvalds     2005-04-16  455       vma = find_vma(mm, 
address);
^1da177e4c3f41 Linus Torvalds     2005-04-16  456       if (!vma)
50d7280d430484 Martin Schwidefsky 2009-12-07  457               goto out_up;
c1821c2e9711ad Gerald Schaefer    2007-02-05  458  
50d7280d430484 Martin Schwidefsky 2009-12-07  459       if 
(unlikely(vma->vm_start > address)) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  460               if 
(!(vma->vm_flags & VM_GROWSDOWN))
50d7280d430484 Martin Schwidefsky 2009-12-07  461                       goto 
out_up;
^1da177e4c3f41 Linus Torvalds     2005-04-16  462               if 
(expand_stack(vma, address))
50d7280d430484 Martin Schwidefsky 2009-12-07  463                       goto 
out_up;
50d7280d430484 Martin Schwidefsky 2009-12-07  464       }
50d7280d430484 Martin Schwidefsky 2009-12-07  465  
^1da177e4c3f41 Linus Torvalds     2005-04-16  466       /*
^1da177e4c3f41 Linus Torvalds     2005-04-16  467        * Ok, we have a good 
vm_area for this memory access, so
^1da177e4c3f41 Linus Torvalds     2005-04-16  468        * we can handle it..
^1da177e4c3f41 Linus Torvalds     2005-04-16  469        */
50d7280d430484 Martin Schwidefsky 2009-12-07  470       fault = 
VM_FAULT_BADACCESS;
1ab947de293f43 Martin Schwidefsky 2009-12-07  471       if 
(unlikely(!(vma->vm_flags & access)))
50d7280d430484 Martin Schwidefsky 2009-12-07  472               goto out_up;
^1da177e4c3f41 Linus Torvalds     2005-04-16  473  
53492b1de46a75 Gerald Schaefer    2008-04-30  474       if 
(is_vm_hugetlb_page(vma))
53492b1de46a75 Gerald Schaefer    2008-04-30  475               address &= 
HPAGE_MASK;
^1da177e4c3f41 Linus Torvalds     2005-04-16  476       /*
^1da177e4c3f41 Linus Torvalds     2005-04-16  477        * If for any reason at 
all we couldn't handle the fault,
^1da177e4c3f41 Linus Torvalds     2005-04-16  478        * make sure we exit 
gracefully rather than endlessly redo
^1da177e4c3f41 Linus Torvalds     2005-04-16  479        * the fault.
^1da177e4c3f41 Linus Torvalds     2005-04-16  480        */
dcddffd41d3f1d Kirill A. Shutemov 2016-07-26  481       fault = 
handle_mm_fault(vma, address, flags);
4ef873226ceb9c Peter Xu           2020-04-01  482       if 
(fault_signal_pending(fault, regs)) {
f2c76e3b6f72c3 Heiko Carstens     2012-07-27  483               fault = 
VM_FAULT_SIGNAL;
306d6c49ac9ded Claudio Imbrenda   2018-07-16  484               if (flags & 
FAULT_FLAG_RETRY_NOWAIT)
306d6c49ac9ded Claudio Imbrenda   2018-07-16  485                       goto 
out_up;
f2c76e3b6f72c3 Heiko Carstens     2012-07-27  486               goto out;
f2c76e3b6f72c3 Heiko Carstens     2012-07-27  487       }
50d7280d430484 Martin Schwidefsky 2009-12-07  488       if (unlikely(fault & 
VM_FAULT_ERROR))
50d7280d430484 Martin Schwidefsky 2009-12-07  489               goto out_up;
50d7280d430484 Martin Schwidefsky 2009-12-07  490  
33ce614029576b Heiko Carstens     2011-05-26  491       /*
33ce614029576b Heiko Carstens     2011-05-26  492        * Major/minor page 
fault accounting is only done on the
33ce614029576b Heiko Carstens     2011-05-26  493        * initial attempt. If 
we go through a retry, it is extremely
33ce614029576b Heiko Carstens     2011-05-26  494        * likely that the page 
will be found in page cache at that point.
33ce614029576b Heiko Carstens     2011-05-26  495        */
33ce614029576b Heiko Carstens     2011-05-26  496       if (flags & 
FAULT_FLAG_ALLOW_RETRY) {
bde69af2ab696e Heiko Carstens     2009-09-11  497               if (fault & 
VM_FAULT_MAJOR) {
83c54070ee1a2d Nick Piggin        2007-07-19  498                       
tsk->maj_flt++;
a8b0ca17b80e92 Peter Zijlstra     2011-06-27  499                       
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1,
bde69af2ab696e Heiko Carstens     2009-09-11  500                               
      regs, address);
bde69af2ab696e Heiko Carstens     2009-09-11  501               } else {
83c54070ee1a2d Nick Piggin        2007-07-19  502                       
tsk->min_flt++;
a8b0ca17b80e92 Peter Zijlstra     2011-06-27  503                       
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1,
bde69af2ab696e Heiko Carstens     2009-09-11  504                               
      regs, address);
bde69af2ab696e Heiko Carstens     2009-09-11  505               }
33ce614029576b Heiko Carstens     2011-05-26  506               if (fault & 
VM_FAULT_RETRY) {
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  507                       if 
(IS_ENABLED(CONFIG_PGSTE) && gmap &&
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  508                           
(flags & FAULT_FLAG_RETRY_NOWAIT)) {
24eb3a824c4f3c Dominik Dingel     2013-06-17  509                               
/* FAULT_FLAG_RETRY_NOWAIT has been set,
24eb3a824c4f3c Dominik Dingel     2013-06-17  510                               
 * mmap_sem has not been released */
24eb3a824c4f3c Dominik Dingel     2013-06-17  511                               
current->thread.gmap_pfault = 1;
24eb3a824c4f3c Dominik Dingel     2013-06-17  512                               
fault = VM_FAULT_PFAULT;
24eb3a824c4f3c Dominik Dingel     2013-06-17  513                               
goto out_up;
24eb3a824c4f3c Dominik Dingel     2013-06-17  514                       }
4064b982706375 Peter Xu           2020-04-01  515                       flags 
&= ~FAULT_FLAG_RETRY_NOWAIT;
45cac65b0fcd28 Shaohua Li         2012-10-08  516                       flags 
|= FAULT_FLAG_TRIED;
d8ed45c5dcd455 Michel Lespinasse  2020-06-08 @517                       
mmap_read_lock(mm);
33ce614029576b Heiko Carstens     2011-05-26  518                       goto 
retry;
33ce614029576b Heiko Carstens     2011-05-26  519               }
33ce614029576b Heiko Carstens     2011-05-26  520       }
0aaba41b58bc5f Martin Schwidefsky 2017-08-22  521       if 
(IS_ENABLED(CONFIG_PGSTE) && gmap) {
527e30b41d8b86 Martin Schwidefsky 2014-04-30  522               address =  
__gmap_link(gmap, current->thread.gmap_addr,
527e30b41d8b86 Martin Schwidefsky 2014-04-30  523                               
       address);
527e30b41d8b86 Martin Schwidefsky 2014-04-30  524               if (address == 
-EFAULT) {
527e30b41d8b86 Martin Schwidefsky 2014-04-30  525                       fault = 
VM_FAULT_BADMAP;
527e30b41d8b86 Martin Schwidefsky 2014-04-30  526                       goto 
out_up;
527e30b41d8b86 Martin Schwidefsky 2014-04-30  527               }
527e30b41d8b86 Martin Schwidefsky 2014-04-30  528               if (address == 
-ENOMEM) {
527e30b41d8b86 Martin Schwidefsky 2014-04-30  529                       fault = 
VM_FAULT_OOM;
527e30b41d8b86 Martin Schwidefsky 2014-04-30  530                       goto 
out_up;
527e30b41d8b86 Martin Schwidefsky 2014-04-30  531               }
527e30b41d8b86 Martin Schwidefsky 2014-04-30  532       }
50d7280d430484 Martin Schwidefsky 2009-12-07  533       fault = 0;
50d7280d430484 Martin Schwidefsky 2009-12-07  534  out_up:
d8ed45c5dcd455 Michel Lespinasse  2020-06-08  535       mmap_read_unlock(mm);
50d7280d430484 Martin Schwidefsky 2009-12-07  536  out:
50d7280d430484 Martin Schwidefsky 2009-12-07  537       return fault;
^1da177e4c3f41 Linus Torvalds     2005-04-16  538  }
^1da177e4c3f41 Linus Torvalds     2005-04-16  539  

:::::: The code at line 517 was first introduced by commit
:::::: d8ed45c5dcd455fc5848d47f86883a1b872ac0d0 mmap locking API: use 
coccinelle to convert mmap_sem rwsem call sites

:::::: TO: Michel Lespinasse <[email protected]>
:::::: CC: Linus Torvalds <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to