mirror of
				https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux
				synced 2025-11-04 08:34:47 +10:00 
			
		
		
		
	Based on 1 normalized pattern(s): gplv2 extracted by the scancode license scanner the SPDX license identifier GPL-2.0-only has been chosen to replace the boilerplate/reference in 58 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Enrico Weigelt <info@metux.net> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190604081207.556988620@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
		
			
				
	
	
		
			66 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
// SPDX-License-Identifier: GPL-2.0-only
 | 
						|
///Find conditions where if and else branch are functionally
 | 
						|
// identical.
 | 
						|
//
 | 
						|
// There can be false positives in cases where the positional
 | 
						|
// information is used (as with lockdep) or where the identity
 | 
						|
// is a placeholder for not yet handled cases.
 | 
						|
// Unfortunately there also seems to be a tendency to use
 | 
						|
// the last if else/else as a "default behavior" - which some
 | 
						|
// might consider a legitimate coding pattern. From discussion
 | 
						|
// on kernelnewbies though it seems that this is not really an
 | 
						|
// accepted pattern and if at all it would need to be commented
 | 
						|
//
 | 
						|
// In the Linux kernel it does not seem to actually report
 | 
						|
// false positives except for those that were documented as
 | 
						|
// being intentional.
 | 
						|
// the two known cases are:
 | 
						|
//   arch/sh/kernel/traps_64.c:read_opcode()
 | 
						|
//        } else if ((pc & 1) == 0) {
 | 
						|
//              /* SHcompact */
 | 
						|
//              /* TODO : provide handling for this.  We don't really support
 | 
						|
//                 user-mode SHcompact yet, and for a kernel fault, this would
 | 
						|
//                 have to come from a module built for SHcompact.  */
 | 
						|
//              return -EFAULT;
 | 
						|
//      } else {
 | 
						|
//              /* misaligned */
 | 
						|
//              return -EFAULT;
 | 
						|
//      }
 | 
						|
//   fs/kernfs/file.c:kernfs_fop_open()
 | 
						|
//       * Both paths of the branch look the same.  They're supposed to
 | 
						|
//       * look that way and give @of->mutex different static lockdep keys.
 | 
						|
//       */
 | 
						|
//      if (has_mmap)
 | 
						|
//              mutex_init(&of->mutex);
 | 
						|
//      else
 | 
						|
//              mutex_init(&of->mutex);
 | 
						|
//
 | 
						|
// All other cases look like bugs or at least lack of documentation
 | 
						|
//
 | 
						|
// Confidence: Moderate
 | 
						|
// Copyright: (C) 2016 Nicholas Mc Guire, OSADL.
 | 
						|
// Comments:
 | 
						|
// Options: --no-includes --include-headers
 | 
						|
 | 
						|
virtual org
 | 
						|
virtual report
 | 
						|
 | 
						|
@cond@
 | 
						|
statement S1;
 | 
						|
position p;
 | 
						|
@@
 | 
						|
 | 
						|
* if@p (...) S1 else S1
 | 
						|
 | 
						|
@script:python depends on org@
 | 
						|
p << cond.p;
 | 
						|
@@
 | 
						|
 | 
						|
cocci.print_main("WARNING: possible condition with no effect (if == else)",p)
 | 
						|
 | 
						|
@script:python depends on report@
 | 
						|
p << cond.p;
 | 
						|
@@
 | 
						|
 | 
						|
coccilib.report.print_report(p[0],"WARNING: possible condition with no effect (if == else)")
 |