~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0-only
  2 /// Unsigned expressions cannot be lesser than zero. Presence of
  3 /// comparisons 'unsigned (<|<=|>|>=) 0' often indicates a bug,
  4 /// usually wrong type of variable.
  5 ///
  6 /// To reduce number of false positives following tests have been added:
  7 /// - parts of range checks are skipped, eg. "if (u < 0 || u > 15) ...",
  8 ///   developers prefer to keep such code,
  9 /// - comparisons "<= 0" and "> 0" are performed only on results of
 10 ///   signed functions/macros,
 11 /// - hardcoded list of signed functions/macros with always non-negative
 12 ///   result is used to avoid false positives difficult to detect by other ways
 13 ///
 14 // Confidence: Average
 15 // Copyright: (C) 2015 Andrzej Hajda, Samsung Electronics Co., Ltd.
 16 // URL: https://coccinelle.gitlabpages.inria.fr/website
 17 // Options: --all-includes
 18 
 19 virtual context
 20 virtual org
 21 virtual report
 22 
 23 @r_cmp@
 24 position p;
 25 typedef bool, u8, u16, u32, u64;
 26 {unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long,
 27         size_t, bool, u8, u16, u32, u64} v;
 28 expression e;
 29 @@
 30 
 31         \( v = e \| &v \)
 32         ...
 33         (\( v@p < 0 \| v@p <= 0 \| v@p >= 0 \| v@p > 0 \))
 34 
 35 @r@
 36 position r_cmp.p;
 37 typedef s8, s16, s32, s64;
 38 {char, short, int, long, long long, ssize_t, s8, s16, s32, s64} vs;
 39 expression c, e, v;
 40 identifier f !~ "^(ata_id_queue_depth|btrfs_copy_from_user|dma_map_sg|dma_map_sg_attrs|fls|fls64|gameport_time|get_write_extents|nla_len|ntoh24|of_flat_dt_match|of_get_child_count|uart_circ_chars_pending|[A-Z0-9_]+)$";
 41 @@
 42 
 43 (
 44         v = f(...)@vs;
 45         ... when != v = e;
 46 *       (\( v@p <=@e 0 \| v@p >@e 0 \))
 47         ... when any
 48 |
 49 (
 50         (\( v@p < 0 \| v@p <= 0 \)) || ... || (\( v >= c \| v > c \))
 51 |
 52         (\( v >= c \| v > c \)) || ... || (\( v@p < 0 \| v@p <= 0 \))
 53 |
 54         (\( v@p >= 0 \| v@p > 0 \)) && ... && (\( v < c \| v <= c \))
 55 |
 56         ((\( v < c \| v <= c \) && ... && \( v@p >= 0 \| v@p > 0 \)))
 57 |
 58 *       (\( v@p <@e 0 \| v@p >=@e 0 \))
 59 )
 60 )
 61 
 62 @script:python depends on org@
 63 p << r_cmp.p;
 64 e << r.e;
 65 @@
 66 
 67 msg = "WARNING: Unsigned expression compared with zero: %s" % (e)
 68 coccilib.org.print_todo(p[0], msg)
 69 
 70 @script:python depends on report@
 71 p << r_cmp.p;
 72 e << r.e;
 73 @@
 74 
 75 msg = "WARNING: Unsigned expression compared with zero: %s" % (e)
 76 coccilib.report.print_report(p[0], msg)

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php