aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/Kbuild.include21
-rw-r--r--scripts/Kconfig.include9
-rw-r--r--scripts/Makefile.build12
-rw-r--r--scripts/Makefile.extrawarn25
-rw-r--r--scripts/Makefile.host14
-rw-r--r--scripts/Makefile.kcov1
-rw-r--r--scripts/Makefile.lib30
-rw-r--r--scripts/Makefile.modbuiltin2
-rw-r--r--scripts/Makefile.modpost2
-rw-r--r--scripts/Makefile.ubsan1
-rwxr-xr-xscripts/adjust_autoksyms.sh4
-rw-r--r--scripts/asn1_compiler.c6
-rw-r--r--scripts/atomic/gen-atomics.sh2
-rw-r--r--scripts/basic/Makefile1
-rwxr-xr-xscripts/bootgraph.pl16
-rwxr-xr-xscripts/bpf_helpers_doc.py8
-rwxr-xr-xscripts/checkkconfigsymbols.py2
-rwxr-xr-xscripts/checkpatch.pl24
-rwxr-xr-xscripts/checkstack.pl2
-rw-r--r--scripts/coccinelle/api/alloc/alloc_cast.cocci5
-rw-r--r--scripts/coccinelle/api/alloc/pool_zalloc-simple.cocci3
-rw-r--r--scripts/coccinelle/api/alloc/zalloc-simple.cocci7
-rw-r--r--scripts/coccinelle/api/check_bq27xxx_data.cocci3
-rw-r--r--scripts/coccinelle/api/err_cast.cocci7
-rw-r--r--scripts/coccinelle/api/kstrdup.cocci7
-rw-r--r--scripts/coccinelle/api/memdup.cocci7
-rw-r--r--scripts/coccinelle/api/memdup_user.cocci7
-rw-r--r--scripts/coccinelle/api/platform_no_drv_owner.cocci3
-rw-r--r--scripts/coccinelle/api/pm_runtime.cocci3
-rw-r--r--scripts/coccinelle/api/ptr_ret.cocci5
-rw-r--r--scripts/coccinelle/api/resource_size.cocci7
-rw-r--r--scripts/coccinelle/api/stream_open.cocci363
-rw-r--r--scripts/coccinelle/free/clk_put.cocci5
-rw-r--r--scripts/coccinelle/free/devm_free.cocci5
-rw-r--r--scripts/coccinelle/free/ifnullfree.cocci3
-rw-r--r--scripts/coccinelle/free/iounmap.cocci5
-rw-r--r--scripts/coccinelle/free/kfree.cocci7
-rw-r--r--scripts/coccinelle/free/kfreeaddr.cocci3
-rw-r--r--scripts/coccinelle/free/pci_free_consistent.cocci3
-rw-r--r--scripts/coccinelle/free/put_device.cocci1
-rw-r--r--scripts/coccinelle/iterators/device_node_continue.cocci3
-rw-r--r--scripts/coccinelle/iterators/fen.cocci7
-rw-r--r--scripts/coccinelle/iterators/itnull.cocci7
-rw-r--r--scripts/coccinelle/iterators/list_entry_update.cocci7
-rw-r--r--scripts/coccinelle/iterators/use_after_iter.cocci5
-rw-r--r--scripts/coccinelle/locks/call_kern.cocci7
-rw-r--r--scripts/coccinelle/locks/double_lock.cocci7
-rw-r--r--scripts/coccinelle/locks/flags.cocci7
-rw-r--r--scripts/coccinelle/locks/mini_lock.cocci7
-rw-r--r--scripts/coccinelle/misc/array_size.cocci3
-rw-r--r--scripts/coccinelle/misc/badty.cocci5
-rw-r--r--scripts/coccinelle/misc/boolconv.cocci3
-rw-r--r--scripts/coccinelle/misc/boolinit.cocci5
-rw-r--r--scripts/coccinelle/misc/bugon.cocci3
-rw-r--r--scripts/coccinelle/misc/cond_no_effect.cocci3
-rw-r--r--scripts/coccinelle/misc/cstptr.cocci5
-rw-r--r--scripts/coccinelle/misc/doubleinit.cocci7
-rw-r--r--scripts/coccinelle/misc/ifaddr.cocci5
-rw-r--r--scripts/coccinelle/misc/ifcol.cocci7
-rw-r--r--scripts/coccinelle/misc/noderef.cocci5
-rw-r--r--scripts/coccinelle/misc/orplus.cocci5
-rw-r--r--scripts/coccinelle/misc/returnvar.cocci3
-rw-r--r--scripts/coccinelle/misc/semicolon.cocci3
-rw-r--r--scripts/coccinelle/misc/warn.cocci5
-rw-r--r--scripts/coccinelle/null/badzero.cocci5
-rw-r--r--scripts/coccinelle/null/deref_null.cocci7
-rw-r--r--scripts/coccinelle/null/eno.cocci7
-rw-r--r--scripts/coccinelle/null/kmerr.cocci7
-rw-r--r--scripts/coccinelle/tests/doublebitand.cocci7
-rw-r--r--scripts/coccinelle/tests/doubletest.cocci7
-rw-r--r--scripts/coccinelle/tests/odd_ptr_err.cocci5
-rw-r--r--scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci3
-rw-r--r--scripts/conmakehash.c5
-rwxr-xr-xscripts/decode_stacktrace.sh2
-rwxr-xr-xscripts/documentation-file-ref-check32
-rw-r--r--scripts/dtc/Makefile6
-rw-r--r--scripts/dtc/Makefile.dtc1
-rw-r--r--scripts/dtc/checks.c17
-rw-r--r--scripts/dtc/data.c17
-rwxr-xr-xscripts/dtc/dt_to_config3
-rw-r--r--scripts/dtc/dtc.c17
-rw-r--r--scripts/dtc/dtc.h17
-rwxr-xr-xscripts/dtc/dtx_diff4
-rw-r--r--scripts/dtc/fdtget.c16
-rw-r--r--scripts/dtc/fdtput.c16
-rw-r--r--scripts/dtc/flattree.c17
-rw-r--r--scripts/dtc/fstree.c17
-rw-r--r--scripts/dtc/libfdt/Makefile.libfdt1
-rw-r--r--scripts/dtc/livetree.c17
-rw-r--r--scripts/dtc/srcpos.c16
-rw-r--r--scripts/dtc/srcpos.h16
-rw-r--r--scripts/dtc/treesource.c17
-rw-r--r--scripts/dtc/util.c16
-rw-r--r--scripts/dtc/util.h16
-rw-r--r--scripts/dtc/yamltree.c16
-rwxr-xr-xscripts/export_report.pl2
-rwxr-xr-xscripts/extract-vmlinux2
-rwxr-xr-xscripts/extract_xc3028.pl2
-rw-r--r--scripts/gcc-plugins/Kconfig127
-rw-r--r--scripts/gcc-plugins/arm_ssp_per_task_plugin.c2
-rw-r--r--scripts/gcc-plugins/gcc-common.h4
-rw-r--r--scripts/gdb/Makefile1
-rw-r--r--scripts/gdb/linux/Makefile2
-rw-r--r--scripts/gdb/linux/clk.py76
-rw-r--r--scripts/gdb/linux/config.py44
-rw-r--r--scripts/gdb/linux/constants.py.in18
-rw-r--r--scripts/gdb/linux/cpus.py1
-rw-r--r--scripts/gdb/linux/lists.py26
-rw-r--r--scripts/gdb/linux/proc.py10
-rw-r--r--scripts/gdb/linux/rbtree.py177
-rw-r--r--scripts/gdb/linux/symbols.py6
-rw-r--r--scripts/gdb/linux/tasks.py2
-rw-r--r--scripts/gdb/linux/timerlist.py219
-rw-r--r--scripts/gdb/linux/utils.py7
-rw-r--r--scripts/gdb/vmlinux-gdb.py4
-rw-r--r--scripts/genksyms/Makefile4
-rw-r--r--scripts/genksyms/genksyms.c15
-rw-r--r--scripts/genksyms/genksyms.h15
-rw-r--r--scripts/genksyms/keywords.c1
-rwxr-xr-xscripts/get_dvb_firmware15
-rwxr-xr-xscripts/gfp-translate2
-rw-r--r--scripts/kconfig/Makefile8
-rw-r--r--scripts/kconfig/confdata.c134
-rw-r--r--scripts/kconfig/gconf.c2
-rw-r--r--scripts/kconfig/lexer.l3
-rw-r--r--scripts/kconfig/lkc.h1
-rw-r--r--scripts/kconfig/lxdialog/BIG.FAT.WARNING2
-rw-r--r--scripts/kconfig/lxdialog/inputbox.c3
-rw-r--r--scripts/kconfig/mconf.c2
-rwxr-xr-x[-rw-r--r--]scripts/kconfig/nconf-cfg.sh0
-rw-r--r--scripts/kconfig/nconf.c5
-rw-r--r--scripts/kconfig/nconf.gui.c3
-rw-r--r--scripts/kconfig/tests/err_recursive_inc/Kconfig1
-rw-r--r--scripts/kconfig/tests/err_recursive_inc/Kconfig.inc11
-rw-r--r--scripts/kconfig/tests/err_recursive_inc/Kconfig.inc21
-rw-r--r--scripts/kconfig/tests/err_recursive_inc/Kconfig.inc31
-rw-r--r--scripts/kconfig/tests/err_recursive_inc/expected_stderr6
-rwxr-xr-xscripts/leaking_addresses.pl2
-rwxr-xr-xscripts/link-vmlinux.sh28
-rwxr-xr-xscripts/markup_oops.pl5
-rwxr-xr-xscripts/mkmakefile26
-rw-r--r--scripts/mod/modpost.c2
-rwxr-xr-xscripts/modules-check.sh16
-rwxr-xr-xscripts/objdiff2
-rw-r--r--scripts/package/Makefile3
-rw-r--r--scripts/recordmcount.c2
-rw-r--r--scripts/recordmcount.h3
-rwxr-xr-xscripts/recordmcount.pl7
-rw-r--r--scripts/selinux/Makefile1
-rw-r--r--scripts/selinux/genheaders/genheaders.c1
-rwxr-xr-xscripts/selinux/install_policy.sh92
-rw-r--r--scripts/selinux/mdp/Makefile2
-rw-r--r--scripts/selinux/mdp/mdp.c187
-rwxr-xr-xscripts/show_delta2
-rw-r--r--scripts/sortextable.c2
-rw-r--r--scripts/sortextable.h4
-rwxr-xr-xscripts/spdxcheck.py7
-rwxr-xr-xscripts/sphinx-pre-install97
-rwxr-xr-xscripts/tags.sh3
-rwxr-xr-xscripts/tracing/draw_functrace.py2
160 files changed, 1736 insertions, 832 deletions
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
index 7484b9d8272f..f641bb0aa63f 100644
--- a/scripts/Kbuild.include
+++ b/scripts/Kbuild.include
@@ -1,3 +1,4 @@
1# SPDX-License-Identifier: GPL-2.0
1#### 2####
2# kbuild: Generic definitions 3# kbuild: Generic definitions
3 4
@@ -73,8 +74,13 @@ endef
73# Usage: CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu- m68k-linux-) 74# Usage: CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu- m68k-linux-)
74# Return first <prefix> where a <prefix>gcc is found in PATH. 75# Return first <prefix> where a <prefix>gcc is found in PATH.
75# If no gcc found in PATH with listed prefixes return nothing 76# If no gcc found in PATH with listed prefixes return nothing
77#
78# Note: '2>/dev/null' is here to force Make to invoke a shell. Otherwise, it
79# would try to directly execute the shell builtin 'command'. This workaround
80# should be kept for a long time since this issue was fixed only after the
81# GNU Make 4.2.1 release.
76cc-cross-prefix = $(firstword $(foreach c, $(filter-out -%, $(1)), \ 82cc-cross-prefix = $(firstword $(foreach c, $(filter-out -%, $(1)), \
77 $(if $(shell which $(c)gcc), $(c)))) 83 $(if $(shell command -v $(c)gcc 2>/dev/null), $(c))))
78 84
79# output directory for tests below 85# output directory for tests below
80TMPOUT := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/) 86TMPOUT := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/)
@@ -138,11 +144,6 @@ cc-disable-warning = $(call try-run,\
138# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1) 144# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
139cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || echo $(4)) 145cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || echo $(4))
140 146
141# cc-ldoption
142# Usage: ldflags += $(call cc-ldoption, -Wl$(comma)--hash-style=both)
143cc-ldoption = $(call try-run,\
144 $(CC) $(1) $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2))
145
146# ld-option 147# ld-option
147# Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y) 148# Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y)
148ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3)) 149ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3))
@@ -192,14 +193,6 @@ clean := -f $(srctree)/scripts/Makefile.clean obj
192# $(Q)$(MAKE) $(hdr-inst)=dir 193# $(Q)$(MAKE) $(hdr-inst)=dir
193hdr-inst := -f $(srctree)/scripts/Makefile.headersinst obj 194hdr-inst := -f $(srctree)/scripts/Makefile.headersinst obj
194 195
195# Prefix -I with $(srctree) if it is not an absolute path.
196# skip if -I has no parameter
197addtree = $(if $(patsubst -I%,%,$(1)), \
198$(if $(filter-out -I/% -I./% -I../%,$(1)),$(patsubst -I%,-I$(srctree)/%,$(1)),$(1)),$(1))
199
200# Find all -I options and call addtree
201flags = $(foreach o,$($(1)),$(if $(filter -I%,$(o)),$(call addtree,$(o)),$(o)))
202
203# echo command. 196# echo command.
204# Short version is used, if $(quiet) equals `quiet_', otherwise full one. 197# Short version is used, if $(quiet) equals `quiet_', otherwise full one.
205echo-cmd = $(if $($(quiet)cmd_$(1)),\ 198echo-cmd = $(if $($(quiet)cmd_$(1)),\
diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include
index 87ff1dcc6bd5..8a5c4d645eb1 100644
--- a/scripts/Kconfig.include
+++ b/scripts/Kconfig.include
@@ -1,3 +1,4 @@
1# SPDX-License-Identifier: GPL-2.0-only
1# Kconfig helper macros 2# Kconfig helper macros
2 3
3# Convenient variables 4# Convenient variables
@@ -18,6 +19,10 @@ if-success = $(shell,{ $(1); } >/dev/null 2>&1 && echo "$(2)" || echo "$(3)")
18# Return y if <command> exits with 0, n otherwise 19# Return y if <command> exits with 0, n otherwise
19success = $(if-success,$(1),y,n) 20success = $(if-success,$(1),y,n)
20 21
22# $(failure,<command>)
23# Return n if <command> exits with 0, y otherwise
24failure = $(if-success,$(1),n,y)
25
21# $(cc-option,<flag>) 26# $(cc-option,<flag>)
22# Return y if the compiler supports <flag>, n otherwise 27# Return y if the compiler supports <flag>, n otherwise
23cc-option = $(success,$(CC) -Werror $(1) -E -x c /dev/null -o /dev/null) 28cc-option = $(success,$(CC) -Werror $(1) -E -x c /dev/null -o /dev/null)
@@ -26,5 +31,9 @@ cc-option = $(success,$(CC) -Werror $(1) -E -x c /dev/null -o /dev/null)
26# Return y if the linker supports <flag>, n otherwise 31# Return y if the linker supports <flag>, n otherwise
27ld-option = $(success,$(LD) -v $(1)) 32ld-option = $(success,$(LD) -v $(1))
28 33
34# check if $(CC) and $(LD) exist
35$(error-if,$(failure,command -v $(CC)),compiler '$(CC)' not found)
36$(error-if,$(failure,command -v $(LD)),linker '$(LD)' not found)
37
29# gcc version including patch level 38# gcc version including patch level
30gcc-version := $(shell,$(srctree)/scripts/gcc-version.sh $(CC)) 39gcc-version := $(shell,$(srctree)/scripts/gcc-version.sh $(CC))
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 2554a15ecf2b..ae9cf740633e 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -199,11 +199,8 @@ sub_cmd_record_mcount = perl $(srctree)/scripts/recordmcount.pl "$(ARCH)" \
199 "$(if $(part-of-module),1,0)" "$(@)"; 199 "$(if $(part-of-module),1,0)" "$(@)";
200recordmcount_source := $(srctree)/scripts/recordmcount.pl 200recordmcount_source := $(srctree)/scripts/recordmcount.pl
201endif # BUILD_C_RECORDMCOUNT 201endif # BUILD_C_RECORDMCOUNT
202cmd_record_mcount = \ 202cmd_record_mcount = $(if $(findstring $(strip $(CC_FLAGS_FTRACE)),$(_c_flags)), \
203 if [ "$(findstring $(CC_FLAGS_FTRACE),$(_c_flags))" = \ 203 $(sub_cmd_record_mcount))
204 "$(CC_FLAGS_FTRACE)" ]; then \
205 $(sub_cmd_record_mcount) \
206 fi
207endif # CC_USING_RECORD_MCOUNT 204endif # CC_USING_RECORD_MCOUNT
208endif # CONFIG_FTRACE_MCOUNT_RECORD 205endif # CONFIG_FTRACE_MCOUNT_RECORD
209 206
@@ -225,6 +222,9 @@ endif
225ifdef CONFIG_RETPOLINE 222ifdef CONFIG_RETPOLINE
226 objtool_args += --retpoline 223 objtool_args += --retpoline
227endif 224endif
225ifdef CONFIG_X86_SMAP
226 objtool_args += --uaccess
227endif
228 228
229# 'OBJECT_FILES_NON_STANDARD := y': skip objtool checking for a directory 229# 'OBJECT_FILES_NON_STANDARD := y': skip objtool checking for a directory
230# 'OBJECT_FILES_NON_STANDARD_foo.o := 'y': skip objtool checking for a file 230# 'OBJECT_FILES_NON_STANDARD_foo.o := 'y': skip objtool checking for a file
@@ -504,7 +504,7 @@ existing-targets := $(wildcard $(sort $(targets)))
504 504
505-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd) 505-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
506 506
507ifneq ($(KBUILD_SRC),) 507ifneq ($(srctree),.)
508# Create directories for object files if they do not exist 508# Create directories for object files if they do not exist
509obj-dirs := $(sort $(obj) $(patsubst %/,%, $(dir $(targets)))) 509obj-dirs := $(sort $(obj) $(patsubst %/,%, $(dir $(targets))))
510# If targets exist, their directories apparently exist. Skip mkdir. 510# If targets exist, their directories apparently exist. Skip mkdir.
diff --git a/scripts/Makefile.extrawarn b/scripts/Makefile.extrawarn
index 768306add591..3ab8d1a303cd 100644
--- a/scripts/Makefile.extrawarn
+++ b/scripts/Makefile.extrawarn
@@ -23,15 +23,16 @@ warning- := $(empty)
23warning-1 := -Wextra -Wunused -Wno-unused-parameter 23warning-1 := -Wextra -Wunused -Wno-unused-parameter
24warning-1 += -Wmissing-declarations 24warning-1 += -Wmissing-declarations
25warning-1 += -Wmissing-format-attribute 25warning-1 += -Wmissing-format-attribute
26warning-1 += $(call cc-option, -Wmissing-prototypes) 26warning-1 += -Wmissing-prototypes
27warning-1 += -Wold-style-definition 27warning-1 += -Wold-style-definition
28warning-1 += $(call cc-option, -Wmissing-include-dirs) 28warning-1 += -Wmissing-include-dirs
29warning-1 += $(call cc-option, -Wunused-but-set-variable) 29warning-1 += $(call cc-option, -Wunused-but-set-variable)
30warning-1 += $(call cc-option, -Wunused-const-variable) 30warning-1 += $(call cc-option, -Wunused-const-variable)
31warning-1 += $(call cc-option, -Wpacked-not-aligned) 31warning-1 += $(call cc-option, -Wpacked-not-aligned)
32warning-1 += $(call cc-option, -Wstringop-truncation) 32warning-1 += $(call cc-option, -Wstringop-truncation)
33warning-1 += $(call cc-disable-warning, missing-field-initializers) 33# The following turn off the warnings enabled by -Wextra
34warning-1 += $(call cc-disable-warning, sign-compare) 34warning-1 += -Wno-missing-field-initializers
35warning-1 += -Wno-sign-compare
35 36
36warning-2 := -Waggregate-return 37warning-2 := -Waggregate-return
37warning-2 += -Wcast-align 38warning-2 += -Wcast-align
@@ -39,8 +40,8 @@ warning-2 += -Wdisabled-optimization
39warning-2 += -Wnested-externs 40warning-2 += -Wnested-externs
40warning-2 += -Wshadow 41warning-2 += -Wshadow
41warning-2 += $(call cc-option, -Wlogical-op) 42warning-2 += $(call cc-option, -Wlogical-op)
42warning-2 += $(call cc-option, -Wmissing-field-initializers) 43warning-2 += -Wmissing-field-initializers
43warning-2 += $(call cc-option, -Wsign-compare) 44warning-2 += -Wsign-compare
44warning-2 += $(call cc-option, -Wmaybe-uninitialized) 45warning-2 += $(call cc-option, -Wmaybe-uninitialized)
45warning-2 += $(call cc-option, -Wunused-macros) 46warning-2 += $(call cc-option, -Wunused-macros)
46 47
@@ -66,11 +67,11 @@ KBUILD_CFLAGS += $(warning)
66else 67else
67 68
68ifdef CONFIG_CC_IS_CLANG 69ifdef CONFIG_CC_IS_CLANG
69KBUILD_CFLAGS += $(call cc-disable-warning, initializer-overrides) 70KBUILD_CFLAGS += -Wno-initializer-overrides
70KBUILD_CFLAGS += $(call cc-disable-warning, unused-value) 71KBUILD_CFLAGS += -Wno-unused-value
71KBUILD_CFLAGS += $(call cc-disable-warning, format) 72KBUILD_CFLAGS += -Wno-format
72KBUILD_CFLAGS += $(call cc-disable-warning, sign-compare) 73KBUILD_CFLAGS += -Wno-sign-compare
73KBUILD_CFLAGS += $(call cc-disable-warning, format-zero-length) 74KBUILD_CFLAGS += -Wno-format-zero-length
74KBUILD_CFLAGS += $(call cc-disable-warning, uninitialized) 75KBUILD_CFLAGS += -Wno-uninitialized
75endif 76endif
76endif 77endif
diff --git a/scripts/Makefile.host b/scripts/Makefile.host
index a115259b57e7..b6a54bdf0965 100644
--- a/scripts/Makefile.host
+++ b/scripts/Makefile.host
@@ -67,18 +67,16 @@ _hostc_flags = $(KBUILD_HOSTCFLAGS) $(HOST_EXTRACFLAGS) \
67_hostcxx_flags = $(KBUILD_HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) \ 67_hostcxx_flags = $(KBUILD_HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) \
68 $(HOSTCXXFLAGS_$(basetarget).o) 68 $(HOSTCXXFLAGS_$(basetarget).o)
69 69
70__hostc_flags = $(_hostc_flags) 70# $(objtree)/$(obj) for including generated headers from checkin source files
71__hostcxx_flags = $(_hostcxx_flags)
72
73ifeq ($(KBUILD_EXTMOD),) 71ifeq ($(KBUILD_EXTMOD),)
74ifneq ($(KBUILD_SRC),) 72ifneq ($(srctree),.)
75__hostc_flags = -I$(obj) $(call flags,_hostc_flags) 73_hostc_flags += -I $(objtree)/$(obj)
76__hostcxx_flags = -I$(obj) $(call flags,_hostcxx_flags) 74_hostcxx_flags += -I $(objtree)/$(obj)
77endif 75endif
78endif 76endif
79 77
80hostc_flags = -Wp,-MD,$(depfile) $(__hostc_flags) 78hostc_flags = -Wp,-MD,$(depfile) $(_hostc_flags)
81hostcxx_flags = -Wp,-MD,$(depfile) $(__hostcxx_flags) 79hostcxx_flags = -Wp,-MD,$(depfile) $(_hostcxx_flags)
82 80
83##### 81#####
84# Compile programs on the host 82# Compile programs on the host
diff --git a/scripts/Makefile.kcov b/scripts/Makefile.kcov
index 3d61c4bfcbee..52b113302443 100644
--- a/scripts/Makefile.kcov
+++ b/scripts/Makefile.kcov
@@ -1,3 +1,4 @@
1# SPDX-License-Identifier: GPL-2.0-only
1ifdef CONFIG_KCOV 2ifdef CONFIG_KCOV
2 3
3kcov-flags-$(CONFIG_CC_HAS_SANCOV_TRACE_PC) += -fsanitize-coverage=trace-pc 4kcov-flags-$(CONFIG_CC_HAS_SANCOV_TRACE_PC) += -fsanitize-coverage=trace-pc
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 8a1f64f17740..f1f38c8cdc74 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -137,36 +137,26 @@ _c_flags += $(if $(patsubst n%,, \
137 $(CFLAGS_KCOV)) 137 $(CFLAGS_KCOV))
138endif 138endif
139 139
140__c_flags = $(_c_flags) 140# $(srctree)/$(src) for including checkin headers from generated source files
141__a_flags = $(_a_flags) 141# $(objtree)/$(obj) for including generated headers from checkin source files
142__cpp_flags = $(_cpp_flags)
143
144# If building the kernel in a separate objtree expand all occurrences
145# of -Idir to -I$(srctree)/dir except for absolute paths (starting with '/').
146ifeq ($(KBUILD_EXTMOD),) 142ifeq ($(KBUILD_EXTMOD),)
147ifneq ($(KBUILD_SRC),) 143ifneq ($(srctree),.)
148 144_c_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj)
149# -I$(obj) locates generated .h files 145_a_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj)
150# $(call addtree,-I$(obj)) locates .h files in srctree, from generated .c files 146_cpp_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj)
151# and locates generated .h files
152# FIXME: Replace both with specific CFLAGS* statements in the makefiles
153__c_flags = $(if $(obj),$(call addtree,-I$(src)) -I$(obj)) \
154 $(call flags,_c_flags)
155__a_flags = $(call flags,_a_flags)
156__cpp_flags = $(call flags,_cpp_flags)
157endif 147endif
158endif 148endif
159 149
160c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ 150c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
161 -include $(srctree)/include/linux/compiler_types.h \ 151 -include $(srctree)/include/linux/compiler_types.h \
162 $(__c_flags) $(modkern_cflags) \ 152 $(_c_flags) $(modkern_cflags) \
163 $(basename_flags) $(modname_flags) 153 $(basename_flags) $(modname_flags)
164 154
165a_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ 155a_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
166 $(__a_flags) $(modkern_aflags) 156 $(_a_flags) $(modkern_aflags)
167 157
168cpp_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ 158cpp_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
169 $(__cpp_flags) 159 $(_cpp_flags)
170 160
171ld_flags = $(KBUILD_LDFLAGS) $(ldflags-y) $(LDFLAGS_$(@F)) 161ld_flags = $(KBUILD_LDFLAGS) $(ldflags-y) $(LDFLAGS_$(@F))
172 162
@@ -308,7 +298,7 @@ DT_BINDING_DIR := Documentation/devicetree/bindings
308DT_TMP_SCHEMA := $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml 298DT_TMP_SCHEMA := $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml
309 299
310quiet_cmd_dtb_check = CHECK $@ 300quiet_cmd_dtb_check = CHECK $@
311 cmd_dtb_check = $(DT_CHECKER) -p $(DT_TMP_SCHEMA) $@ ; 301 cmd_dtb_check = $(DT_CHECKER) -u $(srctree)/$(DT_BINDING_DIR) -p $(DT_TMP_SCHEMA) $@ ;
312 302
313define rule_dtc_dt_yaml 303define rule_dtc_dt_yaml
314 $(call cmd_and_fixdep,dtc,yaml) 304 $(call cmd_and_fixdep,dtc,yaml)
diff --git a/scripts/Makefile.modbuiltin b/scripts/Makefile.modbuiltin
index a072a4267746..ea90a90b41a0 100644
--- a/scripts/Makefile.modbuiltin
+++ b/scripts/Makefile.modbuiltin
@@ -15,7 +15,7 @@ include include/config/tristate.conf
15 15
16include scripts/Kbuild.include 16include scripts/Kbuild.include
17 17
18ifneq ($(KBUILD_SRC),) 18ifneq ($(srctree),.)
19# Create output directory if not already present 19# Create output directory if not already present
20_dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj)) 20_dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj))
21endif 21endif
diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost
index 6b7f354f189a..fec6ec2ffa47 100644
--- a/scripts/Makefile.modpost
+++ b/scripts/Makefile.modpost
@@ -78,7 +78,7 @@ modpost = scripts/mod/modpost \
78 $(if $(KBUILD_EXTRA_SYMBOLS), $(patsubst %, -e %,$(KBUILD_EXTRA_SYMBOLS))) \ 78 $(if $(KBUILD_EXTRA_SYMBOLS), $(patsubst %, -e %,$(KBUILD_EXTRA_SYMBOLS))) \
79 $(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \ 79 $(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \
80 $(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E) \ 80 $(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E) \
81 $(if $(KBUILD_EXTMOD)$(KBUILD_MODPOST_WARN),-w) 81 $(if $(KBUILD_MODPOST_WARN),-w)
82 82
83MODPOST_OPT=$(subst -i,-n,$(filter -i,$(MAKEFLAGS))) 83MODPOST_OPT=$(subst -i,-n,$(filter -i,$(MAKEFLAGS)))
84 84
diff --git a/scripts/Makefile.ubsan b/scripts/Makefile.ubsan
index 38b2b4818e8e..019771b845c5 100644
--- a/scripts/Makefile.ubsan
+++ b/scripts/Makefile.ubsan
@@ -3,7 +3,6 @@ ifdef CONFIG_UBSAN
3 CFLAGS_UBSAN += $(call cc-option, -fsanitize=shift) 3 CFLAGS_UBSAN += $(call cc-option, -fsanitize=shift)
4 CFLAGS_UBSAN += $(call cc-option, -fsanitize=integer-divide-by-zero) 4 CFLAGS_UBSAN += $(call cc-option, -fsanitize=integer-divide-by-zero)
5 CFLAGS_UBSAN += $(call cc-option, -fsanitize=unreachable) 5 CFLAGS_UBSAN += $(call cc-option, -fsanitize=unreachable)
6 CFLAGS_UBSAN += $(call cc-option, -fsanitize=vla-bound)
7 CFLAGS_UBSAN += $(call cc-option, -fsanitize=signed-integer-overflow) 6 CFLAGS_UBSAN += $(call cc-option, -fsanitize=signed-integer-overflow)
8 CFLAGS_UBSAN += $(call cc-option, -fsanitize=bounds) 7 CFLAGS_UBSAN += $(call cc-option, -fsanitize=bounds)
9 CFLAGS_UBSAN += $(call cc-option, -fsanitize=object-size) 8 CFLAGS_UBSAN += $(call cc-option, -fsanitize=object-size)
diff --git a/scripts/adjust_autoksyms.sh b/scripts/adjust_autoksyms.sh
index 84bf6b500815..aab4e299d7a2 100755
--- a/scripts/adjust_autoksyms.sh
+++ b/scripts/adjust_autoksyms.sh
@@ -1,13 +1,11 @@
1#!/bin/sh 1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0-only
2 3
3# Script to create/update include/generated/autoksyms.h and dependency files 4# Script to create/update include/generated/autoksyms.h and dependency files
4# 5#
5# Copyright: (C) 2016 Linaro Limited 6# Copyright: (C) 2016 Linaro Limited
6# Created by: Nicolas Pitre, January 2016 7# Created by: Nicolas Pitre, January 2016
7# 8#
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License version 2 as
10# published by the Free Software Foundation.
11 9
12# Create/update the include/generated/autoksyms.h file from the list 10# Create/update the include/generated/autoksyms.h file from the list
13# of all module's needed symbols as recorded on the third line of 11# of all module's needed symbols as recorded on the third line of
diff --git a/scripts/asn1_compiler.c b/scripts/asn1_compiler.c
index 1b28787028d3..adabd4145264 100644
--- a/scripts/asn1_compiler.c
+++ b/scripts/asn1_compiler.c
@@ -1,12 +1,8 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
1/* Simplified ASN.1 notation parser 2/* Simplified ASN.1 notation parser
2 * 3 *
3 * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved. 4 * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved.
4 * Written by David Howells (dhowells@redhat.com) 5 * Written by David Howells (dhowells@redhat.com)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public Licence
8 * as published by the Free Software Foundation; either version
9 * 2 of the Licence, or (at your option) any later version.
10 */ 6 */
11 7
12#include <stdarg.h> 8#include <stdarg.h>
diff --git a/scripts/atomic/gen-atomics.sh b/scripts/atomic/gen-atomics.sh
index 27400b0cd732..000dc6437893 100644
--- a/scripts/atomic/gen-atomics.sh
+++ b/scripts/atomic/gen-atomics.sh
@@ -13,7 +13,7 @@ gen-atomic-long.sh asm-generic/atomic-long.h
13gen-atomic-fallback.sh linux/atomic-fallback.h 13gen-atomic-fallback.sh linux/atomic-fallback.h
14EOF 14EOF
15while read script header; do 15while read script header; do
16 ${ATOMICDIR}/${script} ${ATOMICTBL} > ${LINUXDIR}/include/${header} 16 /bin/sh ${ATOMICDIR}/${script} ${ATOMICTBL} > ${LINUXDIR}/include/${header}
17 HASH="$(sha1sum ${LINUXDIR}/include/${header})" 17 HASH="$(sha1sum ${LINUXDIR}/include/${header})"
18 HASH="${HASH%% *}" 18 HASH="${HASH%% *}"
19 printf "// %s\n" "${HASH}" >> ${LINUXDIR}/include/${header} 19 printf "// %s\n" "${HASH}" >> ${LINUXDIR}/include/${header}
diff --git a/scripts/basic/Makefile b/scripts/basic/Makefile
index af49b446f17d..548aeb592806 100644
--- a/scripts/basic/Makefile
+++ b/scripts/basic/Makefile
@@ -1,3 +1,4 @@
1# SPDX-License-Identifier: GPL-2.0-only
1### 2###
2# This Makefile lists the most basic programs used during the build process. 3# This Makefile lists the most basic programs used during the build process.
3# The programs listed herein are what are needed to do the basic stuff, 4# The programs listed herein are what are needed to do the basic stuff,
diff --git a/scripts/bootgraph.pl b/scripts/bootgraph.pl
index 594c55541b16..79c903292ae8 100755
--- a/scripts/bootgraph.pl
+++ b/scripts/bootgraph.pl
@@ -1,24 +1,10 @@
1#!/usr/bin/env perl 1#!/usr/bin/env perl
2# SPDX-License-Identifier: GPL-2.0-only
2 3
3# Copyright 2008, Intel Corporation 4# Copyright 2008, Intel Corporation
4# 5#
5# This file is part of the Linux kernel 6# This file is part of the Linux kernel
6# 7#
7# This program file is free software; you can redistribute it and/or modify it
8# under the terms of the GNU General Public License as published by the
9# Free Software Foundation; version 2 of the License.
10#
11# This program is distributed in the hope that it will be useful, but WITHOUT
12# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14# for more details.
15#
16# You should have received a copy of the GNU General Public License
17# along with this program in a file named COPYING; if not, write to the
18# Free Software Foundation, Inc.,
19# 51 Franklin Street, Fifth Floor,
20# Boston, MA 02110-1301 USA
21#
22# Authors: 8# Authors:
23# Arjan van de Ven <arjan@linux.intel.com> 9# Arjan van de Ven <arjan@linux.intel.com>
24 10
diff --git a/scripts/bpf_helpers_doc.py b/scripts/bpf_helpers_doc.py
index 5010a4d5bfba..894cc58c1a03 100755
--- a/scripts/bpf_helpers_doc.py
+++ b/scripts/bpf_helpers_doc.py
@@ -1,7 +1,7 @@
1#!/usr/bin/python3 1#!/usr/bin/python3
2# SPDX-License-Identifier: GPL-2.0-only 2# SPDX-License-Identifier: GPL-2.0-only
3# 3#
4# Copyright (C) 2018 Netronome Systems, Inc. 4# Copyright (C) 2018-2019 Netronome Systems, Inc.
5 5
6# In case user attempts to run with Python 2. 6# In case user attempts to run with Python 2.
7from __future__ import print_function 7from __future__ import print_function
@@ -39,7 +39,7 @@ class Helper(object):
39 Break down helper function protocol into smaller chunks: return type, 39 Break down helper function protocol into smaller chunks: return type,
40 name, distincts arguments. 40 name, distincts arguments.
41 """ 41 """
42 arg_re = re.compile('((const )?(struct )?(\w+|...))( (\**)(\w+))?$') 42 arg_re = re.compile('((\w+ )*?(\w+|...))( (\**)(\w+))?$')
43 res = {} 43 res = {}
44 proto_re = re.compile('(.+) (\**)(\w+)\(((([^,]+)(, )?){1,5})\)$') 44 proto_re = re.compile('(.+) (\**)(\w+)\(((([^,]+)(, )?){1,5})\)$')
45 45
@@ -54,8 +54,8 @@ class Helper(object):
54 capture = arg_re.match(a) 54 capture = arg_re.match(a)
55 res['args'].append({ 55 res['args'].append({
56 'type' : capture.group(1), 56 'type' : capture.group(1),
57 'star' : capture.group(6), 57 'star' : capture.group(5),
58 'name' : capture.group(7) 58 'name' : capture.group(6)
59 }) 59 })
60 60
61 return res 61 return res
diff --git a/scripts/checkkconfigsymbols.py b/scripts/checkkconfigsymbols.py
index 8cd16c65d3c5..00a10a293f4f 100755
--- a/scripts/checkkconfigsymbols.py
+++ b/scripts/checkkconfigsymbols.py
@@ -1,11 +1,11 @@
1#!/usr/bin/env python3 1#!/usr/bin/env python3
2# SPDX-License-Identifier: GPL-2.0-only
2 3
3"""Find Kconfig symbols that are referenced but not defined.""" 4"""Find Kconfig symbols that are referenced but not defined."""
4 5
5# (c) 2014-2017 Valentin Rothberg <valentinrothberg@gmail.com> 6# (c) 2014-2017 Valentin Rothberg <valentinrothberg@gmail.com>
6# (c) 2014 Stefan Hengelein <stefan.hengelein@fau.de> 7# (c) 2014 Stefan Hengelein <stefan.hengelein@fau.de>
7# 8#
8# Licensed under the terms of the GNU GPL License version 2
9 9
10 10
11import argparse 11import argparse
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 5b756278df13..342c7c781ba5 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -2687,6 +2687,24 @@ sub process {
2687 } else { 2687 } else {
2688 $signatures{$sig_nospace} = 1; 2688 $signatures{$sig_nospace} = 1;
2689 } 2689 }
2690
2691# Check Co-developed-by: immediately followed by Signed-off-by: with same name and email
2692 if ($sign_off =~ /^co-developed-by:$/i) {
2693 if ($email eq $author) {
2694 WARN("BAD_SIGN_OFF",
2695 "Co-developed-by: should not be used to attribute nominal patch author '$author'\n" . "$here\n" . $rawline);
2696 }
2697 if (!defined $lines[$linenr]) {
2698 WARN("BAD_SIGN_OFF",
2699 "Co-developed-by: must be immediately followed by Signed-off-by:\n" . "$here\n" . $rawline);
2700 } elsif ($rawlines[$linenr] !~ /^\s*signed-off-by:\s*(.*)/i) {
2701 WARN("BAD_SIGN_OFF",
2702 "Co-developed-by: must be immediately followed by Signed-off-by:\n" . "$here\n" . $rawline . "\n" .$rawlines[$linenr]);
2703 } elsif ($1 ne $email) {
2704 WARN("BAD_SIGN_OFF",
2705 "Co-developed-by and Signed-off-by: name/email do not match \n" . "$here\n" . $rawline . "\n" .$rawlines[$linenr]);
2706 }
2707 }
2690 } 2708 }
2691 2709
2692# Check email subject for common tools that don't need to be mentioned 2710# Check email subject for common tools that don't need to be mentioned
@@ -3009,7 +3027,7 @@ sub process {
3009 my @compats = $rawline =~ /\"([a-zA-Z0-9\-\,\.\+_]+)\"/g; 3027 my @compats = $rawline =~ /\"([a-zA-Z0-9\-\,\.\+_]+)\"/g;
3010 3028
3011 my $dt_path = $root . "/Documentation/devicetree/bindings/"; 3029 my $dt_path = $root . "/Documentation/devicetree/bindings/";
3012 my $vp_file = $dt_path . "vendor-prefixes.txt"; 3030 my $vp_file = $dt_path . "vendor-prefixes.yaml";
3013 3031
3014 foreach my $compat (@compats) { 3032 foreach my $compat (@compats) {
3015 my $compat2 = $compat; 3033 my $compat2 = $compat;
@@ -3024,7 +3042,7 @@ sub process {
3024 3042
3025 next if $compat !~ /^([a-zA-Z0-9\-]+)\,/; 3043 next if $compat !~ /^([a-zA-Z0-9\-]+)\,/;
3026 my $vendor = $1; 3044 my $vendor = $1;
3027 `grep -Eq "^$vendor\\b" $vp_file`; 3045 `grep -Eq "\\"\\^\Q$vendor\E,\\.\\*\\":" $vp_file`;
3028 if ( $? >> 8 ) { 3046 if ( $? >> 8 ) {
3029 WARN("UNDOCUMENTED_DT_STRING", 3047 WARN("UNDOCUMENTED_DT_STRING",
3030 "DT compatible string vendor \"$vendor\" appears un-documented -- check $vp_file\n" . $herecurr); 3048 "DT compatible string vendor \"$vendor\" appears un-documented -- check $vp_file\n" . $herecurr);
@@ -5977,7 +5995,7 @@ sub process {
5977 while ($fmt =~ /(\%[\*\d\.]*p(\w))/g) { 5995 while ($fmt =~ /(\%[\*\d\.]*p(\w))/g) {
5978 $specifier = $1; 5996 $specifier = $1;
5979 $extension = $2; 5997 $extension = $2;
5980 if ($extension !~ /[SsBKRraEhMmIiUDdgVCbGNOx]/) { 5998 if ($extension !~ /[SsBKRraEhMmIiUDdgVCbGNOxt]/) {
5981 $bad_specifier = $specifier; 5999 $bad_specifier = $specifier;
5982 last; 6000 last;
5983 } 6001 }
diff --git a/scripts/checkstack.pl b/scripts/checkstack.pl
index 122aef5e4e14..371bd17a4983 100755
--- a/scripts/checkstack.pl
+++ b/scripts/checkstack.pl
@@ -46,7 +46,7 @@ my (@stack, $re, $dre, $x, $xs, $funcre);
46 $x = "[0-9a-f]"; # hex character 46 $x = "[0-9a-f]"; # hex character
47 $xs = "[0-9a-f ]"; # hex character or space 47 $xs = "[0-9a-f ]"; # hex character or space
48 $funcre = qr/^$x* <(.*)>:$/; 48 $funcre = qr/^$x* <(.*)>:$/;
49 if ($arch eq 'aarch64') { 49 if ($arch =~ '^(aarch|arm)64$') {
50 #ffffffc0006325cc: a9bb7bfd stp x29, x30, [sp, #-80]! 50 #ffffffc0006325cc: a9bb7bfd stp x29, x30, [sp, #-80]!
51 #a110: d11643ff sub sp, sp, #0x590 51 #a110: d11643ff sub sp, sp, #0x590
52 $re = qr/^.*stp.*sp, \#-([0-9]{1,8})\]\!/o; 52 $re = qr/^.*stp.*sp, \#-([0-9]{1,8})\]\!/o;
diff --git a/scripts/coccinelle/api/alloc/alloc_cast.cocci b/scripts/coccinelle/api/alloc/alloc_cast.cocci
index 18fedf7c60ed..f6f0ccdb6409 100644
--- a/scripts/coccinelle/api/alloc/alloc_cast.cocci
+++ b/scripts/coccinelle/api/alloc/alloc_cast.cocci
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Remove casting the values returned by memory allocation functions 2/// Remove casting the values returned by memory allocation functions
2/// like kmalloc, kzalloc, kmem_cache_alloc, kmem_cache_zalloc etc. 3/// like kmalloc, kzalloc, kmem_cache_alloc, kmem_cache_zalloc etc.
3/// 4///
@@ -8,8 +9,8 @@
8//# need some reformatting. 9//# need some reformatting.
9// 10//
10// Confidence: High 11// Confidence: High
11// Copyright: (C) 2014 Himangi Saraogi GPLv2. 12// Copyright: (C) 2014 Himangi Saraogi
12// Copyright: (C) 2017 Himanshu Jha GPLv2. 13// Copyright: (C) 2017 Himanshu Jha
13// Comments: 14// Comments:
14// Options: --no-includes --include-headers 15// Options: --no-includes --include-headers
15// 16//
diff --git a/scripts/coccinelle/api/alloc/pool_zalloc-simple.cocci b/scripts/coccinelle/api/alloc/pool_zalloc-simple.cocci
index 9b7eb321a025..9c61a23b34db 100644
--- a/scripts/coccinelle/api/alloc/pool_zalloc-simple.cocci
+++ b/scripts/coccinelle/api/alloc/pool_zalloc-simple.cocci
@@ -1,7 +1,8 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// 2///
2/// Use *_pool_zalloc rather than *_pool_alloc followed by memset with 0 3/// Use *_pool_zalloc rather than *_pool_alloc followed by memset with 0
3/// 4///
4// Copyright: (C) 2015 Intel Corp. GPLv2. 5// Copyright: (C) 2015 Intel Corp.
5// Options: --no-includes --include-headers 6// Options: --no-includes --include-headers
6// 7//
7// Keywords: dma_pool_zalloc, pci_pool_zalloc 8// Keywords: dma_pool_zalloc, pci_pool_zalloc
diff --git a/scripts/coccinelle/api/alloc/zalloc-simple.cocci b/scripts/coccinelle/api/alloc/zalloc-simple.cocci
index 5cd1991c582e..26cda3f48f01 100644
--- a/scripts/coccinelle/api/alloc/zalloc-simple.cocci
+++ b/scripts/coccinelle/api/alloc/zalloc-simple.cocci
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// 2///
2/// Use zeroing allocator rather than allocator followed by memset with 0 3/// Use zeroing allocator rather than allocator followed by memset with 0
3/// 4///
@@ -6,9 +7,9 @@
6/// matched code has to be contiguous 7/// matched code has to be contiguous
7/// 8///
8// Confidence: High 9// Confidence: High
9// Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU. GPLv2. 10// Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU.
10// Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6. GPLv2. 11// Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6.
11// Copyright: (C) 2017 Himanshu Jha GPLv2. 12// Copyright: (C) 2017 Himanshu Jha
12// URL: http://coccinelle.lip6.fr/rules/kzalloc.html 13// URL: http://coccinelle.lip6.fr/rules/kzalloc.html
13// Options: --no-includes --include-headers 14// Options: --no-includes --include-headers
14// 15//
diff --git a/scripts/coccinelle/api/check_bq27xxx_data.cocci b/scripts/coccinelle/api/check_bq27xxx_data.cocci
index 9212b85169d2..fae539ef0ce5 100644
--- a/scripts/coccinelle/api/check_bq27xxx_data.cocci
+++ b/scripts/coccinelle/api/check_bq27xxx_data.cocci
@@ -1,10 +1,11 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Detect BQ27XXX_DATA structures with identical registers, dm registers or 2/// Detect BQ27XXX_DATA structures with identical registers, dm registers or
2/// properties. 3/// properties.
3//# Doesn't unfold macros used in register or property fields. 4//# Doesn't unfold macros used in register or property fields.
4//# Requires OCaml scripting 5//# Requires OCaml scripting
5/// 6///
6// Confidence: High 7// Confidence: High
7// Copyright: (C) 2017 Julia Lawall, Inria/LIP6, GPLv2. 8// Copyright: (C) 2017 Julia Lawall, Inria/LIP6,
8// URL: http://coccinelle.lip6.fr/ 9// URL: http://coccinelle.lip6.fr/
9// Requires: 1.0.7 10// Requires: 1.0.7
10// Keywords: BQ27XXX_DATA 11// Keywords: BQ27XXX_DATA
diff --git a/scripts/coccinelle/api/err_cast.cocci b/scripts/coccinelle/api/err_cast.cocci
index 2ce115000af6..0e661c8d8d6f 100644
--- a/scripts/coccinelle/api/err_cast.cocci
+++ b/scripts/coccinelle/api/err_cast.cocci
@@ -1,10 +1,11 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// 2///
2/// Use ERR_CAST inlined function instead of ERR_PTR(PTR_ERR(...)) 3/// Use ERR_CAST inlined function instead of ERR_PTR(PTR_ERR(...))
3/// 4///
4// Confidence: High 5// Confidence: High
5// Copyright: (C) 2009, 2010 Nicolas Palix, DIKU. GPLv2. 6// Copyright: (C) 2009, 2010 Nicolas Palix, DIKU.
6// Copyright: (C) 2009, 2010 Julia Lawall, DIKU. GPLv2. 7// Copyright: (C) 2009, 2010 Julia Lawall, DIKU.
7// Copyright: (C) 2009, 2010 Gilles Muller, INRIA/LiP6. GPLv2. 8// Copyright: (C) 2009, 2010 Gilles Muller, INRIA/LiP6.
8// URL: http://coccinelle.lip6.fr/ 9// URL: http://coccinelle.lip6.fr/
9// Options: 10// Options:
10// 11//
diff --git a/scripts/coccinelle/api/kstrdup.cocci b/scripts/coccinelle/api/kstrdup.cocci
index 09cba54ed0cf..888bf43df07e 100644
--- a/scripts/coccinelle/api/kstrdup.cocci
+++ b/scripts/coccinelle/api/kstrdup.cocci
@@ -1,9 +1,10 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Use kstrdup rather than duplicating its implementation 2/// Use kstrdup rather than duplicating its implementation
2/// 3///
3// Confidence: High 4// Confidence: High
4// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. 5// Copyright: (C) 2010-2012 Nicolas Palix.
5// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. 6// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
6// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. 7// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
7// URL: http://coccinelle.lip6.fr/ 8// URL: http://coccinelle.lip6.fr/
8// Comments: 9// Comments:
9// Options: --no-includes --include-headers 10// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/api/memdup.cocci b/scripts/coccinelle/api/memdup.cocci
index 8fd6437beda8..30b15df734e5 100644
--- a/scripts/coccinelle/api/memdup.cocci
+++ b/scripts/coccinelle/api/memdup.cocci
@@ -1,9 +1,10 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Use kmemdup rather than duplicating its implementation 2/// Use kmemdup rather than duplicating its implementation
2/// 3///
3// Confidence: High 4// Confidence: High
4// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. 5// Copyright: (C) 2010-2012 Nicolas Palix.
5// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. 6// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
6// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. 7// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
7// URL: http://coccinelle.lip6.fr/ 8// URL: http://coccinelle.lip6.fr/
8// Comments: 9// Comments:
9// Options: --no-includes --include-headers 10// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/api/memdup_user.cocci b/scripts/coccinelle/api/memdup_user.cocci
index 2a5aea8e8487..c809ab10bbce 100644
--- a/scripts/coccinelle/api/memdup_user.cocci
+++ b/scripts/coccinelle/api/memdup_user.cocci
@@ -1,10 +1,11 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Use memdup_user rather than duplicating its implementation 2/// Use memdup_user rather than duplicating its implementation
2/// This is a little bit restricted to reduce false positives 3/// This is a little bit restricted to reduce false positives
3/// 4///
4// Confidence: High 5// Confidence: High
5// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. 6// Copyright: (C) 2010-2012 Nicolas Palix.
6// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. 7// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
7// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. 8// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
8// URL: http://coccinelle.lip6.fr/ 9// URL: http://coccinelle.lip6.fr/
9// Comments: 10// Comments:
10// Options: --no-includes --include-headers 11// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/api/platform_no_drv_owner.cocci b/scripts/coccinelle/api/platform_no_drv_owner.cocci
index c5e3f73f2054..8fa050eeb7e5 100644
--- a/scripts/coccinelle/api/platform_no_drv_owner.cocci
+++ b/scripts/coccinelle/api/platform_no_drv_owner.cocci
@@ -1,7 +1,8 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Remove .owner field if calls are used which set it automatically 2/// Remove .owner field if calls are used which set it automatically
2/// 3///
3// Confidence: High 4// Confidence: High
4// Copyright: (C) 2014 Wolfram Sang. GPL v2. 5// Copyright: (C) 2014 Wolfram Sang.
5 6
6virtual patch 7virtual patch
7virtual context 8virtual context
diff --git a/scripts/coccinelle/api/pm_runtime.cocci b/scripts/coccinelle/api/pm_runtime.cocci
index d67ccf5f8227..1ccce3fd00b8 100644
--- a/scripts/coccinelle/api/pm_runtime.cocci
+++ b/scripts/coccinelle/api/pm_runtime.cocci
@@ -1,8 +1,9 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Make sure pm_runtime_* calls does not use unnecessary IS_ERR_VALUE 2/// Make sure pm_runtime_* calls does not use unnecessary IS_ERR_VALUE
2/// 3///
3// Keywords: pm_runtime 4// Keywords: pm_runtime
4// Confidence: Medium 5// Confidence: Medium
5// Copyright (C) 2013 Texas Instruments Incorporated - GPLv2. 6// Copyright (C) 2013 Texas Instruments Incorporated -
6// URL: http://coccinelle.lip6.fr/ 7// URL: http://coccinelle.lip6.fr/
7// Options: --include-headers 8// Options: --include-headers
8 9
diff --git a/scripts/coccinelle/api/ptr_ret.cocci b/scripts/coccinelle/api/ptr_ret.cocci
index dd58dab5d411..e76cd5d90a8a 100644
--- a/scripts/coccinelle/api/ptr_ret.cocci
+++ b/scripts/coccinelle/api/ptr_ret.cocci
@@ -1,9 +1,10 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// 2///
2/// Use PTR_ERR_OR_ZERO rather than if(IS_ERR(...)) + PTR_ERR 3/// Use PTR_ERR_OR_ZERO rather than if(IS_ERR(...)) + PTR_ERR
3/// 4///
4// Confidence: High 5// Confidence: High
5// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. 6// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
6// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. 7// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
7// URL: http://coccinelle.lip6.fr/ 8// URL: http://coccinelle.lip6.fr/
8// Options: --no-includes --include-headers 9// Options: --no-includes --include-headers
9// 10//
diff --git a/scripts/coccinelle/api/resource_size.cocci b/scripts/coccinelle/api/resource_size.cocci
index 1935a58b39d9..a9a571ac04ce 100644
--- a/scripts/coccinelle/api/resource_size.cocci
+++ b/scripts/coccinelle/api/resource_size.cocci
@@ -1,11 +1,12 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// 2///
2/// Use resource_size function on resource object 3/// Use resource_size function on resource object
3/// instead of explicit computation. 4/// instead of explicit computation.
4/// 5///
5// Confidence: High 6// Confidence: High
6// Copyright: (C) 2009, 2010 Nicolas Palix, DIKU. GPLv2. 7// Copyright: (C) 2009, 2010 Nicolas Palix, DIKU.
7// Copyright: (C) 2009, 2010 Julia Lawall, DIKU. GPLv2. 8// Copyright: (C) 2009, 2010 Julia Lawall, DIKU.
8// Copyright: (C) 2009, 2010 Gilles Muller, INRIA/LiP6. GPLv2. 9// Copyright: (C) 2009, 2010 Gilles Muller, INRIA/LiP6.
9// URL: http://coccinelle.lip6.fr/ 10// URL: http://coccinelle.lip6.fr/
10// Options: 11// Options:
11// 12//
diff --git a/scripts/coccinelle/api/stream_open.cocci b/scripts/coccinelle/api/stream_open.cocci
new file mode 100644
index 000000000000..350145da7669
--- /dev/null
+++ b/scripts/coccinelle/api/stream_open.cocci
@@ -0,0 +1,363 @@
1// SPDX-License-Identifier: GPL-2.0
2// Author: Kirill Smelkov (kirr@nexedi.com)
3//
4// Search for stream-like files that are using nonseekable_open and convert
5// them to stream_open. A stream-like file is a file that does not use ppos in
6// its read and write. Rationale for the conversion is to avoid deadlock in
7// between read and write.
8
9virtual report
10virtual patch
11virtual explain // explain decisions in the patch (SPFLAGS="-D explain")
12
13// stream-like reader & writer - ones that do not depend on f_pos.
14@ stream_reader @
15identifier readstream, ppos;
16identifier f, buf, len;
17type loff_t;
18@@
19 ssize_t readstream(struct file *f, char *buf, size_t len, loff_t *ppos)
20 {
21 ... when != ppos
22 }
23
24@ stream_writer @
25identifier writestream, ppos;
26identifier f, buf, len;
27type loff_t;
28@@
29 ssize_t writestream(struct file *f, const char *buf, size_t len, loff_t *ppos)
30 {
31 ... when != ppos
32 }
33
34
35// a function that blocks
36@ blocks @
37identifier block_f;
38identifier wait_event =~ "^wait_event_.*";
39@@
40 block_f(...) {
41 ... when exists
42 wait_event(...)
43 ... when exists
44 }
45
46// stream_reader that can block inside.
47//
48// XXX wait_* can be called not directly from current function (e.g. func -> f -> g -> wait())
49// XXX currently reader_blocks supports only direct and 1-level indirect cases.
50@ reader_blocks_direct @
51identifier stream_reader.readstream;
52identifier wait_event =~ "^wait_event_.*";
53@@
54 readstream(...)
55 {
56 ... when exists
57 wait_event(...)
58 ... when exists
59 }
60
61@ reader_blocks_1 @
62identifier stream_reader.readstream;
63identifier blocks.block_f;
64@@
65 readstream(...)
66 {
67 ... when exists
68 block_f(...)
69 ... when exists
70 }
71
72@ reader_blocks depends on reader_blocks_direct || reader_blocks_1 @
73identifier stream_reader.readstream;
74@@
75 readstream(...) {
76 ...
77 }
78
79
80// file_operations + whether they have _any_ .read, .write, .llseek ... at all.
81//
82// XXX add support for file_operations xxx[N] = ... (sound/core/pcm_native.c)
83@ fops0 @
84identifier fops;
85@@
86 struct file_operations fops = {
87 ...
88 };
89
90@ has_read @
91identifier fops0.fops;
92identifier read_f;
93@@
94 struct file_operations fops = {
95 .read = read_f,
96 };
97
98@ has_read_iter @
99identifier fops0.fops;
100identifier read_iter_f;
101@@
102 struct file_operations fops = {
103 .read_iter = read_iter_f,
104 };
105
106@ has_write @
107identifier fops0.fops;
108identifier write_f;
109@@
110 struct file_operations fops = {
111 .write = write_f,
112 };
113
114@ has_write_iter @
115identifier fops0.fops;
116identifier write_iter_f;
117@@
118 struct file_operations fops = {
119 .write_iter = write_iter_f,
120 };
121
122@ has_llseek @
123identifier fops0.fops;
124identifier llseek_f;
125@@
126 struct file_operations fops = {
127 .llseek = llseek_f,
128 };
129
130@ has_no_llseek @
131identifier fops0.fops;
132@@
133 struct file_operations fops = {
134 .llseek = no_llseek,
135 };
136
137@ has_mmap @
138identifier fops0.fops;
139identifier mmap_f;
140@@
141 struct file_operations fops = {
142 .mmap = mmap_f,
143 };
144
145@ has_copy_file_range @
146identifier fops0.fops;
147identifier copy_file_range_f;
148@@
149 struct file_operations fops = {
150 .copy_file_range = copy_file_range_f,
151 };
152
153@ has_remap_file_range @
154identifier fops0.fops;
155identifier remap_file_range_f;
156@@
157 struct file_operations fops = {
158 .remap_file_range = remap_file_range_f,
159 };
160
161@ has_splice_read @
162identifier fops0.fops;
163identifier splice_read_f;
164@@
165 struct file_operations fops = {
166 .splice_read = splice_read_f,
167 };
168
169@ has_splice_write @
170identifier fops0.fops;
171identifier splice_write_f;
172@@
173 struct file_operations fops = {
174 .splice_write = splice_write_f,
175 };
176
177
178// file_operations that is candidate for stream_open conversion - it does not
179// use mmap and other methods that assume @offset access to file.
180//
181// XXX for simplicity require no .{read/write}_iter and no .splice_{read/write} for now.
182// XXX maybe_steam.fops cannot be used in other rules - it gives "bad rule maybe_stream or bad variable fops".
183@ maybe_stream depends on (!has_llseek || has_no_llseek) && !has_mmap && !has_copy_file_range && !has_remap_file_range && !has_read_iter && !has_write_iter && !has_splice_read && !has_splice_write @
184identifier fops0.fops;
185@@
186 struct file_operations fops = {
187 };
188
189
190// ---- conversions ----
191
192// XXX .open = nonseekable_open -> .open = stream_open
193// XXX .open = func -> openfunc -> nonseekable_open
194
195// read & write
196//
197// if both are used in the same file_operations together with an opener -
198// under that conditions we can use stream_open instead of nonseekable_open.
199@ fops_rw depends on maybe_stream @
200identifier fops0.fops, openfunc;
201identifier stream_reader.readstream;
202identifier stream_writer.writestream;
203@@
204 struct file_operations fops = {
205 .open = openfunc,
206 .read = readstream,
207 .write = writestream,
208 };
209
210@ report_rw depends on report @
211identifier fops_rw.openfunc;
212position p1;
213@@
214 openfunc(...) {
215 <...
216 nonseekable_open@p1
217 ...>
218 }
219
220@ script:python depends on report && reader_blocks @
221fops << fops0.fops;
222p << report_rw.p1;
223@@
224coccilib.report.print_report(p[0],
225 "ERROR: %s: .read() can deadlock .write(); change nonseekable_open -> stream_open to fix." % (fops,))
226
227@ script:python depends on report && !reader_blocks @
228fops << fops0.fops;
229p << report_rw.p1;
230@@
231coccilib.report.print_report(p[0],
232 "WARNING: %s: .read() and .write() have stream semantic; safe to change nonseekable_open -> stream_open." % (fops,))
233
234
235@ explain_rw_deadlocked depends on explain && reader_blocks @
236identifier fops_rw.openfunc;
237@@
238 openfunc(...) {
239 <...
240- nonseekable_open
241+ nonseekable_open /* read & write (was deadlock) */
242 ...>
243 }
244
245
246@ explain_rw_nodeadlock depends on explain && !reader_blocks @
247identifier fops_rw.openfunc;
248@@
249 openfunc(...) {
250 <...
251- nonseekable_open
252+ nonseekable_open /* read & write (no direct deadlock) */
253 ...>
254 }
255
256@ patch_rw depends on patch @
257identifier fops_rw.openfunc;
258@@
259 openfunc(...) {
260 <...
261- nonseekable_open
262+ stream_open
263 ...>
264 }
265
266
267// read, but not write
268@ fops_r depends on maybe_stream && !has_write @
269identifier fops0.fops, openfunc;
270identifier stream_reader.readstream;
271@@
272 struct file_operations fops = {
273 .open = openfunc,
274 .read = readstream,
275 };
276
277@ report_r depends on report @
278identifier fops_r.openfunc;
279position p1;
280@@
281 openfunc(...) {
282 <...
283 nonseekable_open@p1
284 ...>
285 }
286
287@ script:python depends on report @
288fops << fops0.fops;
289p << report_r.p1;
290@@
291coccilib.report.print_report(p[0],
292 "WARNING: %s: .read() has stream semantic; safe to change nonseekable_open -> stream_open." % (fops,))
293
294@ explain_r depends on explain @
295identifier fops_r.openfunc;
296@@
297 openfunc(...) {
298 <...
299- nonseekable_open
300+ nonseekable_open /* read only */
301 ...>
302 }
303
304@ patch_r depends on patch @
305identifier fops_r.openfunc;
306@@
307 openfunc(...) {
308 <...
309- nonseekable_open
310+ stream_open
311 ...>
312 }
313
314
315// write, but not read
316@ fops_w depends on maybe_stream && !has_read @
317identifier fops0.fops, openfunc;
318identifier stream_writer.writestream;
319@@
320 struct file_operations fops = {
321 .open = openfunc,
322 .write = writestream,
323 };
324
325@ report_w depends on report @
326identifier fops_w.openfunc;
327position p1;
328@@
329 openfunc(...) {
330 <...
331 nonseekable_open@p1
332 ...>
333 }
334
335@ script:python depends on report @
336fops << fops0.fops;
337p << report_w.p1;
338@@
339coccilib.report.print_report(p[0],
340 "WARNING: %s: .write() has stream semantic; safe to change nonseekable_open -> stream_open." % (fops,))
341
342@ explain_w depends on explain @
343identifier fops_w.openfunc;
344@@
345 openfunc(...) {
346 <...
347- nonseekable_open
348+ nonseekable_open /* write only */
349 ...>
350 }
351
352@ patch_w depends on patch @
353identifier fops_w.openfunc;
354@@
355 openfunc(...) {
356 <...
357- nonseekable_open
358+ stream_open
359 ...>
360 }
361
362
363// no read, no write - don't change anything
diff --git a/scripts/coccinelle/free/clk_put.cocci b/scripts/coccinelle/free/clk_put.cocci
index 46747adfd20a..7237b49496f6 100644
--- a/scripts/coccinelle/free/clk_put.cocci
+++ b/scripts/coccinelle/free/clk_put.cocci
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Find missing clk_puts. 2/// Find missing clk_puts.
2/// 3///
3//# This only signals a missing clk_put when there is a clk_put later 4//# This only signals a missing clk_put when there is a clk_put later
@@ -5,8 +6,8 @@
5//# False positives can be due to loops. 6//# False positives can be due to loops.
6// 7//
7// Confidence: Moderate 8// Confidence: Moderate
8// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. 9// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
9// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. 10// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
10// URL: http://coccinelle.lip6.fr/ 11// URL: http://coccinelle.lip6.fr/
11// Comments: 12// Comments:
12// Options: 13// Options:
diff --git a/scripts/coccinelle/free/devm_free.cocci b/scripts/coccinelle/free/devm_free.cocci
index b2a2cf8bf81f..a5af9e335190 100644
--- a/scripts/coccinelle/free/devm_free.cocci
+++ b/scripts/coccinelle/free/devm_free.cocci
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Find uses of standard freeing functons on values allocated using devm_ 2/// Find uses of standard freeing functons on values allocated using devm_
2/// functions. Values allocated using the devm_functions are freed when 3/// functions. Values allocated using the devm_functions are freed when
3/// the device is detached, and thus the use of the standard freeing 4/// the device is detached, and thus the use of the standard freeing
@@ -14,8 +15,8 @@
14/// less reliable in these cases. 15/// less reliable in these cases.
15/// 16///
16// Confidence: Moderate 17// Confidence: Moderate
17// Copyright: (C) 2011 Julia Lawall, INRIA/LIP6. GPLv2. 18// Copyright: (C) 2011 Julia Lawall, INRIA/LIP6.
18// Copyright: (C) 2011 Gilles Muller, INRIA/LiP6. GPLv2. 19// Copyright: (C) 2011 Gilles Muller, INRIA/LiP6.
19// URL: http://coccinelle.lip6.fr/ 20// URL: http://coccinelle.lip6.fr/
20// Comments: 21// Comments:
21// Options: --no-includes --include-headers 22// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/free/ifnullfree.cocci b/scripts/coccinelle/free/ifnullfree.cocci
index a70e123cb12b..b3290c4ee239 100644
--- a/scripts/coccinelle/free/ifnullfree.cocci
+++ b/scripts/coccinelle/free/ifnullfree.cocci
@@ -1,10 +1,11 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// NULL check before some freeing functions is not needed. 2/// NULL check before some freeing functions is not needed.
2/// 3///
3/// Based on checkpatch warning 4/// Based on checkpatch warning
4/// "kfree(NULL) is safe this check is probably not required" 5/// "kfree(NULL) is safe this check is probably not required"
5/// and kfreeaddr.cocci by Julia Lawall. 6/// and kfreeaddr.cocci by Julia Lawall.
6/// 7///
7// Copyright: (C) 2014 Fabian Frederick. GPLv2. 8// Copyright: (C) 2014 Fabian Frederick.
8// Comments: - 9// Comments: -
9// Options: --no-includes --include-headers 10// Options: --no-includes --include-headers
10 11
diff --git a/scripts/coccinelle/free/iounmap.cocci b/scripts/coccinelle/free/iounmap.cocci
index 5384f4ba1192..0e60e1113a1d 100644
--- a/scripts/coccinelle/free/iounmap.cocci
+++ b/scripts/coccinelle/free/iounmap.cocci
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Find missing iounmaps. 2/// Find missing iounmaps.
2/// 3///
3//# This only signals a missing iounmap when there is an iounmap later 4//# This only signals a missing iounmap when there is an iounmap later
@@ -5,8 +6,8 @@
5//# False positives can be due to loops. 6//# False positives can be due to loops.
6// 7//
7// Confidence: Moderate 8// Confidence: Moderate
8// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. 9// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
9// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. 10// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
10// URL: http://coccinelle.lip6.fr/ 11// URL: http://coccinelle.lip6.fr/
11// Comments: 12// Comments:
12// Options: 13// Options:
diff --git a/scripts/coccinelle/free/kfree.cocci b/scripts/coccinelle/free/kfree.cocci
index ac438da4fd7b..e9d50e718e46 100644
--- a/scripts/coccinelle/free/kfree.cocci
+++ b/scripts/coccinelle/free/kfree.cocci
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Find a use after free. 2/// Find a use after free.
2//# Values of variables may imply that some 3//# Values of variables may imply that some
3//# execution paths are not possible, resulting in false positives. 4//# execution paths are not possible, resulting in false positives.
@@ -5,9 +6,9 @@
5//# SCTP_DBG_OBJCNT_DEC that do not actually evaluate their argument 6//# SCTP_DBG_OBJCNT_DEC that do not actually evaluate their argument
6/// 7///
7// Confidence: Moderate 8// Confidence: Moderate
8// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. 9// Copyright: (C) 2010-2012 Nicolas Palix.
9// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. 10// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
10// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. 11// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
11// URL: http://coccinelle.lip6.fr/ 12// URL: http://coccinelle.lip6.fr/
12// Comments: 13// Comments:
13// Options: --no-includes --include-headers 14// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/free/kfreeaddr.cocci b/scripts/coccinelle/free/kfreeaddr.cocci
index d46063b1db8b..cfaf308328d8 100644
--- a/scripts/coccinelle/free/kfreeaddr.cocci
+++ b/scripts/coccinelle/free/kfreeaddr.cocci
@@ -1,7 +1,8 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Free of a structure field 2/// Free of a structure field
2/// 3///
3// Confidence: High 4// Confidence: High
4// Copyright: (C) 2013 Julia Lawall, INRIA/LIP6. GPLv2. 5// Copyright: (C) 2013 Julia Lawall, INRIA/LIP6.
5// URL: http://coccinelle.lip6.fr/ 6// URL: http://coccinelle.lip6.fr/
6// Comments: 7// Comments:
7// Options: --no-includes --include-headers 8// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/free/pci_free_consistent.cocci b/scripts/coccinelle/free/pci_free_consistent.cocci
index 43600ccb62a8..d51e92556b42 100644
--- a/scripts/coccinelle/free/pci_free_consistent.cocci
+++ b/scripts/coccinelle/free/pci_free_consistent.cocci
@@ -1,7 +1,8 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Find missing pci_free_consistent for every pci_alloc_consistent. 2/// Find missing pci_free_consistent for every pci_alloc_consistent.
2/// 3///
3// Confidence: Moderate 4// Confidence: Moderate
4// Copyright: (C) 2013 Petr Strnad. GPLv2. 5// Copyright: (C) 2013 Petr Strnad.
5// URL: http://coccinelle.lip6.fr/ 6// URL: http://coccinelle.lip6.fr/
6// Keywords: pci_free_consistent, pci_alloc_consistent 7// Keywords: pci_free_consistent, pci_alloc_consistent
7// Options: --no-includes --include-headers 8// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/free/put_device.cocci b/scripts/coccinelle/free/put_device.cocci
index 7395697e7f19..c9f071b0a0ab 100644
--- a/scripts/coccinelle/free/put_device.cocci
+++ b/scripts/coccinelle/free/put_device.cocci
@@ -32,6 +32,7 @@ if (id == NULL || ...) { ... return ...; }
32( id 32( id
33| (T2)dev_get_drvdata(&id->dev) 33| (T2)dev_get_drvdata(&id->dev)
34| (T3)platform_get_drvdata(id) 34| (T3)platform_get_drvdata(id)
35| &id->dev
35); 36);
36| return@p2 ...; 37| return@p2 ...;
37) 38)
diff --git a/scripts/coccinelle/iterators/device_node_continue.cocci b/scripts/coccinelle/iterators/device_node_continue.cocci
index a36c16db171b..f8cd14dfa604 100644
--- a/scripts/coccinelle/iterators/device_node_continue.cocci
+++ b/scripts/coccinelle/iterators/device_node_continue.cocci
@@ -1,8 +1,9 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Device node iterators put the previous value of the index variable, so an 2/// Device node iterators put the previous value of the index variable, so an
2/// explicit put causes a double put. 3/// explicit put causes a double put.
3/// 4///
4// Confidence: High 5// Confidence: High
5// Copyright: (C) 2015 Julia Lawall, Inria. GPLv2. 6// Copyright: (C) 2015 Julia Lawall, Inria.
6// URL: http://coccinelle.lip6.fr/ 7// URL: http://coccinelle.lip6.fr/
7// Options: --no-includes --include-headers 8// Options: --no-includes --include-headers
8// Requires: 1.0.4 9// Requires: 1.0.4
diff --git a/scripts/coccinelle/iterators/fen.cocci b/scripts/coccinelle/iterators/fen.cocci
index 48c152f224e1..b69f9665f4fb 100644
--- a/scripts/coccinelle/iterators/fen.cocci
+++ b/scripts/coccinelle/iterators/fen.cocci
@@ -1,10 +1,11 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// These iterators only exit normally when the loop cursor is NULL, so there 2/// These iterators only exit normally when the loop cursor is NULL, so there
2/// is no point to call of_node_put on the final value. 3/// is no point to call of_node_put on the final value.
3/// 4///
4// Confidence: High 5// Confidence: High
5// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. 6// Copyright: (C) 2010-2012 Nicolas Palix.
6// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. 7// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
7// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. 8// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
8// URL: http://coccinelle.lip6.fr/ 9// URL: http://coccinelle.lip6.fr/
9// Comments: 10// Comments:
10// Options: --no-includes --include-headers 11// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/iterators/itnull.cocci b/scripts/coccinelle/iterators/itnull.cocci
index f58732b56a40..9b362b98d7a1 100644
--- a/scripts/coccinelle/iterators/itnull.cocci
+++ b/scripts/coccinelle/iterators/itnull.cocci
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Many iterators have the property that the first argument is always bound 2/// Many iterators have the property that the first argument is always bound
2/// to a real list element, never NULL. 3/// to a real list element, never NULL.
3//# False positives arise for some iterators that do not have this property, 4//# False positives arise for some iterators that do not have this property,
@@ -6,9 +7,9 @@
6//# or return). 7//# or return).
7/// 8///
8// Confidence: Moderate 9// Confidence: Moderate
9// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. 10// Copyright: (C) 2010-2012 Nicolas Palix.
10// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. 11// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
11// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. 12// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
12// URL: http://coccinelle.lip6.fr/ 13// URL: http://coccinelle.lip6.fr/
13// Comments: 14// Comments:
14// Options: --no-includes --include-headers 15// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/iterators/list_entry_update.cocci b/scripts/coccinelle/iterators/list_entry_update.cocci
index be6f9f1abb34..d62e8a16085f 100644
--- a/scripts/coccinelle/iterators/list_entry_update.cocci
+++ b/scripts/coccinelle/iterators/list_entry_update.cocci
@@ -1,12 +1,13 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// list_for_each_entry uses its first argument to get from one element of 2/// list_for_each_entry uses its first argument to get from one element of
2/// the list to the next, so it is usually not a good idea to reassign it. 3/// the list to the next, so it is usually not a good idea to reassign it.
3/// The first rule finds such a reassignment and the second rule checks 4/// The first rule finds such a reassignment and the second rule checks
4/// that there is a path from the reassignment back to the top of the loop. 5/// that there is a path from the reassignment back to the top of the loop.
5/// 6///
6// Confidence: High 7// Confidence: High
7// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. 8// Copyright: (C) 2010 Nicolas Palix, DIKU.
8// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. 9// Copyright: (C) 2010 Julia Lawall, DIKU.
9// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. 10// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.
10// URL: http://coccinelle.lip6.fr/ 11// URL: http://coccinelle.lip6.fr/
11// Comments: 12// Comments:
12// Options: --no-includes --include-headers 13// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/iterators/use_after_iter.cocci b/scripts/coccinelle/iterators/use_after_iter.cocci
index 66a1140474c8..9be48b520879 100644
--- a/scripts/coccinelle/iterators/use_after_iter.cocci
+++ b/scripts/coccinelle/iterators/use_after_iter.cocci
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// If list_for_each_entry, etc complete a traversal of the list, the iterator 2/// If list_for_each_entry, etc complete a traversal of the list, the iterator
2/// variable ends up pointing to an address at an offset from the list head, 3/// variable ends up pointing to an address at an offset from the list head,
3/// and not a meaningful structure. Thus this value should not be used after 4/// and not a meaningful structure. Thus this value should not be used after
@@ -7,8 +8,8 @@
7//#may also cause a report to be a false positive. 8//#may also cause a report to be a false positive.
8/// 9///
9// Confidence: Moderate 10// Confidence: Moderate
10// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. 11// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
11// Copyright: (C) 2012 Gilles Muller, INRIA/LIP6. GPLv2. 12// Copyright: (C) 2012 Gilles Muller, INRIA/LIP6.
12// URL: http://coccinelle.lip6.fr/ 13// URL: http://coccinelle.lip6.fr/
13// Comments: 14// Comments:
14// Options: --no-includes --include-headers 15// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/locks/call_kern.cocci b/scripts/coccinelle/locks/call_kern.cocci
index 669b24436248..5ca0d81b0015 100644
--- a/scripts/coccinelle/locks/call_kern.cocci
+++ b/scripts/coccinelle/locks/call_kern.cocci
@@ -1,12 +1,13 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Find functions that refer to GFP_KERNEL but are called with locks held. 2/// Find functions that refer to GFP_KERNEL but are called with locks held.
2//# The proposed change of converting the GFP_KERNEL is not necessarily the 3//# The proposed change of converting the GFP_KERNEL is not necessarily the
3//# correct one. It may be desired to unlock the lock, or to not call the 4//# correct one. It may be desired to unlock the lock, or to not call the
4//# function under the lock in the first place. 5//# function under the lock in the first place.
5/// 6///
6// Confidence: Moderate 7// Confidence: Moderate
7// Copyright: (C) 2012 Nicolas Palix. GPLv2. 8// Copyright: (C) 2012 Nicolas Palix.
8// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. 9// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
9// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. 10// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
10// URL: http://coccinelle.lip6.fr/ 11// URL: http://coccinelle.lip6.fr/
11// Comments: 12// Comments:
12// Options: --no-includes --include-headers 13// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/locks/double_lock.cocci b/scripts/coccinelle/locks/double_lock.cocci
index 002752f97dca..9e88a578957c 100644
--- a/scripts/coccinelle/locks/double_lock.cocci
+++ b/scripts/coccinelle/locks/double_lock.cocci
@@ -1,11 +1,12 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Find double locks. False positives may occur when some paths cannot 2/// Find double locks. False positives may occur when some paths cannot
2/// occur at execution, due to the values of variables, and when there is 3/// occur at execution, due to the values of variables, and when there is
3/// an intervening function call that releases the lock. 4/// an intervening function call that releases the lock.
4/// 5///
5// Confidence: Moderate 6// Confidence: Moderate
6// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. 7// Copyright: (C) 2010 Nicolas Palix, DIKU.
7// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. 8// Copyright: (C) 2010 Julia Lawall, DIKU.
8// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. 9// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.
9// URL: http://coccinelle.lip6.fr/ 10// URL: http://coccinelle.lip6.fr/
10// Comments: 11// Comments:
11// Options: --no-includes --include-headers 12// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/locks/flags.cocci b/scripts/coccinelle/locks/flags.cocci
index debd70e46267..7f990cd55f5a 100644
--- a/scripts/coccinelle/locks/flags.cocci
+++ b/scripts/coccinelle/locks/flags.cocci
@@ -1,9 +1,10 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Find nested lock+irqsave functions that use the same flags variables 2/// Find nested lock+irqsave functions that use the same flags variables
2/// 3///
3// Confidence: High 4// Confidence: High
4// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. 5// Copyright: (C) 2010-2012 Nicolas Palix.
5// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. 6// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
6// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. 7// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
7// URL: http://coccinelle.lip6.fr/ 8// URL: http://coccinelle.lip6.fr/
8// Comments: 9// Comments:
9// Options: --no-includes --include-headers 10// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/locks/mini_lock.cocci b/scripts/coccinelle/locks/mini_lock.cocci
index 19c6ee5b986b..c3ad098f4a5b 100644
--- a/scripts/coccinelle/locks/mini_lock.cocci
+++ b/scripts/coccinelle/locks/mini_lock.cocci
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Find missing unlocks. This semantic match considers the specific case 2/// Find missing unlocks. This semantic match considers the specific case
2/// where the unlock is missing from an if branch, and there is a lock 3/// where the unlock is missing from an if branch, and there is a lock
3/// before the if and an unlock after the if. False positives are due to 4/// before the if and an unlock after the if. False positives are due to
@@ -6,9 +7,9 @@
6/// function call that releases the lock. 7/// function call that releases the lock.
7/// 8///
8// Confidence: Moderate 9// Confidence: Moderate
9// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. 10// Copyright: (C) 2010-2012 Nicolas Palix.
10// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. 11// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
11// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. 12// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
12// URL: http://coccinelle.lip6.fr/ 13// URL: http://coccinelle.lip6.fr/
13// Comments: 14// Comments:
14// Options: --no-includes --include-headers 15// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/misc/array_size.cocci b/scripts/coccinelle/misc/array_size.cocci
index 09520f0941f0..4d2518749696 100644
--- a/scripts/coccinelle/misc/array_size.cocci
+++ b/scripts/coccinelle/misc/array_size.cocci
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element 2/// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element
2/// 3///
3//# This makes an effort to find cases where ARRAY_SIZE can be used such as 4//# This makes an effort to find cases where ARRAY_SIZE can be used such as
@@ -6,7 +7,7 @@
6//# division of the two sizeofs by ARRAY_SIZE. 7//# division of the two sizeofs by ARRAY_SIZE.
7// 8//
8// Confidence: High 9// Confidence: High
9// Copyright: (C) 2014 Himangi Saraogi. GPLv2. 10// Copyright: (C) 2014 Himangi Saraogi.
10// Comments: 11// Comments:
11// Options: --no-includes --include-headers 12// Options: --no-includes --include-headers
12 13
diff --git a/scripts/coccinelle/misc/badty.cocci b/scripts/coccinelle/misc/badty.cocci
index 481cf301ccfc..ed3e0b8f3b1a 100644
--- a/scripts/coccinelle/misc/badty.cocci
+++ b/scripts/coccinelle/misc/badty.cocci
@@ -1,4 +1,5 @@
1/// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element 1// SPDX-License-Identifier: GPL-2.0-only
2/// Correct the size argument to alloc functions
2/// 3///
3//# This makes an effort to find cases where the argument to sizeof is wrong 4//# This makes an effort to find cases where the argument to sizeof is wrong
4//# in memory allocation functions by checking the type of the allocated memory 5//# in memory allocation functions by checking the type of the allocated memory
@@ -8,7 +9,7 @@
8//# may need some reformatting. 9//# may need some reformatting.
9// 10//
10// Confidence: Moderate 11// Confidence: Moderate
11// Copyright: (C) 2014 Himangi Saraogi. GPLv2. 12// Copyright: (C) 2014 Himangi Saraogi.
12// Comments: 13// Comments:
13// Options: 14// Options:
14 15
diff --git a/scripts/coccinelle/misc/boolconv.cocci b/scripts/coccinelle/misc/boolconv.cocci
index 33c464d6bc71..392994e93a19 100644
--- a/scripts/coccinelle/misc/boolconv.cocci
+++ b/scripts/coccinelle/misc/boolconv.cocci
@@ -1,9 +1,10 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Remove unneeded conversion to bool 2/// Remove unneeded conversion to bool
2/// 3///
3//# Relational and logical operators evaluate to bool, 4//# Relational and logical operators evaluate to bool,
4//# explicit conversion is overly verbose and unneeded. 5//# explicit conversion is overly verbose and unneeded.
5// 6//
6// Copyright: (C) 2016 Andrew F. Davis <afd@ti.com> GPLv2. 7// Copyright: (C) 2016 Andrew F. Davis <afd@ti.com>
7 8
8virtual patch 9virtual patch
9virtual context 10virtual context
diff --git a/scripts/coccinelle/misc/boolinit.cocci b/scripts/coccinelle/misc/boolinit.cocci
index aabb581fab5c..fed6126e2b9d 100644
--- a/scripts/coccinelle/misc/boolinit.cocci
+++ b/scripts/coccinelle/misc/boolinit.cocci
@@ -1,10 +1,11 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Bool initializations should use true and false. Bool tests don't need 2/// Bool initializations should use true and false. Bool tests don't need
2/// comparisons. Based on contributions from Joe Perches, Rusty Russell 3/// comparisons. Based on contributions from Joe Perches, Rusty Russell
3/// and Bruce W Allan. 4/// and Bruce W Allan.
4/// 5///
5// Confidence: High 6// Confidence: High
6// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. 7// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
7// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. 8// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
8// URL: http://coccinelle.lip6.fr/ 9// URL: http://coccinelle.lip6.fr/
9// Options: --include-headers 10// Options: --include-headers
10 11
diff --git a/scripts/coccinelle/misc/bugon.cocci b/scripts/coccinelle/misc/bugon.cocci
index 741586094abe..8d595c358408 100644
--- a/scripts/coccinelle/misc/bugon.cocci
+++ b/scripts/coccinelle/misc/bugon.cocci
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Use BUG_ON instead of a if condition followed by BUG. 2/// Use BUG_ON instead of a if condition followed by BUG.
2/// 3///
3//# This makes an effort to find cases where BUG() follows an if 4//# This makes an effort to find cases where BUG() follows an if
@@ -6,7 +7,7 @@
6//# as argument. 7//# as argument.
7// 8//
8// Confidence: High 9// Confidence: High
9// Copyright: (C) 2014 Himangi Saraogi. GPLv2. 10// Copyright: (C) 2014 Himangi Saraogi.
10// Comments: 11// Comments:
11// Options: --no-includes --include-headers 12// Options: --no-includes --include-headers
12 13
diff --git a/scripts/coccinelle/misc/cond_no_effect.cocci b/scripts/coccinelle/misc/cond_no_effect.cocci
index 8467dbd1c465..91d16a81d1da 100644
--- a/scripts/coccinelle/misc/cond_no_effect.cocci
+++ b/scripts/coccinelle/misc/cond_no_effect.cocci
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1///Find conditions where if and else branch are functionally 2///Find conditions where if and else branch are functionally
2// identical. 3// identical.
3// 4//
@@ -37,7 +38,7 @@
37// All other cases look like bugs or at least lack of documentation 38// All other cases look like bugs or at least lack of documentation
38// 39//
39// Confidence: Moderate 40// Confidence: Moderate
40// Copyright: (C) 2016 Nicholas Mc Guire, OSADL. GPLv2. 41// Copyright: (C) 2016 Nicholas Mc Guire, OSADL.
41// Comments: 42// Comments:
42// Options: --no-includes --include-headers 43// Options: --no-includes --include-headers
43 44
diff --git a/scripts/coccinelle/misc/cstptr.cocci b/scripts/coccinelle/misc/cstptr.cocci
index f0368b3d4563..c52e3c8ca9b3 100644
--- a/scripts/coccinelle/misc/cstptr.cocci
+++ b/scripts/coccinelle/misc/cstptr.cocci
@@ -1,9 +1,10 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// PTR_ERR should be applied before its argument is reassigned, typically 2/// PTR_ERR should be applied before its argument is reassigned, typically
2/// to NULL 3/// to NULL
3/// 4///
4// Confidence: High 5// Confidence: High
5// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. 6// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
6// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. 7// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
7// URL: http://coccinelle.lip6.fr/ 8// URL: http://coccinelle.lip6.fr/
8// Comments: 9// Comments:
9// Options: --no-includes --include-headers 10// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/misc/doubleinit.cocci b/scripts/coccinelle/misc/doubleinit.cocci
index c0c3371d25e0..2f80d3ab38dd 100644
--- a/scripts/coccinelle/misc/doubleinit.cocci
+++ b/scripts/coccinelle/misc/doubleinit.cocci
@@ -1,11 +1,12 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Find duplicate field initializations. This has a high rate of false 2/// Find duplicate field initializations. This has a high rate of false
2/// positives due to #ifdefs, which Coccinelle is not aware of in a structure 3/// positives due to #ifdefs, which Coccinelle is not aware of in a structure
3/// initialization. 4/// initialization.
4/// 5///
5// Confidence: Low 6// Confidence: Low
6// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. 7// Copyright: (C) 2010-2012 Nicolas Palix.
7// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. 8// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
8// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. 9// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
9// URL: http://coccinelle.lip6.fr/ 10// URL: http://coccinelle.lip6.fr/
10// Comments: requires at least Coccinelle 0.2.4, lex or parse error otherwise 11// Comments: requires at least Coccinelle 0.2.4, lex or parse error otherwise
11// Options: --no-includes --include-headers 12// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/misc/ifaddr.cocci b/scripts/coccinelle/misc/ifaddr.cocci
index c2663c677ac1..fc92e8fcbfcb 100644
--- a/scripts/coccinelle/misc/ifaddr.cocci
+++ b/scripts/coccinelle/misc/ifaddr.cocci
@@ -1,8 +1,9 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// The address of a variable or field is likely always to be non-zero. 2/// The address of a variable or field is likely always to be non-zero.
2/// 3///
3// Confidence: High 4// Confidence: High
4// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. 5// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
5// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. 6// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
6// URL: http://coccinelle.lip6.fr/ 7// URL: http://coccinelle.lip6.fr/
7// Comments: 8// Comments:
8// Options: --no-includes --include-headers 9// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/misc/ifcol.cocci b/scripts/coccinelle/misc/ifcol.cocci
index ffe75407c5d2..da0351ed5740 100644
--- a/scripts/coccinelle/misc/ifcol.cocci
+++ b/scripts/coccinelle/misc/ifcol.cocci
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Find confusingly indented code in or after an if. An if branch should 2/// Find confusingly indented code in or after an if. An if branch should
2/// be indented. The code following an if should not be indented. 3/// be indented. The code following an if should not be indented.
3/// Sometimes, code after an if that is indented is actually intended to be 4/// Sometimes, code after an if that is indented is actually intended to be
@@ -8,9 +9,9 @@
8//# is not visually aligned may be considered to be in the same column. 9//# is not visually aligned may be considered to be in the same column.
9// 10//
10// Confidence: Low 11// Confidence: Low
11// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. 12// Copyright: (C) 2010 Nicolas Palix, DIKU.
12// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. 13// Copyright: (C) 2010 Julia Lawall, DIKU.
13// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. 14// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.
14// URL: http://coccinelle.lip6.fr/ 15// URL: http://coccinelle.lip6.fr/
15// Comments: 16// Comments:
16// Options: --no-includes --include-headers 17// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/misc/noderef.cocci b/scripts/coccinelle/misc/noderef.cocci
index 007f0de0c715..72de62a77a44 100644
--- a/scripts/coccinelle/misc/noderef.cocci
+++ b/scripts/coccinelle/misc/noderef.cocci
@@ -1,9 +1,10 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// sizeof when applied to a pointer typed expression gives the size of 2/// sizeof when applied to a pointer typed expression gives the size of
2/// the pointer 3/// the pointer
3/// 4///
4// Confidence: High 5// Confidence: High
5// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. 6// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
6// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. 7// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
7// URL: http://coccinelle.lip6.fr/ 8// URL: http://coccinelle.lip6.fr/
8// Comments: 9// Comments:
9// Options: --no-includes --include-headers 10// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/misc/orplus.cocci b/scripts/coccinelle/misc/orplus.cocci
index 08de5be73693..52203dc2ca4b 100644
--- a/scripts/coccinelle/misc/orplus.cocci
+++ b/scripts/coccinelle/misc/orplus.cocci
@@ -1,10 +1,11 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Check for constants that are added but are used elsewhere as bitmasks 2/// Check for constants that are added but are used elsewhere as bitmasks
2/// The results should be checked manually to ensure that the nonzero 3/// The results should be checked manually to ensure that the nonzero
3/// bits in the two constants are actually disjoint. 4/// bits in the two constants are actually disjoint.
4/// 5///
5// Confidence: Moderate 6// Confidence: Moderate
6// Copyright: (C) 2013 Julia Lawall, INRIA/LIP6. GPLv2. 7// Copyright: (C) 2013 Julia Lawall, INRIA/LIP6.
7// Copyright: (C) 2013 Gilles Muller, INRIA/LIP6. GPLv2. 8// Copyright: (C) 2013 Gilles Muller, INRIA/LIP6.
8// URL: http://coccinelle.lip6.fr/ 9// URL: http://coccinelle.lip6.fr/
9// Comments: 10// Comments:
10// Options: --no-includes --include-headers 11// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/misc/returnvar.cocci b/scripts/coccinelle/misc/returnvar.cocci
index d8286ef5307f..ce0d9eebc7e1 100644
--- a/scripts/coccinelle/misc/returnvar.cocci
+++ b/scripts/coccinelle/misc/returnvar.cocci
@@ -1,8 +1,9 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// 2///
2/// Remove unneeded variable used to store return value. 3/// Remove unneeded variable used to store return value.
3/// 4///
4// Confidence: Moderate 5// Confidence: Moderate
5// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2. 6// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6.
6// URL: http://coccinelle.lip6.fr/ 7// URL: http://coccinelle.lip6.fr/
7// Comments: Comments on code can be deleted if near code that is removed. 8// Comments: Comments on code can be deleted if near code that is removed.
8// "when strict" can be removed to get more hits, but adds false 9// "when strict" can be removed to get more hits, but adds false
diff --git a/scripts/coccinelle/misc/semicolon.cocci b/scripts/coccinelle/misc/semicolon.cocci
index 6740c659a2b3..a53edb026dad 100644
--- a/scripts/coccinelle/misc/semicolon.cocci
+++ b/scripts/coccinelle/misc/semicolon.cocci
@@ -1,8 +1,9 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// 2///
2/// Remove unneeded semicolon. 3/// Remove unneeded semicolon.
3/// 4///
4// Confidence: Moderate 5// Confidence: Moderate
5// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2. 6// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6.
6// URL: http://coccinelle.lip6.fr/ 7// URL: http://coccinelle.lip6.fr/
7// Comments: Some false positives on empty default cases in switch statements. 8// Comments: Some false positives on empty default cases in switch statements.
8// Options: --no-includes --include-headers 9// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/misc/warn.cocci b/scripts/coccinelle/misc/warn.cocci
index d2e5b6cedb84..e379661e240d 100644
--- a/scripts/coccinelle/misc/warn.cocci
+++ b/scripts/coccinelle/misc/warn.cocci
@@ -1,8 +1,9 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Use WARN(1,...) rather than printk followed by WARN_ON(1) 2/// Use WARN(1,...) rather than printk followed by WARN_ON(1)
2/// 3///
3// Confidence: High 4// Confidence: High
4// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. 5// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
5// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. 6// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
6// URL: http://coccinelle.lip6.fr/ 7// URL: http://coccinelle.lip6.fr/
7// Comments: 8// Comments:
8// Options: --no-includes --include-headers 9// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/null/badzero.cocci b/scripts/coccinelle/null/badzero.cocci
index f597c8007b76..882dd65313ab 100644
--- a/scripts/coccinelle/null/badzero.cocci
+++ b/scripts/coccinelle/null/badzero.cocci
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Compare pointer-typed values to NULL rather than 0 2/// Compare pointer-typed values to NULL rather than 0
2/// 3///
3//# This makes an effort to choose between !x and x == NULL. !x is used 4//# This makes an effort to choose between !x and x == NULL. !x is used
@@ -7,8 +8,8 @@
7//# include path. 8//# include path.
8// 9//
9// Confidence: High 10// Confidence: High
10// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. 11// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
11// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. 12// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
12// URL: http://coccinelle.lip6.fr/ 13// URL: http://coccinelle.lip6.fr/
13// Requires: 1.0.0 14// Requires: 1.0.0
14// Options: 15// Options:
diff --git a/scripts/coccinelle/null/deref_null.cocci b/scripts/coccinelle/null/deref_null.cocci
index cbc6184e69ef..98f1e7faf503 100644
--- a/scripts/coccinelle/null/deref_null.cocci
+++ b/scripts/coccinelle/null/deref_null.cocci
@@ -1,11 +1,12 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// 2///
2/// A variable is dereferenced under a NULL test. 3/// A variable is dereferenced under a NULL test.
3/// Even though it is known to be NULL. 4/// Even though it is known to be NULL.
4/// 5///
5// Confidence: Moderate 6// Confidence: Moderate
6// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. 7// Copyright: (C) 2010 Nicolas Palix, DIKU.
7// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. 8// Copyright: (C) 2010 Julia Lawall, DIKU.
8// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. 9// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.
9// URL: http://coccinelle.lip6.fr/ 10// URL: http://coccinelle.lip6.fr/
10// Comments: -I ... -all_includes can give more complete results 11// Comments: -I ... -all_includes can give more complete results
11// Options: 12// Options:
diff --git a/scripts/coccinelle/null/eno.cocci b/scripts/coccinelle/null/eno.cocci
index 9bd29aa83399..81584ff87956 100644
--- a/scripts/coccinelle/null/eno.cocci
+++ b/scripts/coccinelle/null/eno.cocci
@@ -1,9 +1,10 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// The various basic memory allocation functions don't return ERR_PTR 2/// The various basic memory allocation functions don't return ERR_PTR
2/// 3///
3// Confidence: High 4// Confidence: High
4// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. 5// Copyright: (C) 2010-2012 Nicolas Palix.
5// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. 6// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
6// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. 7// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
7// URL: http://coccinelle.lip6.fr/ 8// URL: http://coccinelle.lip6.fr/
8// Comments: 9// Comments:
9// Options: --no-includes --include-headers 10// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/null/kmerr.cocci b/scripts/coccinelle/null/kmerr.cocci
index 5354a7903ccb..d0e004d4e130 100644
--- a/scripts/coccinelle/null/kmerr.cocci
+++ b/scripts/coccinelle/null/kmerr.cocci
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// This semantic patch looks for kmalloc etc that are not followed by a 2/// This semantic patch looks for kmalloc etc that are not followed by a
2/// NULL check. It only gives a report in the case where there is some 3/// NULL check. It only gives a report in the case where there is some
3/// error handling code later in the function, which may be helpful 4/// error handling code later in the function, which may be helpful
@@ -5,9 +6,9 @@
5/// should be. 6/// should be.
6/// 7///
7// Confidence: High 8// Confidence: High
8// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. 9// Copyright: (C) 2010 Nicolas Palix, DIKU.
9// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. 10// Copyright: (C) 2010 Julia Lawall, DIKU.
10// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. 11// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.
11// URL: http://coccinelle.lip6.fr/ 12// URL: http://coccinelle.lip6.fr/
12// Comments: 13// Comments:
13// Options: --no-includes --include-headers 14// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/tests/doublebitand.cocci b/scripts/coccinelle/tests/doublebitand.cocci
index 72f1572aaec3..0f0b94e7debd 100644
--- a/scripts/coccinelle/tests/doublebitand.cocci
+++ b/scripts/coccinelle/tests/doublebitand.cocci
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Find bit operations that include the same argument more than once 2/// Find bit operations that include the same argument more than once
2//# One source of false positives is when the argument performs a side 3//# One source of false positives is when the argument performs a side
3//# effect. Another source of false positives is when a neutral value 4//# effect. Another source of false positives is when a neutral value
@@ -5,9 +6,9 @@
5//# same structure as other similar expressions 6//# same structure as other similar expressions
6/// 7///
7// Confidence: Moderate 8// Confidence: Moderate
8// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. 9// Copyright: (C) 2010 Nicolas Palix, DIKU.
9// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. 10// Copyright: (C) 2010 Julia Lawall, DIKU.
10// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. 11// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.
11// URL: http://coccinelle.lip6.fr/ 12// URL: http://coccinelle.lip6.fr/
12// Comments: 13// Comments:
13// Options: --no-includes --include-headers 14// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/tests/doubletest.cocci b/scripts/coccinelle/tests/doubletest.cocci
index 7af2ce7eb9bf..b35519cddb13 100644
--- a/scripts/coccinelle/tests/doubletest.cocci
+++ b/scripts/coccinelle/tests/doubletest.cocci
@@ -1,12 +1,13 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Find &&/|| operations that include the same argument more than once 2/// Find &&/|| operations that include the same argument more than once
2//# A common source of false positives is when the expression, or 3//# A common source of false positives is when the expression, or
3//# another expresssion in the same && or || operation, performs a 4//# another expresssion in the same && or || operation, performs a
4//# side effect. 5//# side effect.
5/// 6///
6// Confidence: Moderate 7// Confidence: Moderate
7// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. 8// Copyright: (C) 2010 Nicolas Palix, DIKU.
8// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. 9// Copyright: (C) 2010 Julia Lawall, DIKU.
9// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. 10// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.
10// URL: http://coccinelle.lip6.fr/ 11// URL: http://coccinelle.lip6.fr/
11// Comments: 12// Comments:
12// Options: --no-includes --include-headers 13// Options: --no-includes --include-headers
diff --git a/scripts/coccinelle/tests/odd_ptr_err.cocci b/scripts/coccinelle/tests/odd_ptr_err.cocci
index dfc6b40c2969..11d4e2b6deb8 100644
--- a/scripts/coccinelle/tests/odd_ptr_err.cocci
+++ b/scripts/coccinelle/tests/odd_ptr_err.cocci
@@ -1,10 +1,11 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// PTR_ERR should access the value just tested by IS_ERR 2/// PTR_ERR should access the value just tested by IS_ERR
2//# There can be false positives in the patch case, where it is the call to 3//# There can be false positives in the patch case, where it is the call to
3//# IS_ERR that is wrong. 4//# IS_ERR that is wrong.
4/// 5///
5// Confidence: High 6// Confidence: High
6// Copyright: (C) 2012, 2015 Julia Lawall, INRIA. GPLv2. 7// Copyright: (C) 2012, 2015 Julia Lawall, INRIA.
7// Copyright: (C) 2012, 2015 Gilles Muller, INRIA. GPLv2. 8// Copyright: (C) 2012, 2015 Gilles Muller, INRIA.
8// URL: http://coccinelle.lip6.fr/ 9// URL: http://coccinelle.lip6.fr/
9// Options: --no-includes --include-headers 10// Options: --no-includes --include-headers
10 11
diff --git a/scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci b/scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci
index 8fa5a3c7b784..91e286ace54c 100644
--- a/scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci
+++ b/scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/// Unsigned expressions cannot be lesser than zero. Presence of 2/// Unsigned expressions cannot be lesser than zero. Presence of
2/// comparisons 'unsigned (<|<=|>|>=) 0' often indicates a bug, 3/// comparisons 'unsigned (<|<=|>|>=) 0' often indicates a bug,
3/// usually wrong type of variable. 4/// usually wrong type of variable.
@@ -11,7 +12,7 @@
11/// result is used to avoid false positives difficult to detect by other ways 12/// result is used to avoid false positives difficult to detect by other ways
12/// 13///
13// Confidence: Average 14// Confidence: Average
14// Copyright: (C) 2015 Andrzej Hajda, Samsung Electronics Co., Ltd. GPLv2. 15// Copyright: (C) 2015 Andrzej Hajda, Samsung Electronics Co., Ltd.
15// URL: http://coccinelle.lip6.fr/ 16// URL: http://coccinelle.lip6.fr/
16// Options: --all-includes 17// Options: --all-includes
17 18
diff --git a/scripts/conmakehash.c b/scripts/conmakehash.c
index 61bbda54cf13..cddd789fe46e 100644
--- a/scripts/conmakehash.c
+++ b/scripts/conmakehash.c
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
1/* 2/*
2 * conmakehash.c 3 * conmakehash.c
3 * 4 *
@@ -8,10 +9,6 @@
8 * just for this seems like massive overkill. 9 * just for this seems like massive overkill.
9 * 10 *
10 * Copyright (C) 1995-1997 H. Peter Anvin 11 * Copyright (C) 1995-1997 H. Peter Anvin
11 *
12 * This program is a part of the Linux kernel, and may be freely
13 * copied under the terms of the GNU General Public License (GPL),
14 * version 2, or at your option any later version.
15 */ 12 */
16 13
17#include <stdio.h> 14#include <stdio.h>
diff --git a/scripts/decode_stacktrace.sh b/scripts/decode_stacktrace.sh
index bcdd45df3f51..a7a36209a193 100755
--- a/scripts/decode_stacktrace.sh
+++ b/scripts/decode_stacktrace.sh
@@ -73,7 +73,7 @@ parse_symbol() {
73 if [[ "${cache[$module,$address]+isset}" == "isset" ]]; then 73 if [[ "${cache[$module,$address]+isset}" == "isset" ]]; then
74 local code=${cache[$module,$address]} 74 local code=${cache[$module,$address]}
75 else 75 else
76 local code=$(addr2line -i -e "$objfile" "$address") 76 local code=$(${CROSS_COMPILE}addr2line -i -e "$objfile" "$address")
77 cache[$module,$address]=$code 77 cache[$module,$address]=$code
78 fi 78 fi
79 79
diff --git a/scripts/documentation-file-ref-check b/scripts/documentation-file-ref-check
index ad9db6821824..63e9542656f1 100755
--- a/scripts/documentation-file-ref-check
+++ b/scripts/documentation-file-ref-check
@@ -30,6 +30,34 @@ print "Finding broken references. This may take a while... " if ($fix);
30 30
31my %broken_ref; 31my %broken_ref;
32 32
33my $doc_fix = 0;
34
35open IN, "git grep ':doc:\`' Documentation/|"
36 or die "Failed to run git grep";
37while (<IN>) {
38 next if (!m,^([^:]+):.*\:doc\:\`([^\`]+)\`,);
39
40 my $d = $1;
41 my $doc_ref = $2;
42
43 my $f = $doc_ref;
44
45 $d =~ s,(.*/).*,$1,;
46 $f =~ s,.*\<([^\>]+)\>,$1,;
47
48 $f ="$d$f.rst";
49
50 next if (grep -e, glob("$f"));
51
52 if ($fix && !$doc_fix) {
53 print STDERR "\nWARNING: Currently, can't fix broken :doc:`` fields\n";
54 }
55 $doc_fix++;
56
57 print STDERR "$f: :doc:`$doc_ref`\n";
58}
59close IN;
60
33open IN, "git grep 'Documentation/'|" 61open IN, "git grep 'Documentation/'|"
34 or die "Failed to run git grep"; 62 or die "Failed to run git grep";
35while (<IN>) { 63while (<IN>) {
@@ -38,6 +66,9 @@ while (<IN>) {
38 my $f = $1; 66 my $f = $1;
39 my $ln = $2; 67 my $ln = $2;
40 68
69 # On linux-next, discard the Next/ directory
70 next if ($f =~ m,^Next/,);
71
41 # Makefiles and scripts contain nasty expressions to parse docs 72 # Makefiles and scripts contain nasty expressions to parse docs
42 next if ($f =~ m/Makefile/ || $f =~ m/\.sh$/); 73 next if ($f =~ m/Makefile/ || $f =~ m/\.sh$/);
43 74
@@ -100,6 +131,7 @@ while (<IN>) {
100 } 131 }
101 } 132 }
102} 133}
134close IN;
103 135
104exit 0 if (!$fix); 136exit 0 if (!$fix);
105 137
diff --git a/scripts/dtc/Makefile b/scripts/dtc/Makefile
index 5f227d8d39d8..82160808765c 100644
--- a/scripts/dtc/Makefile
+++ b/scripts/dtc/Makefile
@@ -9,7 +9,7 @@ dtc-objs := dtc.o flattree.o fstree.o data.o livetree.o treesource.o \
9dtc-objs += dtc-lexer.lex.o dtc-parser.tab.o 9dtc-objs += dtc-lexer.lex.o dtc-parser.tab.o
10 10
11# Source files need to get at the userspace version of libfdt_env.h to compile 11# Source files need to get at the userspace version of libfdt_env.h to compile
12HOST_EXTRACFLAGS := -I$(src)/libfdt 12HOST_EXTRACFLAGS := -I $(srctree)/$(src)/libfdt
13 13
14ifeq ($(wildcard /usr/include/yaml.h),) 14ifeq ($(wildcard /usr/include/yaml.h),)
15ifneq ($(CHECK_DTBS),) 15ifneq ($(CHECK_DTBS),)
@@ -23,8 +23,8 @@ HOSTLDLIBS_dtc := -lyaml
23endif 23endif
24 24
25# Generated files need one more search path to include headers in source tree 25# Generated files need one more search path to include headers in source tree
26HOSTCFLAGS_dtc-lexer.lex.o := -I$(src) 26HOSTCFLAGS_dtc-lexer.lex.o := -I $(srctree)/$(src)
27HOSTCFLAGS_dtc-parser.tab.o := -I$(src) 27HOSTCFLAGS_dtc-parser.tab.o := -I $(srctree)/$(src)
28 28
29# dependencies on generated files need to be listed explicitly 29# dependencies on generated files need to be listed explicitly
30$(obj)/dtc-lexer.lex.o: $(obj)/dtc-parser.tab.h 30$(obj)/dtc-lexer.lex.o: $(obj)/dtc-parser.tab.h
diff --git a/scripts/dtc/Makefile.dtc b/scripts/dtc/Makefile.dtc
index d4375630a7f7..6ce8b4a35a23 100644
--- a/scripts/dtc/Makefile.dtc
+++ b/scripts/dtc/Makefile.dtc
@@ -1,3 +1,4 @@
1# SPDX-License-Identifier: GPL-2.0-only
1# Makefile.dtc 2# Makefile.dtc
2# 3#
3# This is not a complete Makefile of itself. Instead, it is designed to 4# This is not a complete Makefile of itself. Instead, it is designed to
diff --git a/scripts/dtc/checks.c b/scripts/dtc/checks.c
index 4834e44b37b2..1ae7a54d4f12 100644
--- a/scripts/dtc/checks.c
+++ b/scripts/dtc/checks.c
@@ -1,21 +1,6 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
1/* 2/*
2 * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2007. 3 * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2007.
3 *
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation; either version 2 of the
8 * License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
18 * USA
19 */ 4 */
20 5
21#include "dtc.h" 6#include "dtc.h"
diff --git a/scripts/dtc/data.c b/scripts/dtc/data.c
index 4a204145cc7b..0a43b6de3264 100644
--- a/scripts/dtc/data.c
+++ b/scripts/dtc/data.c
@@ -1,21 +1,6 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
1/* 2/*
2 * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. 3 * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
3 *
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation; either version 2 of the
8 * License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
18 * USA
19 */ 4 */
20 5
21#include "dtc.h" 6#include "dtc.h"
diff --git a/scripts/dtc/dt_to_config b/scripts/dtc/dt_to_config
index 5dfd1bff351f..299d1c2b20d7 100755
--- a/scripts/dtc/dt_to_config
+++ b/scripts/dtc/dt_to_config
@@ -1,10 +1,9 @@
1#!/usr/bin/env perl 1#!/usr/bin/env perl
2# SPDX-License-Identifier: GPL-2.0-only
2 3
3# Copyright 2016 by Frank Rowand 4# Copyright 2016 by Frank Rowand
4# Copyright 2016 by Gaurav Minocha 5# Copyright 2016 by Gaurav Minocha
5# 6#
6# This file is subject to the terms and conditions of the GNU General Public
7# License v2.
8 7
9use strict 'refs'; 8use strict 'refs';
10use strict subs; 9use strict subs;
diff --git a/scripts/dtc/dtc.c b/scripts/dtc/dtc.c
index 695e1f789fc7..bdb3f5945699 100644
--- a/scripts/dtc/dtc.c
+++ b/scripts/dtc/dtc.c
@@ -1,21 +1,6 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
1/* 2/*
2 * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. 3 * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
3 *
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation; either version 2 of the
8 * License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
18 * USA
19 */ 4 */
20 5
21#include <sys/stat.h> 6#include <sys/stat.h>
diff --git a/scripts/dtc/dtc.h b/scripts/dtc/dtc.h
index 789e0b1bc057..357b878607ca 100644
--- a/scripts/dtc/dtc.h
+++ b/scripts/dtc/dtc.h
@@ -1,24 +1,9 @@
1/* SPDX-License-Identifier: GPL-2.0-or-later */
1#ifndef DTC_H 2#ifndef DTC_H
2#define DTC_H 3#define DTC_H
3 4
4/* 5/*
5 * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. 6 * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
6 *
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of the
11 * License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
21 * USA
22 */ 7 */
23 8
24#include <stdio.h> 9#include <stdio.h>
diff --git a/scripts/dtc/dtx_diff b/scripts/dtc/dtx_diff
index 0d8572008729..00fd4738a587 100755
--- a/scripts/dtc/dtx_diff
+++ b/scripts/dtc/dtx_diff
@@ -1,10 +1,8 @@
1#! /bin/bash 1#! /bin/bash
2# SPDX-License-Identifier: GPL-2.0-only
2 3
3# Copyright (C) 2015 Frank Rowand 4# Copyright (C) 2015 Frank Rowand
4# 5#
5# This program is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation; version 2 of the License.
8 6
9 7
10usage() { 8usage() {
diff --git a/scripts/dtc/fdtget.c b/scripts/dtc/fdtget.c
index c2fbab2a5476..c922f82246c6 100644
--- a/scripts/dtc/fdtget.c
+++ b/scripts/dtc/fdtget.c
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
1/* 2/*
2 * Copyright (c) 2011 The Chromium OS Authors. All rights reserved. 3 * Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
3 * 4 *
@@ -6,21 +7,6 @@
6 * Based on code written by: 7 * Based on code written by:
7 * Pantelis Antoniou <pantelis.antoniou@gmail.com> and 8 * Pantelis Antoniou <pantelis.antoniou@gmail.com> and
8 * Matthew McClintock <msm@freescale.com> 9 * Matthew McClintock <msm@freescale.com>
9 *
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License as
12 * published by the Free Software Foundation; either version 2 of
13 * the License, or (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
23 * MA 02111-1307 USA
24 */ 10 */
25 11
26#include <assert.h> 12#include <assert.h>
diff --git a/scripts/dtc/fdtput.c b/scripts/dtc/fdtput.c
index f2197f51930b..a363c3cabc59 100644
--- a/scripts/dtc/fdtput.c
+++ b/scripts/dtc/fdtput.c
@@ -1,20 +1,6 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
1/* 2/*
2 * Copyright (c) 2011 The Chromium OS Authors. All rights reserved. 3 * Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License as
6 * published by the Free Software Foundation; either version 2 of
7 * the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
17 * MA 02111-1307 USA
18 */ 4 */
19 5
20#include <assert.h> 6#include <assert.h>
diff --git a/scripts/dtc/flattree.c b/scripts/dtc/flattree.c
index acf04c30669f..65705a3c7ce1 100644
--- a/scripts/dtc/flattree.c
+++ b/scripts/dtc/flattree.c
@@ -1,21 +1,6 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
1/* 2/*
2 * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. 3 * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
3 *
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation; either version 2 of the
8 * License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
18 * USA
19 */ 4 */
20 5
21#include "dtc.h" 6#include "dtc.h"
diff --git a/scripts/dtc/fstree.c b/scripts/dtc/fstree.c
index 1e7eeba47ff6..9871689b4afb 100644
--- a/scripts/dtc/fstree.c
+++ b/scripts/dtc/fstree.c
@@ -1,21 +1,6 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
1/* 2/*
2 * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. 3 * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
3 *
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation; either version 2 of the
8 * License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
18 * USA
19 */ 4 */
20 5
21#include "dtc.h" 6#include "dtc.h"
diff --git a/scripts/dtc/libfdt/Makefile.libfdt b/scripts/dtc/libfdt/Makefile.libfdt
index 3af3656df801..1649c2c48046 100644
--- a/scripts/dtc/libfdt/Makefile.libfdt
+++ b/scripts/dtc/libfdt/Makefile.libfdt
@@ -1,3 +1,4 @@
1# SPDX-License-Identifier: GPL-2.0-only
1# Makefile.libfdt 2# Makefile.libfdt
2# 3#
3# This is not a complete Makefile of itself. Instead, it is designed to 4# This is not a complete Makefile of itself. Instead, it is designed to
diff --git a/scripts/dtc/livetree.c b/scripts/dtc/livetree.c
index 7a2e6446a17b..3275231d396b 100644
--- a/scripts/dtc/livetree.c
+++ b/scripts/dtc/livetree.c
@@ -1,21 +1,6 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
1/* 2/*
2 * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. 3 * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
3 *
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation; either version 2 of the
8 * License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
18 * USA
19 */ 4 */
20 5
21#include "dtc.h" 6#include "dtc.h"
diff --git a/scripts/dtc/srcpos.c b/scripts/dtc/srcpos.c
index 41f83700ee91..f5205fb9c1ff 100644
--- a/scripts/dtc/srcpos.c
+++ b/scripts/dtc/srcpos.c
@@ -1,20 +1,6 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
1/* 2/*
2 * Copyright 2007 Jon Loeliger, Freescale Semiconductor, Inc. 3 * Copyright 2007 Jon Loeliger, Freescale Semiconductor, Inc.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License as
6 * published by the Free Software Foundation; either version 2 of the
7 * License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
17 * USA
18 */ 4 */
19 5
20#define _GNU_SOURCE 6#define _GNU_SOURCE
diff --git a/scripts/dtc/srcpos.h b/scripts/dtc/srcpos.h
index 6326a952c40e..4318d7ad34d9 100644
--- a/scripts/dtc/srcpos.h
+++ b/scripts/dtc/srcpos.h
@@ -1,20 +1,6 @@
1/* SPDX-License-Identifier: GPL-2.0-or-later */
1/* 2/*
2 * Copyright 2007 Jon Loeliger, Freescale Semiconductor, Inc. 3 * Copyright 2007 Jon Loeliger, Freescale Semiconductor, Inc.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License as
6 * published by the Free Software Foundation; either version 2 of the
7 * License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
17 * USA
18 */ 4 */
19 5
20#ifndef SRCPOS_H 6#ifndef SRCPOS_H
diff --git a/scripts/dtc/treesource.c b/scripts/dtc/treesource.c
index 1af36628b75f..c9d980c8abfc 100644
--- a/scripts/dtc/treesource.c
+++ b/scripts/dtc/treesource.c
@@ -1,21 +1,6 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
1/* 2/*
2 * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. 3 * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
3 *
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation; either version 2 of the
8 * License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
18 * USA
19 */ 4 */
20 5
21#include "dtc.h" 6#include "dtc.h"
diff --git a/scripts/dtc/util.c b/scripts/dtc/util.c
index 9c6fb5f286ae..48af961dcc8c 100644
--- a/scripts/dtc/util.c
+++ b/scripts/dtc/util.c
@@ -1,24 +1,10 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
1/* 2/*
2 * Copyright 2011 The Chromium Authors, All Rights Reserved. 3 * Copyright 2011 The Chromium Authors, All Rights Reserved.
3 * Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc. 4 * Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc.
4 * 5 *
5 * util_is_printable_string contributed by 6 * util_is_printable_string contributed by
6 * Pantelis Antoniou <pantelis.antoniou AT gmail.com> 7 * Pantelis Antoniou <pantelis.antoniou AT gmail.com>
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of the
11 * License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
21 * USA
22 */ 8 */
23 9
24#include <ctype.h> 10#include <ctype.h>
diff --git a/scripts/dtc/util.h b/scripts/dtc/util.h
index 7658781a6200..11a5614591b1 100644
--- a/scripts/dtc/util.h
+++ b/scripts/dtc/util.h
@@ -1,3 +1,4 @@
1/* SPDX-License-Identifier: GPL-2.0-or-later */
1#ifndef UTIL_H 2#ifndef UTIL_H
2#define UTIL_H 3#define UTIL_H
3 4
@@ -8,21 +9,6 @@
8/* 9/*
9 * Copyright 2011 The Chromium Authors, All Rights Reserved. 10 * Copyright 2011 The Chromium Authors, All Rights Reserved.
10 * Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc. 11 * Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License as
14 * published by the Free Software Foundation; either version 2 of the
15 * License, or (at your option) any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
25 * USA
26 */ 12 */
27 13
28#ifdef __GNUC__ 14#ifdef __GNUC__
diff --git a/scripts/dtc/yamltree.c b/scripts/dtc/yamltree.c
index a00285a5a9ec..5b6ea8ea862f 100644
--- a/scripts/dtc/yamltree.c
+++ b/scripts/dtc/yamltree.c
@@ -1,22 +1,8 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
1/* 2/*
2 * (C) Copyright Linaro, Ltd. 2018 3 * (C) Copyright Linaro, Ltd. 2018
3 * (C) Copyright Arm Holdings. 2017 4 * (C) Copyright Arm Holdings. 2017
4 * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. 5 * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 2 of the
9 * License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19 * USA
20 */ 6 */
21 7
22#include <stdlib.h> 8#include <stdlib.h>
diff --git a/scripts/export_report.pl b/scripts/export_report.pl
index 68ff426b347c..0f604f62f067 100755
--- a/scripts/export_report.pl
+++ b/scripts/export_report.pl
@@ -1,7 +1,7 @@
1#!/usr/bin/env perl 1#!/usr/bin/env perl
2# SPDX-License-Identifier: GPL-2.0-only
2# 3#
3# (C) Copyright IBM Corporation 2006. 4# (C) Copyright IBM Corporation 2006.
4# Released under GPL v2.
5# Author : Ram Pai (linuxram@us.ibm.com) 5# Author : Ram Pai (linuxram@us.ibm.com)
6# 6#
7# Usage: export_report.pl -k Module.symvers [-o report_file ] -f *.mod.c 7# Usage: export_report.pl -k Module.symvers [-o report_file ] -f *.mod.c
diff --git a/scripts/extract-vmlinux b/scripts/extract-vmlinux
index 85e1f32fb4a0..8995cd304e6e 100755
--- a/scripts/extract-vmlinux
+++ b/scripts/extract-vmlinux
@@ -1,4 +1,5 @@
1#!/bin/sh 1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0-only
2# ---------------------------------------------------------------------- 3# ----------------------------------------------------------------------
3# extract-vmlinux - Extract uncompressed vmlinux from a kernel image 4# extract-vmlinux - Extract uncompressed vmlinux from a kernel image
4# 5#
@@ -7,7 +8,6 @@
7# 8#
8# (c) 2011 Corentin Chary <corentin.chary@gmail.com> 9# (c) 2011 Corentin Chary <corentin.chary@gmail.com>
9# 10#
10# Licensed under the GNU General Public License, version 2 (GPLv2).
11# ---------------------------------------------------------------------- 11# ----------------------------------------------------------------------
12 12
13check_vmlinux() 13check_vmlinux()
diff --git a/scripts/extract_xc3028.pl b/scripts/extract_xc3028.pl
index a1c51b7e4baf..e1c9af25a595 100755
--- a/scripts/extract_xc3028.pl
+++ b/scripts/extract_xc3028.pl
@@ -1,7 +1,7 @@
1#!/usr/bin/env perl 1#!/usr/bin/env perl
2# SPDX-License-Identifier: GPL-2.0-only
2 3
3# Copyright (c) Mauro Carvalho Chehab <mchehab@kernel.org> 4# Copyright (c) Mauro Carvalho Chehab <mchehab@kernel.org>
4# Released under GPLv2
5# 5#
6# In order to use, you need to: 6# In order to use, you need to:
7# 1) Download the windows driver with something like: 7# 1) Download the windows driver with something like:
diff --git a/scripts/gcc-plugins/Kconfig b/scripts/gcc-plugins/Kconfig
index 74271dba4f94..e9c677a53c74 100644
--- a/scripts/gcc-plugins/Kconfig
+++ b/scripts/gcc-plugins/Kconfig
@@ -1,3 +1,4 @@
1# SPDX-License-Identifier: GPL-2.0-only
1preferred-plugin-hostcc := $(if-success,[ $(gcc-version) -ge 40800 ],$(HOSTCXX),$(HOSTCC)) 2preferred-plugin-hostcc := $(if-success,[ $(gcc-version) -ge 40800 ],$(HOSTCXX),$(HOSTCC))
2 3
3config PLUGIN_HOSTCC 4config PLUGIN_HOSTCC
@@ -13,17 +14,19 @@ config HAVE_GCC_PLUGINS
13 An arch should select this symbol if it supports building with 14 An arch should select this symbol if it supports building with
14 GCC plugins. 15 GCC plugins.
15 16
16menuconfig GCC_PLUGINS 17config GCC_PLUGINS
17 bool "GCC plugins" 18 bool
18 depends on HAVE_GCC_PLUGINS 19 depends on HAVE_GCC_PLUGINS
19 depends on PLUGIN_HOSTCC != "" 20 depends on PLUGIN_HOSTCC != ""
21 default y
20 help 22 help
21 GCC plugins are loadable modules that provide extra features to the 23 GCC plugins are loadable modules that provide extra features to the
22 compiler. They are useful for runtime instrumentation and static analysis. 24 compiler. They are useful for runtime instrumentation and static analysis.
23 25
24 See Documentation/gcc-plugins.txt for details. 26 See Documentation/gcc-plugins.txt for details.
25 27
26if GCC_PLUGINS 28menu "GCC plugins"
29 depends on GCC_PLUGINS
27 30
28config GCC_PLUGIN_CYC_COMPLEXITY 31config GCC_PLUGIN_CYC_COMPLEXITY
29 bool "Compute the cyclomatic complexity of a function" if EXPERT 32 bool "Compute the cyclomatic complexity of a function" if EXPERT
@@ -66,71 +69,6 @@ config GCC_PLUGIN_LATENT_ENTROPY
66 * https://grsecurity.net/ 69 * https://grsecurity.net/
67 * https://pax.grsecurity.net/ 70 * https://pax.grsecurity.net/
68 71
69config GCC_PLUGIN_STRUCTLEAK
70 bool "Zero initialize stack variables"
71 help
72 While the kernel is built with warnings enabled for any missed
73 stack variable initializations, this warning is silenced for
74 anything passed by reference to another function, under the
75 occasionally misguided assumption that the function will do
76 the initialization. As this regularly leads to exploitable
77 flaws, this plugin is available to identify and zero-initialize
78 such variables, depending on the chosen level of coverage.
79
80 This plugin was originally ported from grsecurity/PaX. More
81 information at:
82 * https://grsecurity.net/
83 * https://pax.grsecurity.net/
84
85choice
86 prompt "Coverage"
87 depends on GCC_PLUGIN_STRUCTLEAK
88 default GCC_PLUGIN_STRUCTLEAK_BYREF_ALL
89 help
90 This chooses the level of coverage over classes of potentially
91 uninitialized variables. The selected class will be
92 zero-initialized before use.
93
94 config GCC_PLUGIN_STRUCTLEAK_USER
95 bool "structs marked for userspace"
96 help
97 Zero-initialize any structures on the stack containing
98 a __user attribute. This can prevent some classes of
99 uninitialized stack variable exploits and information
100 exposures, like CVE-2013-2141:
101 https://git.kernel.org/linus/b9e146d8eb3b9eca
102
103 config GCC_PLUGIN_STRUCTLEAK_BYREF
104 bool "structs passed by reference"
105 help
106 Zero-initialize any structures on the stack that may
107 be passed by reference and had not already been
108 explicitly initialized. This can prevent most classes
109 of uninitialized stack variable exploits and information
110 exposures, like CVE-2017-1000410:
111 https://git.kernel.org/linus/06e7e776ca4d3654
112
113 config GCC_PLUGIN_STRUCTLEAK_BYREF_ALL
114 bool "anything passed by reference"
115 help
116 Zero-initialize any stack variables that may be passed
117 by reference and had not already been explicitly
118 initialized. This is intended to eliminate all classes
119 of uninitialized stack variable exploits and information
120 exposures.
121
122endchoice
123
124config GCC_PLUGIN_STRUCTLEAK_VERBOSE
125 bool "Report forcefully initialized variables"
126 depends on GCC_PLUGIN_STRUCTLEAK
127 depends on !COMPILE_TEST # too noisy
128 help
129 This option will cause a warning to be printed each time the
130 structleak plugin finds a variable it thinks needs to be
131 initialized. Since not all existing initializers are detected
132 by the plugin, this can produce false positive warnings.
133
134config GCC_PLUGIN_RANDSTRUCT 72config GCC_PLUGIN_RANDSTRUCT
135 bool "Randomize layout of sensitive kernel structures" 73 bool "Randomize layout of sensitive kernel structures"
136 select MODVERSIONS if MODULES 74 select MODVERSIONS if MODULES
@@ -171,59 +109,8 @@ config GCC_PLUGIN_RANDSTRUCT_PERFORMANCE
171 in structures. This reduces the performance hit of RANDSTRUCT 109 in structures. This reduces the performance hit of RANDSTRUCT
172 at the cost of weakened randomization. 110 at the cost of weakened randomization.
173 111
174config GCC_PLUGIN_STACKLEAK
175 bool "Erase the kernel stack before returning from syscalls"
176 depends on GCC_PLUGINS
177 depends on HAVE_ARCH_STACKLEAK
178 help
179 This option makes the kernel erase the kernel stack before
180 returning from system calls. That reduces the information which
181 kernel stack leak bugs can reveal and blocks some uninitialized
182 stack variable attacks.
183
184 The tradeoff is the performance impact: on a single CPU system kernel
185 compilation sees a 1% slowdown, other systems and workloads may vary
186 and you are advised to test this feature on your expected workload
187 before deploying it.
188
189 This plugin was ported from grsecurity/PaX. More information at:
190 * https://grsecurity.net/
191 * https://pax.grsecurity.net/
192
193config STACKLEAK_TRACK_MIN_SIZE
194 int "Minimum stack frame size of functions tracked by STACKLEAK"
195 default 100
196 range 0 4096
197 depends on GCC_PLUGIN_STACKLEAK
198 help
199 The STACKLEAK gcc plugin instruments the kernel code for tracking
200 the lowest border of the kernel stack (and for some other purposes).
201 It inserts the stackleak_track_stack() call for the functions with
202 a stack frame size greater than or equal to this parameter.
203 If unsure, leave the default value 100.
204
205config STACKLEAK_METRICS
206 bool "Show STACKLEAK metrics in the /proc file system"
207 depends on GCC_PLUGIN_STACKLEAK
208 depends on PROC_FS
209 help
210 If this is set, STACKLEAK metrics for every task are available in
211 the /proc file system. In particular, /proc/<pid>/stack_depth
212 shows the maximum kernel stack consumption for the current and
213 previous syscalls. Although this information is not precise, it
214 can be useful for estimating the STACKLEAK performance impact for
215 your workloads.
216
217config STACKLEAK_RUNTIME_DISABLE
218 bool "Allow runtime disabling of kernel stack erasing"
219 depends on GCC_PLUGIN_STACKLEAK
220 help
221 This option provides 'stack_erasing' sysctl, which can be used in
222 runtime to control kernel stack erasing for kernels built with
223 CONFIG_GCC_PLUGIN_STACKLEAK.
224
225config GCC_PLUGIN_ARM_SSP_PER_TASK 112config GCC_PLUGIN_ARM_SSP_PER_TASK
226 bool 113 bool
227 depends on GCC_PLUGINS && ARM 114 depends on GCC_PLUGINS && ARM
228 115
229endif 116endmenu
diff --git a/scripts/gcc-plugins/arm_ssp_per_task_plugin.c b/scripts/gcc-plugins/arm_ssp_per_task_plugin.c
index 89c47f57d1ce..8c1af9bdcb1b 100644
--- a/scripts/gcc-plugins/arm_ssp_per_task_plugin.c
+++ b/scripts/gcc-plugins/arm_ssp_per_task_plugin.c
@@ -36,7 +36,7 @@ static unsigned int arm_pertask_ssp_rtl_execute(void)
36 mask = GEN_INT(sext_hwi(sp_mask, GET_MODE_PRECISION(Pmode))); 36 mask = GEN_INT(sext_hwi(sp_mask, GET_MODE_PRECISION(Pmode)));
37 masked_sp = gen_reg_rtx(Pmode); 37 masked_sp = gen_reg_rtx(Pmode);
38 38
39 emit_insn_before(gen_rtx_SET(masked_sp, 39 emit_insn_before(gen_rtx_set(masked_sp,
40 gen_rtx_AND(Pmode, 40 gen_rtx_AND(Pmode,
41 stack_pointer_rtx, 41 stack_pointer_rtx,
42 mask)), 42 mask)),
diff --git a/scripts/gcc-plugins/gcc-common.h b/scripts/gcc-plugins/gcc-common.h
index 552d5efd7cb7..17f06079a712 100644
--- a/scripts/gcc-plugins/gcc-common.h
+++ b/scripts/gcc-plugins/gcc-common.h
@@ -150,8 +150,12 @@ void print_gimple_expr(FILE *, gimple, int, int);
150void dump_gimple_stmt(pretty_printer *, gimple, int, int); 150void dump_gimple_stmt(pretty_printer *, gimple, int, int);
151#endif 151#endif
152 152
153#ifndef __unused
153#define __unused __attribute__((__unused__)) 154#define __unused __attribute__((__unused__))
155#endif
156#ifndef __visible
154#define __visible __attribute__((visibility("default"))) 157#define __visible __attribute__((visibility("default")))
158#endif
155 159
156#define DECL_NAME_POINTER(node) IDENTIFIER_POINTER(DECL_NAME(node)) 160#define DECL_NAME_POINTER(node) IDENTIFIER_POINTER(DECL_NAME(node))
157#define DECL_NAME_LENGTH(node) IDENTIFIER_LENGTH(DECL_NAME(node)) 161#define DECL_NAME_LENGTH(node) IDENTIFIER_LENGTH(DECL_NAME(node))
diff --git a/scripts/gdb/Makefile b/scripts/gdb/Makefile
index 62f5f65becfd..3fca1937d956 100644
--- a/scripts/gdb/Makefile
+++ b/scripts/gdb/Makefile
@@ -1 +1,2 @@
1# SPDX-License-Identifier: GPL-2.0-only
1subdir-y := linux 2subdir-y := linux
diff --git a/scripts/gdb/linux/Makefile b/scripts/gdb/linux/Makefile
index 3df395a9c2ce..9fd3d8ed731a 100644
--- a/scripts/gdb/linux/Makefile
+++ b/scripts/gdb/linux/Makefile
@@ -1,6 +1,6 @@
1# SPDX-License-Identifier: GPL-2.0 1# SPDX-License-Identifier: GPL-2.0
2 2
3ifneq ($(KBUILD_SRC),) 3ifneq ($(srctree),.)
4 4
5symlinks := $(patsubst $(srctree)/$(src)/%,%,$(wildcard $(srctree)/$(src)/*.py)) 5symlinks := $(patsubst $(srctree)/$(src)/%,%,$(wildcard $(srctree)/$(src)/*.py))
6 6
diff --git a/scripts/gdb/linux/clk.py b/scripts/gdb/linux/clk.py
new file mode 100644
index 000000000000..061aecfa294e
--- /dev/null
+++ b/scripts/gdb/linux/clk.py
@@ -0,0 +1,76 @@
1# SPDX-License-Identifier: GPL-2.0
2#
3# Copyright (c) NXP 2019
4
5import gdb
6import sys
7
8from linux import utils, lists, constants
9
10clk_core_type = utils.CachedType("struct clk_core")
11
12
13def clk_core_for_each_child(hlist_head):
14 return lists.hlist_for_each_entry(hlist_head,
15 clk_core_type.get_type().pointer(), "child_node")
16
17
18class LxClkSummary(gdb.Command):
19 """Print clk tree summary
20
21Output is a subset of /sys/kernel/debug/clk/clk_summary
22
23No calls are made during printing, instead a (c) if printed after values which
24are cached and potentially out of date"""
25
26 def __init__(self):
27 super(LxClkSummary, self).__init__("lx-clk-summary", gdb.COMMAND_DATA)
28
29 def show_subtree(self, clk, level):
30 gdb.write("%*s%-*s %7d %8d %8d %11lu%s\n" % (
31 level * 3 + 1, "",
32 30 - level * 3,
33 clk['name'].string(),
34 clk['enable_count'],
35 clk['prepare_count'],
36 clk['protect_count'],
37 clk['rate'],
38 '(c)' if clk['flags'] & constants.LX_CLK_GET_RATE_NOCACHE else ' '))
39
40 for child in clk_core_for_each_child(clk['children']):
41 self.show_subtree(child, level + 1)
42
43 def invoke(self, arg, from_tty):
44 gdb.write(" enable prepare protect \n")
45 gdb.write(" clock count count count rate \n")
46 gdb.write("------------------------------------------------------------------------\n")
47 for clk in clk_core_for_each_child(gdb.parse_and_eval("clk_root_list")):
48 self.show_subtree(clk, 0)
49 for clk in clk_core_for_each_child(gdb.parse_and_eval("clk_orphan_list")):
50 self.show_subtree(clk, 0)
51
52
53LxClkSummary()
54
55
56class LxClkCoreLookup(gdb.Function):
57 """Find struct clk_core by name"""
58
59 def __init__(self):
60 super(LxClkCoreLookup, self).__init__("lx_clk_core_lookup")
61
62 def lookup_hlist(self, hlist_head, name):
63 for child in clk_core_for_each_child(hlist_head):
64 if child['name'].string() == name:
65 return child
66 result = self.lookup_hlist(child['children'], name)
67 if result:
68 return result
69
70 def invoke(self, name):
71 name = name.string()
72 return (self.lookup_hlist(gdb.parse_and_eval("clk_root_list"), name) or
73 self.lookup_hlist(gdb.parse_and_eval("clk_orphan_list"), name))
74
75
76LxClkCoreLookup()
diff --git a/scripts/gdb/linux/config.py b/scripts/gdb/linux/config.py
new file mode 100644
index 000000000000..90e1565b1967
--- /dev/null
+++ b/scripts/gdb/linux/config.py
@@ -0,0 +1,44 @@
1# SPDX-License-Identifier: GPL-2.0
2#
3# Copyright 2019 Google LLC.
4
5import gdb
6import zlib
7
8from linux import utils
9
10
11class LxConfigDump(gdb.Command):
12 """Output kernel config to the filename specified as the command
13 argument. Equivalent to 'zcat /proc/config.gz > config.txt' on
14 a running target"""
15
16 def __init__(self):
17 super(LxConfigDump, self).__init__("lx-configdump", gdb.COMMAND_DATA,
18 gdb.COMPLETE_FILENAME)
19
20 def invoke(self, arg, from_tty):
21 if len(arg) == 0:
22 filename = "config.txt"
23 else:
24 filename = arg
25
26 try:
27 py_config_ptr = gdb.parse_and_eval("kernel_config_data + 8")
28 py_config_size = gdb.parse_and_eval(
29 "sizeof(kernel_config_data) - 1 - 8 * 2")
30 except gdb.error as e:
31 raise gdb.GdbError("Can't find config, enable CONFIG_IKCONFIG?")
32
33 inf = gdb.inferiors()[0]
34 zconfig_buf = utils.read_memoryview(inf, py_config_ptr,
35 py_config_size).tobytes()
36
37 config_buf = zlib.decompress(zconfig_buf, 16)
38 with open(filename, 'wb') as f:
39 f.write(config_buf)
40
41 gdb.write("Dumped config to " + filename + "\n")
42
43
44LxConfigDump()
diff --git a/scripts/gdb/linux/constants.py.in b/scripts/gdb/linux/constants.py.in
index d3319a80788a..2efbec6b6b8d 100644
--- a/scripts/gdb/linux/constants.py.in
+++ b/scripts/gdb/linux/constants.py.in
@@ -12,9 +12,12 @@
12 * 12 *
13 */ 13 */
14 14
15#include <linux/clk-provider.h>
15#include <linux/fs.h> 16#include <linux/fs.h>
17#include <linux/hrtimer.h>
16#include <linux/mount.h> 18#include <linux/mount.h>
17#include <linux/of_fdt.h> 19#include <linux/of_fdt.h>
20#include <linux/threads.h>
18 21
19/* We need to stringify expanded macros so that they can be parsed */ 22/* We need to stringify expanded macros so that they can be parsed */
20 23
@@ -36,6 +39,10 @@
36 39
37import gdb 40import gdb
38 41
42/* linux/clk-provider.h */
43if IS_BUILTIN(CONFIG_COMMON_CLK):
44 LX_GDBPARSED(CLK_GET_RATE_NOCACHE)
45
39/* linux/fs.h */ 46/* linux/fs.h */
40LX_VALUE(SB_RDONLY) 47LX_VALUE(SB_RDONLY)
41LX_VALUE(SB_SYNCHRONOUS) 48LX_VALUE(SB_SYNCHRONOUS)
@@ -44,6 +51,9 @@ LX_VALUE(SB_DIRSYNC)
44LX_VALUE(SB_NOATIME) 51LX_VALUE(SB_NOATIME)
45LX_VALUE(SB_NODIRATIME) 52LX_VALUE(SB_NODIRATIME)
46 53
54/* linux/htimer.h */
55LX_GDBPARSED(hrtimer_resolution)
56
47/* linux/mount.h */ 57/* linux/mount.h */
48LX_VALUE(MNT_NOSUID) 58LX_VALUE(MNT_NOSUID)
49LX_VALUE(MNT_NODEV) 59LX_VALUE(MNT_NODEV)
@@ -52,8 +62,16 @@ LX_VALUE(MNT_NOATIME)
52LX_VALUE(MNT_NODIRATIME) 62LX_VALUE(MNT_NODIRATIME)
53LX_VALUE(MNT_RELATIME) 63LX_VALUE(MNT_RELATIME)
54 64
65/* linux/threads.h */
66LX_VALUE(NR_CPUS)
67
55/* linux/of_fdt.h> */ 68/* linux/of_fdt.h> */
56LX_VALUE(OF_DT_HEADER) 69LX_VALUE(OF_DT_HEADER)
57 70
58/* Kernel Configs */ 71/* Kernel Configs */
72LX_CONFIG(CONFIG_GENERIC_CLOCKEVENTS)
73LX_CONFIG(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST)
74LX_CONFIG(CONFIG_HIGH_RES_TIMERS)
75LX_CONFIG(CONFIG_NR_CPUS)
59LX_CONFIG(CONFIG_OF) 76LX_CONFIG(CONFIG_OF)
77LX_CONFIG(CONFIG_TICK_ONESHOT)
diff --git a/scripts/gdb/linux/cpus.py b/scripts/gdb/linux/cpus.py
index ca11e8df31b6..008e62f3190d 100644
--- a/scripts/gdb/linux/cpus.py
+++ b/scripts/gdb/linux/cpus.py
@@ -135,6 +135,7 @@ and can help identify the state of hotplugged CPUs"""
135 gdb.write("Online CPUs : {}\n".format(list(each_online_cpu()))) 135 gdb.write("Online CPUs : {}\n".format(list(each_online_cpu())))
136 gdb.write("Active CPUs : {}\n".format(list(each_active_cpu()))) 136 gdb.write("Active CPUs : {}\n".format(list(each_active_cpu())))
137 137
138
138LxCpus() 139LxCpus()
139 140
140 141
diff --git a/scripts/gdb/linux/lists.py b/scripts/gdb/linux/lists.py
index 2f335fbd86fd..c487ddf09d38 100644
--- a/scripts/gdb/linux/lists.py
+++ b/scripts/gdb/linux/lists.py
@@ -16,13 +16,15 @@ import gdb
16from linux import utils 16from linux import utils
17 17
18list_head = utils.CachedType("struct list_head") 18list_head = utils.CachedType("struct list_head")
19hlist_head = utils.CachedType("struct hlist_head")
20hlist_node = utils.CachedType("struct hlist_node")
19 21
20 22
21def list_for_each(head): 23def list_for_each(head):
22 if head.type == list_head.get_type().pointer(): 24 if head.type == list_head.get_type().pointer():
23 head = head.dereference() 25 head = head.dereference()
24 elif head.type != list_head.get_type(): 26 elif head.type != list_head.get_type():
25 raise gdb.GdbError("Must be struct list_head not {}" 27 raise TypeError("Must be struct list_head not {}"
26 .format(head.type)) 28 .format(head.type))
27 29
28 node = head['next'].dereference() 30 node = head['next'].dereference()
@@ -33,9 +35,24 @@ def list_for_each(head):
33 35
34def list_for_each_entry(head, gdbtype, member): 36def list_for_each_entry(head, gdbtype, member):
35 for node in list_for_each(head): 37 for node in list_for_each(head):
36 if node.type != list_head.get_type().pointer(): 38 yield utils.container_of(node, gdbtype, member)
37 raise TypeError("Type {} found. Expected struct list_head *." 39
38 .format(node.type)) 40
41def hlist_for_each(head):
42 if head.type == hlist_head.get_type().pointer():
43 head = head.dereference()
44 elif head.type != hlist_head.get_type():
45 raise TypeError("Must be struct hlist_head not {}"
46 .format(head.type))
47
48 node = head['first'].dereference()
49 while node.address:
50 yield node.address
51 node = node['next'].dereference()
52
53
54def hlist_for_each_entry(head, gdbtype, member):
55 for node in hlist_for_each(head):
39 yield utils.container_of(node, gdbtype, member) 56 yield utils.container_of(node, gdbtype, member)
40 57
41 58
@@ -110,4 +127,5 @@ class LxListChk(gdb.Command):
110 raise gdb.GdbError("lx-list-check takes one argument") 127 raise gdb.GdbError("lx-list-check takes one argument")
111 list_check(gdb.parse_and_eval(argv[0])) 128 list_check(gdb.parse_and_eval(argv[0]))
112 129
130
113LxListChk() 131LxListChk()
diff --git a/scripts/gdb/linux/proc.py b/scripts/gdb/linux/proc.py
index 2f01a958eb22..6a56bba233a9 100644
--- a/scripts/gdb/linux/proc.py
+++ b/scripts/gdb/linux/proc.py
@@ -29,6 +29,7 @@ class LxCmdLine(gdb.Command):
29 def invoke(self, arg, from_tty): 29 def invoke(self, arg, from_tty):
30 gdb.write(gdb.parse_and_eval("saved_command_line").string() + "\n") 30 gdb.write(gdb.parse_and_eval("saved_command_line").string() + "\n")
31 31
32
32LxCmdLine() 33LxCmdLine()
33 34
34 35
@@ -43,6 +44,7 @@ class LxVersion(gdb.Command):
43 # linux_banner should contain a newline 44 # linux_banner should contain a newline
44 gdb.write(gdb.parse_and_eval("(char *)linux_banner").string()) 45 gdb.write(gdb.parse_and_eval("(char *)linux_banner").string())
45 46
47
46LxVersion() 48LxVersion()
47 49
48 50
@@ -86,6 +88,7 @@ Equivalent to cat /proc/iomem on a running target"""
86 def invoke(self, arg, from_tty): 88 def invoke(self, arg, from_tty):
87 return show_lx_resources("iomem_resource") 89 return show_lx_resources("iomem_resource")
88 90
91
89LxIOMem() 92LxIOMem()
90 93
91 94
@@ -100,6 +103,7 @@ Equivalent to cat /proc/ioports on a running target"""
100 def invoke(self, arg, from_tty): 103 def invoke(self, arg, from_tty):
101 return show_lx_resources("ioport_resource") 104 return show_lx_resources("ioport_resource")
102 105
106
103LxIOPorts() 107LxIOPorts()
104 108
105 109
@@ -149,7 +153,7 @@ values of that process namespace"""
149 if len(argv) >= 1: 153 if len(argv) >= 1:
150 try: 154 try:
151 pid = int(argv[0]) 155 pid = int(argv[0])
152 except: 156 except gdb.error:
153 raise gdb.GdbError("Provide a PID as integer value") 157 raise gdb.GdbError("Provide a PID as integer value")
154 else: 158 else:
155 pid = 1 159 pid = 1
@@ -195,6 +199,7 @@ values of that process namespace"""
195 info_opts(FS_INFO, s_flags), 199 info_opts(FS_INFO, s_flags),
196 info_opts(MNT_INFO, m_flags))) 200 info_opts(MNT_INFO, m_flags)))
197 201
202
198LxMounts() 203LxMounts()
199 204
200 205
@@ -259,7 +264,7 @@ class LxFdtDump(gdb.Command):
259 264
260 try: 265 try:
261 f = open(filename, 'wb') 266 f = open(filename, 'wb')
262 except: 267 except gdb.error:
263 raise gdb.GdbError("Could not open file to dump fdt") 268 raise gdb.GdbError("Could not open file to dump fdt")
264 269
265 f.write(fdt_buf) 270 f.write(fdt_buf)
@@ -267,4 +272,5 @@ class LxFdtDump(gdb.Command):
267 272
268 gdb.write("Dumped fdt blob to " + filename + "\n") 273 gdb.write("Dumped fdt blob to " + filename + "\n")
269 274
275
270LxFdtDump() 276LxFdtDump()
diff --git a/scripts/gdb/linux/rbtree.py b/scripts/gdb/linux/rbtree.py
new file mode 100644
index 000000000000..39db889b874c
--- /dev/null
+++ b/scripts/gdb/linux/rbtree.py
@@ -0,0 +1,177 @@
1# SPDX-License-Identifier: GPL-2.0
2#
3# Copyright 2019 Google LLC.
4
5import gdb
6
7from linux import utils
8
9rb_root_type = utils.CachedType("struct rb_root")
10rb_node_type = utils.CachedType("struct rb_node")
11
12
13def rb_first(root):
14 if root.type == rb_root_type.get_type():
15 node = node.address.cast(rb_root_type.get_type().pointer())
16 elif root.type != rb_root_type.get_type().pointer():
17 raise gdb.GdbError("Must be struct rb_root not {}".format(root.type))
18
19 node = root['rb_node']
20 if node is 0:
21 return None
22
23 while node['rb_left']:
24 node = node['rb_left']
25
26 return node
27
28
29def rb_last(root):
30 if root.type == rb_root_type.get_type():
31 node = node.address.cast(rb_root_type.get_type().pointer())
32 elif root.type != rb_root_type.get_type().pointer():
33 raise gdb.GdbError("Must be struct rb_root not {}".format(root.type))
34
35 node = root['rb_node']
36 if node is 0:
37 return None
38
39 while node['rb_right']:
40 node = node['rb_right']
41
42 return node
43
44
45def rb_parent(node):
46 parent = gdb.Value(node['__rb_parent_color'] & ~3)
47 return parent.cast(rb_node_type.get_type().pointer())
48
49
50def rb_empty_node(node):
51 return node['__rb_parent_color'] == node.address
52
53
54def rb_next(node):
55 if node.type == rb_node_type.get_type():
56 node = node.address.cast(rb_node_type.get_type().pointer())
57 elif node.type != rb_node_type.get_type().pointer():
58 raise gdb.GdbError("Must be struct rb_node not {}".format(node.type))
59
60 if rb_empty_node(node):
61 return None
62
63 if node['rb_right']:
64 node = node['rb_right']
65 while node['rb_left']:
66 node = node['rb_left']
67 return node
68
69 parent = rb_parent(node)
70 while parent and node == parent['rb_right']:
71 node = parent
72 parent = rb_parent(node)
73
74 return parent
75
76
77def rb_prev(node):
78 if node.type == rb_node_type.get_type():
79 node = node.address.cast(rb_node_type.get_type().pointer())
80 elif node.type != rb_node_type.get_type().pointer():
81 raise gdb.GdbError("Must be struct rb_node not {}".format(node.type))
82
83 if rb_empty_node(node):
84 return None
85
86 if node['rb_left']:
87 node = node['rb_left']
88 while node['rb_right']:
89 node = node['rb_right']
90 return node.dereference()
91
92 parent = rb_parent(node)
93 while parent and node == parent['rb_left'].dereference():
94 node = parent
95 parent = rb_parent(node)
96
97 return parent
98
99
100class LxRbFirst(gdb.Function):
101 """Lookup and return a node from an RBTree
102
103$lx_rb_first(root): Return the node at the given index.
104If index is omitted, the root node is dereferenced and returned."""
105
106 def __init__(self):
107 super(LxRbFirst, self).__init__("lx_rb_first")
108
109 def invoke(self, root):
110 result = rb_first(root)
111 if result is None:
112 raise gdb.GdbError("No entry in tree")
113
114 return result
115
116
117LxRbFirst()
118
119
120class LxRbLast(gdb.Function):
121 """Lookup and return a node from an RBTree.
122
123$lx_rb_last(root): Return the node at the given index.
124If index is omitted, the root node is dereferenced and returned."""
125
126 def __init__(self):
127 super(LxRbLast, self).__init__("lx_rb_last")
128
129 def invoke(self, root):
130 result = rb_last(root)
131 if result is None:
132 raise gdb.GdbError("No entry in tree")
133
134 return result
135
136
137LxRbLast()
138
139
140class LxRbNext(gdb.Function):
141 """Lookup and return a node from an RBTree.
142
143$lx_rb_next(node): Return the node at the given index.
144If index is omitted, the root node is dereferenced and returned."""
145
146 def __init__(self):
147 super(LxRbNext, self).__init__("lx_rb_next")
148
149 def invoke(self, node):
150 result = rb_next(node)
151 if result is None:
152 raise gdb.GdbError("No entry in tree")
153
154 return result
155
156
157LxRbNext()
158
159
160class LxRbPrev(gdb.Function):
161 """Lookup and return a node from an RBTree.
162
163$lx_rb_prev(node): Return the node at the given index.
164If index is omitted, the root node is dereferenced and returned."""
165
166 def __init__(self):
167 super(LxRbPrev, self).__init__("lx_rb_prev")
168
169 def invoke(self, node):
170 result = rb_prev(node)
171 if result is None:
172 raise gdb.GdbError("No entry in tree")
173
174 return result
175
176
177LxRbPrev()
diff --git a/scripts/gdb/linux/symbols.py b/scripts/gdb/linux/symbols.py
index 004b0ac7fa72..2f5b95f09fa0 100644
--- a/scripts/gdb/linux/symbols.py
+++ b/scripts/gdb/linux/symbols.py
@@ -139,8 +139,12 @@ lx-symbols command."""
139 saved_states.append({'breakpoint': bp, 'enabled': bp.enabled}) 139 saved_states.append({'breakpoint': bp, 'enabled': bp.enabled})
140 140
141 # drop all current symbols and reload vmlinux 141 # drop all current symbols and reload vmlinux
142 orig_vmlinux = 'vmlinux'
143 for obj in gdb.objfiles():
144 if obj.filename.endswith('vmlinux'):
145 orig_vmlinux = obj.filename
142 gdb.execute("symbol-file", to_string=True) 146 gdb.execute("symbol-file", to_string=True)
143 gdb.execute("symbol-file vmlinux") 147 gdb.execute("symbol-file {0}".format(orig_vmlinux))
144 148
145 self.loaded_modules = [] 149 self.loaded_modules = []
146 module_list = modules.module_list() 150 module_list = modules.module_list()
diff --git a/scripts/gdb/linux/tasks.py b/scripts/gdb/linux/tasks.py
index f6ab3ccf698f..0301dc1e0138 100644
--- a/scripts/gdb/linux/tasks.py
+++ b/scripts/gdb/linux/tasks.py
@@ -79,6 +79,7 @@ class LxPs(gdb.Command):
79 pid=task["pid"], 79 pid=task["pid"],
80 comm=task["comm"].string())) 80 comm=task["comm"].string()))
81 81
82
82LxPs() 83LxPs()
83 84
84 85
@@ -134,4 +135,5 @@ variable."""
134 else: 135 else:
135 raise gdb.GdbError("No task of PID " + str(pid)) 136 raise gdb.GdbError("No task of PID " + str(pid))
136 137
138
137LxThreadInfoByPidFunc() 139LxThreadInfoByPidFunc()
diff --git a/scripts/gdb/linux/timerlist.py b/scripts/gdb/linux/timerlist.py
new file mode 100644
index 000000000000..071d0dd5a634
--- /dev/null
+++ b/scripts/gdb/linux/timerlist.py
@@ -0,0 +1,219 @@
1# SPDX-License-Identifier: GPL-2.0
2#
3# Copyright 2019 Google LLC.
4
5import binascii
6import gdb
7
8from linux import constants
9from linux import cpus
10from linux import rbtree
11from linux import utils
12
13timerqueue_node_type = utils.CachedType("struct timerqueue_node").get_type()
14hrtimer_type = utils.CachedType("struct hrtimer").get_type()
15
16
17def ktime_get():
18 """Returns the current time, but not very accurately
19
20 We can't read the hardware timer itself to add any nanoseconds
21 that need to be added since we last stored the time in the
22 timekeeper. But this is probably good enough for debug purposes."""
23 tk_core = gdb.parse_and_eval("&tk_core")
24
25 return tk_core['timekeeper']['tkr_mono']['base']
26
27
28def print_timer(rb_node, idx):
29 timerqueue = utils.container_of(rb_node, timerqueue_node_type.pointer(),
30 "node")
31 timer = utils.container_of(timerqueue, hrtimer_type.pointer(), "node")
32
33 function = str(timer['function']).split(" ")[1].strip("<>")
34 softexpires = timer['_softexpires']
35 expires = timer['node']['expires']
36 now = ktime_get()
37
38 text = " #{}: <{}>, {}, ".format(idx, timer, function)
39 text += "S:{:02x}\n".format(int(timer['state']))
40 text += " # expires at {}-{} nsecs [in {} to {} nsecs]\n".format(
41 softexpires, expires, softexpires - now, expires - now)
42 return text
43
44
45def print_active_timers(base):
46 curr = base['active']['next']['node']
47 curr = curr.address.cast(rbtree.rb_node_type.get_type().pointer())
48 idx = 0
49 while curr:
50 yield print_timer(curr, idx)
51 curr = rbtree.rb_next(curr)
52 idx += 1
53
54
55def print_base(base):
56 text = " .base: {}\n".format(base.address)
57 text += " .index: {}\n".format(base['index'])
58
59 text += " .resolution: {} nsecs\n".format(constants.LX_hrtimer_resolution)
60
61 text += " .get_time: {}\n".format(base['get_time'])
62 if constants.LX_CONFIG_HIGH_RES_TIMERS:
63 text += " .offset: {} nsecs\n".format(base['offset'])
64 text += "active timers:\n"
65 text += "".join([x for x in print_active_timers(base)])
66 return text
67
68
69def print_cpu(hrtimer_bases, cpu, max_clock_bases):
70 cpu_base = cpus.per_cpu(hrtimer_bases, cpu)
71 jiffies = gdb.parse_and_eval("jiffies_64")
72 tick_sched_ptr = gdb.parse_and_eval("&tick_cpu_sched")
73 ts = cpus.per_cpu(tick_sched_ptr, cpu)
74
75 text = "cpu: {}\n".format(cpu)
76 for i in xrange(max_clock_bases):
77 text += " clock {}:\n".format(i)
78 text += print_base(cpu_base['clock_base'][i])
79
80 if constants.LX_CONFIG_HIGH_RES_TIMERS:
81 fmts = [(" .{} : {} nsecs", 'expires_next'),
82 (" .{} : {}", 'hres_active'),
83 (" .{} : {}", 'nr_events'),
84 (" .{} : {}", 'nr_retries'),
85 (" .{} : {}", 'nr_hangs'),
86 (" .{} : {}", 'max_hang_time')]
87 text += "\n".join([s.format(f, cpu_base[f]) for s, f in fmts])
88 text += "\n"
89
90 if constants.LX_CONFIG_TICK_ONESHOT:
91 fmts = [(" .{} : {}", 'nohz_mode'),
92 (" .{} : {} nsecs", 'last_tick'),
93 (" .{} : {}", 'tick_stopped'),
94 (" .{} : {}", 'idle_jiffies'),
95 (" .{} : {}", 'idle_calls'),
96 (" .{} : {}", 'idle_sleeps'),
97 (" .{} : {} nsecs", 'idle_entrytime'),
98 (" .{} : {} nsecs", 'idle_waketime'),
99 (" .{} : {} nsecs", 'idle_exittime'),
100 (" .{} : {} nsecs", 'idle_sleeptime'),
101 (" .{}: {} nsecs", 'iowait_sleeptime'),
102 (" .{} : {}", 'last_jiffies'),
103 (" .{} : {}", 'next_timer'),
104 (" .{} : {} nsecs", 'idle_expires')]
105 text += "\n".join([s.format(f, ts[f]) for s, f in fmts])
106 text += "\njiffies: {}\n".format(jiffies)
107
108 text += "\n"
109
110 return text
111
112
113def print_tickdevice(td, cpu):
114 dev = td['evtdev']
115 text = "Tick Device: mode: {}\n".format(td['mode'])
116 if cpu < 0:
117 text += "Broadcast device\n"
118 else:
119 text += "Per CPU device: {}\n".format(cpu)
120
121 text += "Clock Event Device: "
122 if dev == 0:
123 text += "<NULL>\n"
124 return text
125
126 text += "{}\n".format(dev['name'])
127 text += " max_delta_ns: {}\n".format(dev['max_delta_ns'])
128 text += " min_delta_ns: {}\n".format(dev['min_delta_ns'])
129 text += " mult: {}\n".format(dev['mult'])
130 text += " shift: {}\n".format(dev['shift'])
131 text += " mode: {}\n".format(dev['state_use_accessors'])
132 text += " next_event: {} nsecs\n".format(dev['next_event'])
133
134 text += " set_next_event: {}\n".format(dev['set_next_event'])
135
136 members = [('set_state_shutdown', " shutdown: {}\n"),
137 ('set_state_periodic', " periodic: {}\n"),
138 ('set_state_oneshot', " oneshot: {}\n"),
139 ('set_state_oneshot_stopped', " oneshot stopped: {}\n"),
140 ('tick_resume', " resume: {}\n")]
141 for member, fmt in members:
142 if dev[member]:
143 text += fmt.format(dev[member])
144
145 text += " event_handler: {}\n".format(dev['event_handler'])
146 text += " retries: {}\n".format(dev['retries'])
147
148 return text
149
150
151def pr_cpumask(mask):
152 nr_cpu_ids = 1
153 if constants.LX_NR_CPUS > 1:
154 nr_cpu_ids = gdb.parse_and_eval("nr_cpu_ids")
155
156 inf = gdb.inferiors()[0]
157 bits = mask['bits']
158 num_bytes = (nr_cpu_ids + 7) / 8
159 buf = utils.read_memoryview(inf, bits, num_bytes).tobytes()
160 buf = binascii.b2a_hex(buf)
161
162 chunks = []
163 i = num_bytes
164 while i > 0:
165 i -= 1
166 start = i * 2
167 end = start + 2
168 chunks.append(buf[start:end])
169 if i != 0 and i % 4 == 0:
170 chunks.append(',')
171
172 extra = nr_cpu_ids % 8
173 if 0 < extra <= 4:
174 chunks[0] = chunks[0][0] # Cut off the first 0
175
176 return "".join(chunks)
177
178
179class LxTimerList(gdb.Command):
180 """Print /proc/timer_list"""
181
182 def __init__(self):
183 super(LxTimerList, self).__init__("lx-timerlist", gdb.COMMAND_DATA)
184
185 def invoke(self, arg, from_tty):
186 hrtimer_bases = gdb.parse_and_eval("&hrtimer_bases")
187 max_clock_bases = gdb.parse_and_eval("HRTIMER_MAX_CLOCK_BASES")
188
189 text = "Timer List Version: gdb scripts\n"
190 text += "HRTIMER_MAX_CLOCK_BASES: {}\n".format(max_clock_bases)
191 text += "now at {} nsecs\n".format(ktime_get())
192
193 for cpu in cpus.each_online_cpu():
194 text += print_cpu(hrtimer_bases, cpu, max_clock_bases)
195
196 if constants.LX_CONFIG_GENERIC_CLOCKEVENTS:
197 if constants.LX_CONFIG_GENERIC_CLOCKEVENTS_BROADCAST:
198 bc_dev = gdb.parse_and_eval("&tick_broadcast_device")
199 text += print_tickdevice(bc_dev, -1)
200 text += "\n"
201 mask = gdb.parse_and_eval("tick_broadcast_mask")
202 mask = pr_cpumask(mask)
203 text += "tick_broadcast_mask: {}\n".format(mask)
204 if constants.LX_CONFIG_TICK_ONESHOT:
205 mask = gdb.parse_and_eval("tick_broadcast_oneshot_mask")
206 mask = pr_cpumask(mask)
207 text += "tick_broadcast_oneshot_mask: {}\n".format(mask)
208 text += "\n"
209
210 tick_cpu_devices = gdb.parse_and_eval("&tick_cpu_device")
211 for cpu in cpus.each_online_cpu():
212 tick_dev = cpus.per_cpu(tick_cpu_devices, cpu)
213 text += print_tickdevice(tick_dev, cpu)
214 text += "\n"
215
216 gdb.write(text)
217
218
219LxTimerList()
diff --git a/scripts/gdb/linux/utils.py b/scripts/gdb/linux/utils.py
index 50805874cfc3..bc67126118c4 100644
--- a/scripts/gdb/linux/utils.py
+++ b/scripts/gdb/linux/utils.py
@@ -66,6 +66,7 @@ Note that TYPE and ELEMENT have to be quoted as strings."""
66 return container_of(ptr, gdb.lookup_type(typename.string()).pointer(), 66 return container_of(ptr, gdb.lookup_type(typename.string()).pointer(),
67 elementname.string()) 67 elementname.string())
68 68
69
69ContainerOf() 70ContainerOf()
70 71
71 72
@@ -148,14 +149,14 @@ def get_gdbserver_type():
148 def probe_qemu(): 149 def probe_qemu():
149 try: 150 try:
150 return gdb.execute("monitor info version", to_string=True) != "" 151 return gdb.execute("monitor info version", to_string=True) != ""
151 except: 152 except gdb.error:
152 return False 153 return False
153 154
154 def probe_kgdb(): 155 def probe_kgdb():
155 try: 156 try:
156 thread_info = gdb.execute("info thread 2", to_string=True) 157 thread_info = gdb.execute("info thread 2", to_string=True)
157 return "shadowCPU0" in thread_info 158 return "shadowCPU0" in thread_info
158 except: 159 except gdb.error:
159 return False 160 return False
160 161
161 global gdbserver_type 162 global gdbserver_type
@@ -172,7 +173,7 @@ def get_gdbserver_type():
172def gdb_eval_or_none(expresssion): 173def gdb_eval_or_none(expresssion):
173 try: 174 try:
174 return gdb.parse_and_eval(expresssion) 175 return gdb.parse_and_eval(expresssion)
175 except: 176 except gdb.error:
176 return None 177 return None
177 178
178 179
diff --git a/scripts/gdb/vmlinux-gdb.py b/scripts/gdb/vmlinux-gdb.py
index 6e0b0afd888a..eff5a48ac026 100644
--- a/scripts/gdb/vmlinux-gdb.py
+++ b/scripts/gdb/vmlinux-gdb.py
@@ -27,7 +27,11 @@ else:
27 import linux.modules 27 import linux.modules
28 import linux.dmesg 28 import linux.dmesg
29 import linux.tasks 29 import linux.tasks
30 import linux.config
30 import linux.cpus 31 import linux.cpus
31 import linux.lists 32 import linux.lists
33 import linux.rbtree
32 import linux.proc 34 import linux.proc
33 import linux.constants 35 import linux.constants
36 import linux.timerlist
37 import linux.clk
diff --git a/scripts/genksyms/Makefile b/scripts/genksyms/Makefile
index 03b7ce97de14..66c314bc5933 100644
--- a/scripts/genksyms/Makefile
+++ b/scripts/genksyms/Makefile
@@ -31,8 +31,8 @@ $(obj)/parse.tab.h: $(src)/parse.y FORCE
31endif 31endif
32 32
33# -I needed for generated C source (shipped source) 33# -I needed for generated C source (shipped source)
34HOSTCFLAGS_parse.tab.o := -I$(src) 34HOSTCFLAGS_parse.tab.o := -I $(srctree)/$(src)
35HOSTCFLAGS_lex.lex.o := -I$(src) 35HOSTCFLAGS_lex.lex.o := -I $(srctree)/$(src)
36 36
37# dependencies on generated files need to be listed explicitly 37# dependencies on generated files need to be listed explicitly
38$(obj)/lex.lex.o: $(obj)/parse.tab.h 38$(obj)/lex.lex.o: $(obj)/parse.tab.h
diff --git a/scripts/genksyms/genksyms.c b/scripts/genksyms/genksyms.c
index e007840f45b9..23eff234184f 100644
--- a/scripts/genksyms/genksyms.c
+++ b/scripts/genksyms/genksyms.c
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
1/* Generate kernel symbol version hashes. 2/* Generate kernel symbol version hashes.
2 Copyright 1996, 1997 Linux International. 3 Copyright 1996, 1997 Linux International.
3 4
@@ -7,19 +8,7 @@
7 This file was part of the Linux modutils 2.4.22: moved back into the 8 This file was part of the Linux modutils 2.4.22: moved back into the
8 kernel sources by Rusty Russell/Kai Germaschewski. 9 kernel sources by Rusty Russell/Kai Germaschewski.
9 10
10 This program is free software; you can redistribute it and/or modify it 11 */
11 under the terms of the GNU General Public License as published by the
12 Free Software Foundation; either version 2 of the License, or (at your
13 option) any later version.
14
15 This program is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software Foundation,
22 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
23 12
24#include <stdio.h> 13#include <stdio.h>
25#include <string.h> 14#include <string.h>
diff --git a/scripts/genksyms/genksyms.h b/scripts/genksyms/genksyms.h
index b724a0290c75..2bcdb9bebab4 100644
--- a/scripts/genksyms/genksyms.h
+++ b/scripts/genksyms/genksyms.h
@@ -1,3 +1,4 @@
1/* SPDX-License-Identifier: GPL-2.0-or-later */
1/* Generate kernel symbol version hashes. 2/* Generate kernel symbol version hashes.
2 Copyright 1996, 1997 Linux International. 3 Copyright 1996, 1997 Linux International.
3 4
@@ -6,19 +7,7 @@
6 7
7 This file is part of the Linux modutils. 8 This file is part of the Linux modutils.
8 9
9 This program is free software; you can redistribute it and/or modify it 10 */
10 under the terms of the GNU General Public License as published by the
11 Free Software Foundation; either version 2 of the License, or (at your
12 option) any later version.
13
14 This program is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software Foundation,
21 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
22 11
23#ifndef MODUTILS_GENKSYMS_H 12#ifndef MODUTILS_GENKSYMS_H
24#define MODUTILS_GENKSYMS_H 1 13#define MODUTILS_GENKSYMS_H 1
diff --git a/scripts/genksyms/keywords.c b/scripts/genksyms/keywords.c
index 9f40bcd17d07..e93336baaaed 100644
--- a/scripts/genksyms/keywords.c
+++ b/scripts/genksyms/keywords.c
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1static struct resword { 2static struct resword {
2 const char *name; 3 const char *name;
3 int token; 4 int token;
diff --git a/scripts/get_dvb_firmware b/scripts/get_dvb_firmware
index f3f230225aba..1a90802410bc 100755
--- a/scripts/get_dvb_firmware
+++ b/scripts/get_dvb_firmware
@@ -1,22 +1,9 @@
1#!/usr/bin/env perl 1#!/usr/bin/env perl
2# SPDX-License-Identifier: GPL-2.0-or-later
2# DVB firmware extractor 3# DVB firmware extractor
3# 4#
4# (c) 2004 Andrew de Quincey 5# (c) 2004 Andrew de Quincey
5# 6#
6# This program is free software; you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
8# the Free Software Foundation; either version 2 of the License, or
9# (at your option) any later version.
10#
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14#
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with this program; if not, write to the Free Software
19# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 7
21use File::Temp qw/ tempdir /; 8use File::Temp qw/ tempdir /;
22use IO::Handle; 9use IO::Handle;
diff --git a/scripts/gfp-translate b/scripts/gfp-translate
index c9230e158a8f..b2ce416d944b 100755
--- a/scripts/gfp-translate
+++ b/scripts/gfp-translate
@@ -1,7 +1,7 @@
1#!/bin/bash 1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0-only
2# Translate the bits making up a GFP mask 3# Translate the bits making up a GFP mask
3# (c) 2009, Mel Gorman <mel@csn.ul.ie> 4# (c) 2009, Mel Gorman <mel@csn.ul.ie>
4# Licensed under the terms of the GNU GPL License version 2
5SOURCE= 5SOURCE=
6GFPMASK=none 6GFPMASK=none
7 7
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index 7c5dc31c1d95..3f327e21f60e 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -76,15 +76,13 @@ savedefconfig: $(obj)/conf
76defconfig: $(obj)/conf 76defconfig: $(obj)/conf
77ifeq ($(KBUILD_DEFCONFIG),) 77ifeq ($(KBUILD_DEFCONFIG),)
78 $< $(silent) --defconfig $(Kconfig) 78 $< $(silent) --defconfig $(Kconfig)
79else 79else ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG)),)
80ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG)),)
81 @$(kecho) "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'" 80 @$(kecho) "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
82 $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig) 81 $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
83else 82else
84 @$(kecho) "*** Default configuration is based on target '$(KBUILD_DEFCONFIG)'" 83 @$(kecho) "*** Default configuration is based on target '$(KBUILD_DEFCONFIG)'"
85 $(Q)$(MAKE) -f $(srctree)/Makefile $(KBUILD_DEFCONFIG) 84 $(Q)$(MAKE) -f $(srctree)/Makefile $(KBUILD_DEFCONFIG)
86endif 85endif
87endif
88 86
89%_defconfig: $(obj)/conf 87%_defconfig: $(obj)/conf
90 $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig) 88 $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
@@ -147,8 +145,8 @@ common-objs := confdata.o expr.o lexer.lex.o parser.tab.o preprocess.o \
147 symbol.o 145 symbol.o
148 146
149$(obj)/lexer.lex.o: $(obj)/parser.tab.h 147$(obj)/lexer.lex.o: $(obj)/parser.tab.h
150HOSTCFLAGS_lexer.lex.o := -I$(src) 148HOSTCFLAGS_lexer.lex.o := -I $(srctree)/$(src)
151HOSTCFLAGS_parser.tab.o := -I$(src) 149HOSTCFLAGS_parser.tab.o := -I $(srctree)/$(src)
152 150
153# conf: Used for defconfig, oldconfig and related targets 151# conf: Used for defconfig, oldconfig and related targets
154hostprogs-y += conf 152hostprogs-y += conf
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
index 08ba146a83c5..6006154d36bd 100644
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -3,6 +3,7 @@
3 * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org> 3 * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
4 */ 4 */
5 5
6#include <sys/mman.h>
6#include <sys/stat.h> 7#include <sys/stat.h>
7#include <ctype.h> 8#include <ctype.h>
8#include <errno.h> 9#include <errno.h>
@@ -36,6 +37,52 @@ static bool is_dir(const char *path)
36 return S_ISDIR(st.st_mode); 37 return S_ISDIR(st.st_mode);
37} 38}
38 39
40/* return true if the given two files are the same, false otherwise */
41static bool is_same(const char *file1, const char *file2)
42{
43 int fd1, fd2;
44 struct stat st1, st2;
45 void *map1, *map2;
46 bool ret = false;
47
48 fd1 = open(file1, O_RDONLY);
49 if (fd1 < 0)
50 return ret;
51
52 fd2 = open(file2, O_RDONLY);
53 if (fd2 < 0)
54 goto close1;
55
56 ret = fstat(fd1, &st1);
57 if (ret)
58 goto close2;
59 ret = fstat(fd2, &st2);
60 if (ret)
61 goto close2;
62
63 if (st1.st_size != st2.st_size)
64 goto close2;
65
66 map1 = mmap(NULL, st1.st_size, PROT_READ, MAP_PRIVATE, fd1, 0);
67 if (map1 == MAP_FAILED)
68 goto close2;
69
70 map2 = mmap(NULL, st2.st_size, PROT_READ, MAP_PRIVATE, fd2, 0);
71 if (map2 == MAP_FAILED)
72 goto close2;
73
74 if (bcmp(map1, map2, st1.st_size))
75 goto close2;
76
77 ret = true;
78close2:
79 close(fd2);
80close1:
81 close(fd1);
82
83 return ret;
84}
85
39/* 86/*
40 * Create the parent directory of the given path. 87 * Create the parent directory of the given path.
41 * 88 *
@@ -179,7 +226,7 @@ const char *conf_get_configname(void)
179 return name ? name : ".config"; 226 return name ? name : ".config";
180} 227}
181 228
182const char *conf_get_autoconfig_name(void) 229static const char *conf_get_autoconfig_name(void)
183{ 230{
184 char *name = getenv("KCONFIG_AUTOCONFIG"); 231 char *name = getenv("KCONFIG_AUTOCONFIG");
185 232
@@ -194,7 +241,7 @@ char *conf_get_default_confname(void)
194 name = expand_string(conf_defname); 241 name = expand_string(conf_defname);
195 env = getenv(SRCTREE); 242 env = getenv(SRCTREE);
196 if (env) { 243 if (env) {
197 sprintf(fullname, "%s/%s", env, name); 244 snprintf(fullname, sizeof(fullname), "%s/%s", env, name);
198 if (is_present(fullname)) 245 if (is_present(fullname))
199 return fullname; 246 return fullname;
200 } 247 }
@@ -817,40 +864,35 @@ int conf_write(const char *name)
817 FILE *out; 864 FILE *out;
818 struct symbol *sym; 865 struct symbol *sym;
819 struct menu *menu; 866 struct menu *menu;
820 const char *basename;
821 const char *str; 867 const char *str;
822 char dirname[PATH_MAX+1], tmpname[PATH_MAX+22], newname[PATH_MAX+8]; 868 char tmpname[PATH_MAX + 1], oldname[PATH_MAX + 1];
823 char *env; 869 char *env;
870 bool need_newline = false;
871
872 if (!name)
873 name = conf_get_configname();
874
875 if (!*name) {
876 fprintf(stderr, "config name is empty\n");
877 return -1;
878 }
879
880 if (is_dir(name)) {
881 fprintf(stderr, "%s: Is a directory\n", name);
882 return -1;
883 }
884
885 if (make_parent_dir(name))
886 return -1;
824 887
825 dirname[0] = 0;
826 if (name && name[0]) {
827 char *slash;
828
829 if (is_dir(name)) {
830 strcpy(dirname, name);
831 strcat(dirname, "/");
832 basename = conf_get_configname();
833 } else if ((slash = strrchr(name, '/'))) {
834 int size = slash - name + 1;
835 memcpy(dirname, name, size);
836 dirname[size] = 0;
837 if (slash[1])
838 basename = slash + 1;
839 else
840 basename = conf_get_configname();
841 } else
842 basename = name;
843 } else
844 basename = conf_get_configname();
845
846 sprintf(newname, "%s%s", dirname, basename);
847 env = getenv("KCONFIG_OVERWRITECONFIG"); 888 env = getenv("KCONFIG_OVERWRITECONFIG");
848 if (!env || !*env) { 889 if (env && *env) {
849 sprintf(tmpname, "%s.tmpconfig.%d", dirname, (int)getpid());
850 out = fopen(tmpname, "w");
851 } else {
852 *tmpname = 0; 890 *tmpname = 0;
853 out = fopen(newname, "w"); 891 out = fopen(name, "w");
892 } else {
893 snprintf(tmpname, sizeof(tmpname), "%s.%d.tmp",
894 name, (int)getpid());
895 out = fopen(tmpname, "w");
854 } 896 }
855 if (!out) 897 if (!out)
856 return 1; 898 return 1;
@@ -871,12 +913,16 @@ int conf_write(const char *name)
871 "#\n" 913 "#\n"
872 "# %s\n" 914 "# %s\n"
873 "#\n", str); 915 "#\n", str);
916 need_newline = false;
874 } else if (!(sym->flags & SYMBOL_CHOICE)) { 917 } else if (!(sym->flags & SYMBOL_CHOICE)) {
875 sym_calc_value(sym); 918 sym_calc_value(sym);
876 if (!(sym->flags & SYMBOL_WRITE)) 919 if (!(sym->flags & SYMBOL_WRITE))
877 goto next; 920 goto next;
921 if (need_newline) {
922 fprintf(out, "\n");
923 need_newline = false;
924 }
878 sym->flags &= ~SYMBOL_WRITE; 925 sym->flags &= ~SYMBOL_WRITE;
879
880 conf_write_symbol(out, sym, &kconfig_printer_cb, NULL); 926 conf_write_symbol(out, sym, &kconfig_printer_cb, NULL);
881 } 927 }
882 928
@@ -888,6 +934,12 @@ next:
888 if (menu->next) 934 if (menu->next)
889 menu = menu->next; 935 menu = menu->next;
890 else while ((menu = menu->parent)) { 936 else while ((menu = menu->parent)) {
937 if (!menu->sym && menu_is_visible(menu) &&
938 menu != &rootmenu) {
939 str = menu_get_prompt(menu);
940 fprintf(out, "# end of %s\n", str);
941 need_newline = true;
942 }
891 if (menu->next) { 943 if (menu->next) {
892 menu = menu->next; 944 menu = menu->next;
893 break; 945 break;
@@ -897,14 +949,20 @@ next:
897 fclose(out); 949 fclose(out);
898 950
899 if (*tmpname) { 951 if (*tmpname) {
900 strcat(dirname, basename); 952 if (is_same(name, tmpname)) {
901 strcat(dirname, ".old"); 953 conf_message("No change to %s", name);
902 rename(newname, dirname); 954 unlink(tmpname);
903 if (rename(tmpname, newname)) 955 sym_set_change_count(0);
956 return 0;
957 }
958
959 snprintf(oldname, sizeof(oldname), "%s.old", name);
960 rename(name, oldname);
961 if (rename(tmpname, name))
904 return 1; 962 return 1;
905 } 963 }
906 964
907 conf_message("configuration written to %s", newname); 965 conf_message("configuration written to %s", name);
908 966
909 sym_set_change_count(0); 967 sym_set_change_count(0);
910 968
@@ -917,8 +975,6 @@ static int conf_write_dep(const char *name)
917 struct file *file; 975 struct file *file;
918 FILE *out; 976 FILE *out;
919 977
920 if (!name)
921 name = ".kconfig.d";
922 out = fopen("..config.tmp", "w"); 978 out = fopen("..config.tmp", "w");
923 if (!out) 979 if (!out)
924 return 1; 980 return 1;
diff --git a/scripts/kconfig/gconf.c b/scripts/kconfig/gconf.c
index 5d4ecf309ee4..e36b342f1065 100644
--- a/scripts/kconfig/gconf.c
+++ b/scripts/kconfig/gconf.c
@@ -638,7 +638,7 @@ on_set_option_mode3_activate(GtkMenuItem *menuitem, gpointer user_data)
638void on_introduction1_activate(GtkMenuItem * menuitem, gpointer user_data) 638void on_introduction1_activate(GtkMenuItem * menuitem, gpointer user_data)
639{ 639{
640 GtkWidget *dialog; 640 GtkWidget *dialog;
641 const gchar *intro_text = 641 const gchar *intro_text =
642 "Welcome to gkc, the GTK+ graphical configuration tool\n" 642 "Welcome to gkc, the GTK+ graphical configuration tool\n"
643 "For each option, a blank box indicates the feature is disabled, a\n" 643 "For each option, a blank box indicates the feature is disabled, a\n"
644 "check indicates it is enabled, and a dot indicates that it is to\n" 644 "check indicates it is enabled, and a dot indicates that it is to\n"
diff --git a/scripts/kconfig/lexer.l b/scripts/kconfig/lexer.l
index c9df1c8b9824..6354c905b006 100644
--- a/scripts/kconfig/lexer.l
+++ b/scripts/kconfig/lexer.l
@@ -378,7 +378,8 @@ FILE *zconf_fopen(const char *name)
378 if (!f && name != NULL && name[0] != '/') { 378 if (!f && name != NULL && name[0] != '/') {
379 env = getenv(SRCTREE); 379 env = getenv(SRCTREE);
380 if (env) { 380 if (env) {
381 sprintf(fullname, "%s/%s", env, name); 381 snprintf(fullname, sizeof(fullname),
382 "%s/%s", env, name);
382 f = fopen(fullname, "r"); 383 f = fopen(fullname, "r");
383 } 384 }
384 } 385 }
diff --git a/scripts/kconfig/lkc.h b/scripts/kconfig/lkc.h
index d871539e4b45..cbc7658ee27d 100644
--- a/scripts/kconfig/lkc.h
+++ b/scripts/kconfig/lkc.h
@@ -49,7 +49,6 @@ const char *zconf_curname(void);
49 49
50/* confdata.c */ 50/* confdata.c */
51const char *conf_get_configname(void); 51const char *conf_get_configname(void);
52const char *conf_get_autoconfig_name(void);
53char *conf_get_default_confname(void); 52char *conf_get_default_confname(void);
54void sym_set_change_count(int count); 53void sym_set_change_count(int count);
55void sym_add_change_count(int count); 54void sym_add_change_count(int count);
diff --git a/scripts/kconfig/lxdialog/BIG.FAT.WARNING b/scripts/kconfig/lxdialog/BIG.FAT.WARNING
index a8999d82bdb3..7cb5a7ec93d2 100644
--- a/scripts/kconfig/lxdialog/BIG.FAT.WARNING
+++ b/scripts/kconfig/lxdialog/BIG.FAT.WARNING
@@ -1,4 +1,4 @@
1This is NOT the official version of dialog. This version has been 1This is NOT the official version of dialog. This version has been
2significantly modified from the original. It is for use by the Linux 2significantly modified from the original. It is for use by the Linux
3kernel configuration script. Please do not bother Savio Lam with 3kernel configuration script. Please do not bother Savio Lam with
4questions about this program. 4questions about this program.
diff --git a/scripts/kconfig/lxdialog/inputbox.c b/scripts/kconfig/lxdialog/inputbox.c
index 611945611bf8..1dcfb288ee63 100644
--- a/scripts/kconfig/lxdialog/inputbox.c
+++ b/scripts/kconfig/lxdialog/inputbox.c
@@ -113,7 +113,8 @@ do_resize:
113 case KEY_DOWN: 113 case KEY_DOWN:
114 break; 114 break;
115 case KEY_BACKSPACE: 115 case KEY_BACKSPACE:
116 case 127: 116 case 8: /* ^H */
117 case 127: /* ^? */
117 if (pos) { 118 if (pos) {
118 wattrset(dialog, dlg.inputbox.atr); 119 wattrset(dialog, dlg.inputbox.atr);
119 if (input_x == 0) { 120 if (input_x == 0) {
diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c
index 5f8c82a4cb08..694091f3ef9d 100644
--- a/scripts/kconfig/mconf.c
+++ b/scripts/kconfig/mconf.c
@@ -936,7 +936,7 @@ static void conf_save(void)
936 set_config_filename(dialog_input_result); 936 set_config_filename(dialog_input_result);
937 return; 937 return;
938 } 938 }
939 show_textbox(NULL, "Can't create file! Probably a nonexistent directory.", 5, 60); 939 show_textbox(NULL, "Can't create file!", 5, 60);
940 break; 940 break;
941 case 1: 941 case 1:
942 show_helptext("Save Alternate Configuration", save_config_help); 942 show_helptext("Save Alternate Configuration", save_config_help);
diff --git a/scripts/kconfig/nconf-cfg.sh b/scripts/kconfig/nconf-cfg.sh
index 001559ef0a60..001559ef0a60 100644..100755
--- a/scripts/kconfig/nconf-cfg.sh
+++ b/scripts/kconfig/nconf-cfg.sh
diff --git a/scripts/kconfig/nconf.c b/scripts/kconfig/nconf.c
index a4670f4e825a..cbafe3bf082e 100644
--- a/scripts/kconfig/nconf.c
+++ b/scripts/kconfig/nconf.c
@@ -1048,7 +1048,7 @@ static int do_match(int key, struct match_state *state, int *ans)
1048 state->match_direction = FIND_NEXT_MATCH_UP; 1048 state->match_direction = FIND_NEXT_MATCH_UP;
1049 *ans = get_mext_match(state->pattern, 1049 *ans = get_mext_match(state->pattern,
1050 state->match_direction); 1050 state->match_direction);
1051 } else if (key == KEY_BACKSPACE || key == 127) { 1051 } else if (key == KEY_BACKSPACE || key == 8 || key == 127) {
1052 state->pattern[strlen(state->pattern)-1] = '\0'; 1052 state->pattern[strlen(state->pattern)-1] = '\0';
1053 adj_match_dir(&state->match_direction); 1053 adj_match_dir(&state->match_direction);
1054 } else 1054 } else
@@ -1438,8 +1438,7 @@ static void conf_save(void)
1438 set_config_filename(dialog_input_result); 1438 set_config_filename(dialog_input_result);
1439 return; 1439 return;
1440 } 1440 }
1441 btn_dialog(main_window, "Can't create file! " 1441 btn_dialog(main_window, "Can't create file!",
1442 "Probably a nonexistent directory.",
1443 1, "<OK>"); 1442 1, "<OK>");
1444 break; 1443 break;
1445 case 1: 1444 case 1:
diff --git a/scripts/kconfig/nconf.gui.c b/scripts/kconfig/nconf.gui.c
index 7be620a1fcdb..77f525a8617c 100644
--- a/scripts/kconfig/nconf.gui.c
+++ b/scripts/kconfig/nconf.gui.c
@@ -439,7 +439,8 @@ int dialog_inputbox(WINDOW *main_window,
439 case KEY_F(F_EXIT): 439 case KEY_F(F_EXIT):
440 case KEY_F(F_BACK): 440 case KEY_F(F_BACK):
441 break; 441 break;
442 case 127: 442 case 8: /* ^H */
443 case 127: /* ^? */
443 case KEY_BACKSPACE: 444 case KEY_BACKSPACE:
444 if (cursor_position > 0) { 445 if (cursor_position > 0) {
445 memmove(&result[cursor_position-1], 446 memmove(&result[cursor_position-1],
diff --git a/scripts/kconfig/tests/err_recursive_inc/Kconfig b/scripts/kconfig/tests/err_recursive_inc/Kconfig
index 0e4c8750ab65..c6f4adec76d1 100644
--- a/scripts/kconfig/tests/err_recursive_inc/Kconfig
+++ b/scripts/kconfig/tests/err_recursive_inc/Kconfig
@@ -1 +1,2 @@
1# SPDX-License-Identifier: GPL-2.0-only
1source "Kconfig.inc1" 2source "Kconfig.inc1"
diff --git a/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc1 b/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc1
index 00e408d653fc..01cbf0d69cce 100644
--- a/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc1
+++ b/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc1
@@ -1,3 +1,4 @@
1# SPDX-License-Identifier: GPL-2.0-only
1 2
2 3
3 4
diff --git a/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc2 b/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc2
index 349ea2db15dc..82351075ab1b 100644
--- a/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc2
+++ b/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc2
@@ -1,3 +1,4 @@
1# SPDX-License-Identifier: GPL-2.0-only
1 2
2 3
3source "Kconfig.inc3" 4source "Kconfig.inc3"
diff --git a/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc3 b/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc3
index 0e4c8750ab65..c6f4adec76d1 100644
--- a/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc3
+++ b/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc3
@@ -1 +1,2 @@
1# SPDX-License-Identifier: GPL-2.0-only
1source "Kconfig.inc1" 2source "Kconfig.inc1"
diff --git a/scripts/kconfig/tests/err_recursive_inc/expected_stderr b/scripts/kconfig/tests/err_recursive_inc/expected_stderr
index 6b582eee2176..b070a31fdfeb 100644
--- a/scripts/kconfig/tests/err_recursive_inc/expected_stderr
+++ b/scripts/kconfig/tests/err_recursive_inc/expected_stderr
@@ -1,6 +1,6 @@
1Recursive inclusion detected. 1Recursive inclusion detected.
2Inclusion path: 2Inclusion path:
3 current file : Kconfig.inc1 3 current file : Kconfig.inc1
4 included from: Kconfig.inc3:1 4 included from: Kconfig.inc3:2
5 included from: Kconfig.inc2:3 5 included from: Kconfig.inc2:4
6 included from: Kconfig.inc1:4 6 included from: Kconfig.inc1:5
diff --git a/scripts/leaking_addresses.pl b/scripts/leaking_addresses.pl
index ef9e5b2a1614..b2d8b8aa2d99 100755
--- a/scripts/leaking_addresses.pl
+++ b/scripts/leaking_addresses.pl
@@ -1,7 +1,7 @@
1#!/usr/bin/env perl 1#!/usr/bin/env perl
2# SPDX-License-Identifier: GPL-2.0-only
2# 3#
3# (c) 2017 Tobin C. Harding <me@tobin.cc> 4# (c) 2017 Tobin C. Harding <me@tobin.cc>
4# Licensed under the terms of the GNU GPL License version 2
5# 5#
6# leaking_addresses.pl: Scan the kernel for potential leaking addresses. 6# leaking_addresses.pl: Scan the kernel for potential leaking addresses.
7# - Scans dmesg output. 7# - Scans dmesg output.
diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
index dc0e8c5a1402..a7124f895b24 100755
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -35,7 +35,7 @@ set -e
35info() 35info()
36{ 36{
37 if [ "${quiet}" != "silent_" ]; then 37 if [ "${quiet}" != "silent_" ]; then
38 printf " %-7s %s\n" ${1} ${2} 38 printf " %-7s %s\n" "${1}" "${2}"
39 fi 39 fi
40} 40}
41 41
@@ -91,6 +91,25 @@ vmlinux_link()
91 fi 91 fi
92} 92}
93 93
94# generate .BTF typeinfo from DWARF debuginfo
95gen_btf()
96{
97 local pahole_ver;
98
99 if ! [ -x "$(command -v ${PAHOLE})" ]; then
100 info "BTF" "${1}: pahole (${PAHOLE}) is not available"
101 return 0
102 fi
103
104 pahole_ver=$(${PAHOLE} --version | sed -E 's/v([0-9]+)\.([0-9]+)/\1\2/')
105 if [ "${pahole_ver}" -lt "113" ]; then
106 info "BTF" "${1}: pahole version $(${PAHOLE} --version) is too old, need at least v1.13"
107 return 0
108 fi
109
110 info "BTF" ${1}
111 LLVM_OBJCOPY=${OBJCOPY} ${PAHOLE} -J ${1}
112}
94 113
95# Create ${2} .o file with all symbols from the ${1} object file 114# Create ${2} .o file with all symbols from the ${1} object file
96kallsyms() 115kallsyms()
@@ -193,6 +212,9 @@ modpost_link vmlinux.o
193# modpost vmlinux.o to check for section mismatches 212# modpost vmlinux.o to check for section mismatches
194${MAKE} -f "${srctree}/scripts/Makefile.modpost" vmlinux.o 213${MAKE} -f "${srctree}/scripts/Makefile.modpost" vmlinux.o
195 214
215info MODINFO modules.builtin.modinfo
216${OBJCOPY} -j .modinfo -O binary vmlinux.o modules.builtin.modinfo
217
196kallsymso="" 218kallsymso=""
197kallsyms_vmlinux="" 219kallsyms_vmlinux=""
198if [ -n "${CONFIG_KALLSYMS}" ]; then 220if [ -n "${CONFIG_KALLSYMS}" ]; then
@@ -248,6 +270,10 @@ fi
248info LD vmlinux 270info LD vmlinux
249vmlinux_link "${kallsymso}" vmlinux 271vmlinux_link "${kallsymso}" vmlinux
250 272
273if [ -n "${CONFIG_DEBUG_INFO_BTF}" ]; then
274 gen_btf vmlinux
275fi
276
251if [ -n "${CONFIG_BUILDTIME_EXTABLE_SORT}" ]; then 277if [ -n "${CONFIG_BUILDTIME_EXTABLE_SORT}" ]; then
252 info SORTEX vmlinux 278 info SORTEX vmlinux
253 sortextable vmlinux 279 sortextable vmlinux
diff --git a/scripts/markup_oops.pl b/scripts/markup_oops.pl
index 70dcfb6b3de1..e476caf52414 100755
--- a/scripts/markup_oops.pl
+++ b/scripts/markup_oops.pl
@@ -1,4 +1,5 @@
1#!/usr/bin/env perl 1#!/usr/bin/env perl
2# SPDX-License-Identifier: GPL-2.0-only
2 3
3use File::Basename; 4use File::Basename;
4use Math::BigInt; 5use Math::BigInt;
@@ -8,10 +9,6 @@ use Getopt::Long;
8# 9#
9# This file is part of the Linux kernel 10# This file is part of the Linux kernel
10# 11#
11# This program file is free software; you can redistribute it and/or modify it
12# under the terms of the GNU General Public License as published by the
13# Free Software Foundation; version 2 of the License.
14#
15# Authors: 12# Authors:
16# Arjan van de Ven <arjan@linux.intel.com> 13# Arjan van de Ven <arjan@linux.intel.com>
17 14
diff --git a/scripts/mkmakefile b/scripts/mkmakefile
index 412f13fdff52..4d0faebb1719 100755
--- a/scripts/mkmakefile
+++ b/scripts/mkmakefile
@@ -7,33 +7,11 @@
7# Usage 7# Usage
8# $1 - Kernel src directory 8# $1 - Kernel src directory
9 9
10# Only overwrite automatically generated Makefiles
11# (so we do not overwrite kernel Makefile)
12if test -e Makefile && ! grep -q Automatically Makefile
13then
14 exit 0
15fi
16if [ "${quiet}" != "silent_" ]; then 10if [ "${quiet}" != "silent_" ]; then
17 echo " GEN Makefile" 11 echo " GEN Makefile"
18fi 12fi
19 13
20cat << EOF > Makefile 14cat << EOF > Makefile
21# Automatically generated by $0: don't edit 15# Automatically generated by $(realpath $0): don't edit
22 16include $(realpath $1/Makefile)
23ifeq ("\$(origin V)", "command line")
24VERBOSE := \$(V)
25endif
26ifneq (\$(VERBOSE),1)
27Q := @
28endif
29
30MAKEFLAGS += --no-print-directory
31
32.PHONY: __sub-make \$(MAKECMDGOALS)
33
34__sub-make:
35 \$(Q)\$(MAKE) -C $1 O=\$(CURDIR) \$(MAKECMDGOALS)
36
37\$(filter-out __sub-make, \$(MAKECMDGOALS)): __sub-make
38 @:
39EOF 17EOF
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 0b0d1080b1c5..f277e116e0eb 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -639,7 +639,7 @@ static void handle_modversions(struct module *mod, struct elf_info *info,
639 info->sechdrs[sym->st_shndx].sh_offset - 639 info->sechdrs[sym->st_shndx].sh_offset -
640 (info->hdr->e_type != ET_REL ? 640 (info->hdr->e_type != ET_REL ?
641 info->sechdrs[sym->st_shndx].sh_addr : 0); 641 info->sechdrs[sym->st_shndx].sh_addr : 0);
642 crc = *crcp; 642 crc = TO_NATIVE(*crcp);
643 } 643 }
644 sym_update_crc(symname + strlen("__crc_"), mod, crc, 644 sym_update_crc(symname + strlen("__crc_"), mod, crc,
645 export); 645 export);
diff --git a/scripts/modules-check.sh b/scripts/modules-check.sh
new file mode 100755
index 000000000000..39e8cb36ba19
--- /dev/null
+++ b/scripts/modules-check.sh
@@ -0,0 +1,16 @@
1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0
3
4set -e
5
6# Check uniqueness of module names
7check_same_name_modules()
8{
9 for m in $(sed 's:.*/::' modules.order | sort | uniq -d)
10 do
11 echo "warning: same module names found:" >&2
12 sed -n "/\/$m/s:^kernel/: :p" modules.order >&2
13 done
14}
15
16check_same_name_modules
diff --git a/scripts/objdiff b/scripts/objdiff
index 4fb5d6796893..72b0b63c3fe1 100755
--- a/scripts/objdiff
+++ b/scripts/objdiff
@@ -1,11 +1,11 @@
1#!/bin/bash 1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0-only
2 3
3# objdiff - a small script for validating that a commit or series of commits 4# objdiff - a small script for validating that a commit or series of commits
4# didn't change object code. 5# didn't change object code.
5# 6#
6# Copyright 2014, Jason Cooper <jason@lakedaemon.net> 7# Copyright 2014, Jason Cooper <jason@lakedaemon.net>
7# 8#
8# Licensed under the terms of the GNU GPL version 2
9 9
10# usage example: 10# usage example:
11# 11#
diff --git a/scripts/package/Makefile b/scripts/package/Makefile
index 2c6de21e5152..ca7f46b562a4 100644
--- a/scripts/package/Makefile
+++ b/scripts/package/Makefile
@@ -1,3 +1,4 @@
1# SPDX-License-Identifier: GPL-2.0-only
1# Makefile for the different targets used to generate full packages of a kernel 2# Makefile for the different targets used to generate full packages of a kernel
2# It uses the generic clean infrastructure of kbuild 3# It uses the generic clean infrastructure of kbuild
3 4
@@ -103,7 +104,7 @@ clean-dirs += $(objtree)/snap/
103# --------------------------------------------------------------------------- 104# ---------------------------------------------------------------------------
104tar%pkg: FORCE 105tar%pkg: FORCE
105 $(MAKE) -f $(srctree)/Makefile 106 $(MAKE) -f $(srctree)/Makefile
106 $(CONFIG_SHELL) $(srctree)/scripts/package/buildtar $@ 107 +$(CONFIG_SHELL) $(srctree)/scripts/package/buildtar $@
107 108
108clean-dirs += $(objtree)/tar-install/ 109clean-dirs += $(objtree)/tar-install/
109 110
diff --git a/scripts/recordmcount.c b/scripts/recordmcount.c
index a50a2aa963ad..8387a9bc064a 100644
--- a/scripts/recordmcount.c
+++ b/scripts/recordmcount.c
@@ -1,8 +1,8 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/* 2/*
2 * recordmcount.c: construct a table of the locations of calls to 'mcount' 3 * recordmcount.c: construct a table of the locations of calls to 'mcount'
3 * so that ftrace can find them quickly. 4 * so that ftrace can find them quickly.
4 * Copyright 2009 John F. Reiser <jreiser@BitWagon.com>. All rights reserved. 5 * Copyright 2009 John F. Reiser <jreiser@BitWagon.com>. All rights reserved.
5 * Licensed under the GNU General Public License, version 2 (GPLv2).
6 * 6 *
7 * Restructured to fit Linux format, as well as other updates: 7 * Restructured to fit Linux format, as well as other updates:
8 * Copyright 2010 Steven Rostedt <srostedt@redhat.com>, Red Hat Inc. 8 * Copyright 2010 Steven Rostedt <srostedt@redhat.com>, Red Hat Inc.
diff --git a/scripts/recordmcount.h b/scripts/recordmcount.h
index 2e7793735e14..13c5e6c8829c 100644
--- a/scripts/recordmcount.h
+++ b/scripts/recordmcount.h
@@ -1,3 +1,4 @@
1/* SPDX-License-Identifier: GPL-2.0-only */
1/* 2/*
2 * recordmcount.h 3 * recordmcount.h
3 * 4 *
@@ -15,8 +16,6 @@
15 * 16 *
16 * This conversion to macros was done by: 17 * This conversion to macros was done by:
17 * Copyright 2010 Steven Rostedt <srostedt@redhat.com>, Red Hat Inc. 18 * Copyright 2010 Steven Rostedt <srostedt@redhat.com>, Red Hat Inc.
18 *
19 * Licensed under the GNU General Public License, version 2 (GPLv2).
20 */ 19 */
21#undef append_func 20#undef append_func
22#undef is_fake_mcount 21#undef is_fake_mcount
diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl
index 68841d01162c..3f77a5d695c1 100755
--- a/scripts/recordmcount.pl
+++ b/scripts/recordmcount.pl
@@ -1,6 +1,6 @@
1#!/usr/bin/env perl 1#!/usr/bin/env perl
2# SPDX-License-Identifier: GPL-2.0-only
2# (c) 2008, Steven Rostedt <srostedt@redhat.com> 3# (c) 2008, Steven Rostedt <srostedt@redhat.com>
3# Licensed under the terms of the GNU GPL License version 2
4# 4#
5# recordmcount.pl - makes a section called __mcount_loc that holds 5# recordmcount.pl - makes a section called __mcount_loc that holds
6# all the offsets to the calls to mcount. 6# all the offsets to the calls to mcount.
@@ -397,6 +397,9 @@ if ($arch eq "x86_64") {
397} elsif ($arch eq "nds32") { 397} elsif ($arch eq "nds32") {
398 $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*R_NDS32_HI20_RELA\\s+_mcount\$"; 398 $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*R_NDS32_HI20_RELA\\s+_mcount\$";
399 $alignment = 2; 399 $alignment = 2;
400} elsif ($arch eq "csky") {
401 $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*R_CKCORE_PCREL_JSR_IMM26BY2\\s+_mcount\$";
402 $alignment = 2;
400} else { 403} else {
401 die "Arch $arch is not supported with CONFIG_FTRACE_MCOUNT_RECORD"; 404 die "Arch $arch is not supported with CONFIG_FTRACE_MCOUNT_RECORD";
402} 405}
@@ -493,7 +496,7 @@ sub update_funcs
493# 496#
494# Step 2: find the sections and mcount call sites 497# Step 2: find the sections and mcount call sites
495# 498#
496open(IN, "$objdump -hdr $inputfile|") || die "error running $objdump"; 499open(IN, "LANG=C $objdump -hdr $inputfile|") || die "error running $objdump";
497 500
498my $text; 501my $text;
499 502
diff --git a/scripts/selinux/Makefile b/scripts/selinux/Makefile
index b3048b894a39..59494e14989b 100644
--- a/scripts/selinux/Makefile
+++ b/scripts/selinux/Makefile
@@ -1 +1,2 @@
1# SPDX-License-Identifier: GPL-2.0-only
1subdir-y := mdp genheaders 2subdir-y := mdp genheaders
diff --git a/scripts/selinux/genheaders/genheaders.c b/scripts/selinux/genheaders/genheaders.c
index 1ceedea847dd..544ca126a8a8 100644
--- a/scripts/selinux/genheaders/genheaders.c
+++ b/scripts/selinux/genheaders/genheaders.c
@@ -9,7 +9,6 @@
9#include <string.h> 9#include <string.h>
10#include <errno.h> 10#include <errno.h>
11#include <ctype.h> 11#include <ctype.h>
12#include <sys/socket.h>
13 12
14struct security_class_mapping { 13struct security_class_mapping {
15 const char *name; 14 const char *name;
diff --git a/scripts/selinux/install_policy.sh b/scripts/selinux/install_policy.sh
index 0b86c47baf7d..2dccf141241d 100755
--- a/scripts/selinux/install_policy.sh
+++ b/scripts/selinux/install_policy.sh
@@ -1,30 +1,61 @@
1#!/bin/sh 1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0 2# SPDX-License-Identifier: GPL-2.0
3set -e
3if [ `id -u` -ne 0 ]; then 4if [ `id -u` -ne 0 ]; then
4 echo "$0: must be root to install the selinux policy" 5 echo "$0: must be root to install the selinux policy"
5 exit 1 6 exit 1
6fi 7fi
8
7SF=`which setfiles` 9SF=`which setfiles`
8if [ $? -eq 1 ]; then 10if [ $? -eq 1 ]; then
9 if [ -f /sbin/setfiles ]; then 11 echo "Could not find setfiles"
10 SF="/usr/setfiles" 12 echo "Do you have policycoreutils installed?"
11 else 13 exit 1
12 echo "no selinux tools installed: setfiles"
13 exit 1
14 fi
15fi 14fi
16 15
17cd mdp
18
19CP=`which checkpolicy` 16CP=`which checkpolicy`
17if [ $? -eq 1 ]; then
18 echo "Could not find checkpolicy"
19 echo "Do you have checkpolicy installed?"
20 exit 1
21fi
20VERS=`$CP -V | awk '{print $1}'` 22VERS=`$CP -V | awk '{print $1}'`
21 23
22./mdp policy.conf file_contexts 24ENABLED=`which selinuxenabled`
23$CP -o policy.$VERS policy.conf 25if [ $? -eq 1 ]; then
26 echo "Could not find selinuxenabled"
27 echo "Do you have libselinux-utils installed?"
28 exit 1
29fi
30
31if selinuxenabled; then
32 echo "SELinux is already enabled"
33 echo "This prevents safely relabeling all files."
34 echo "Boot with selinux=0 on the kernel command-line or"
35 echo "SELINUX=disabled in /etc/selinux/config."
36 exit 1
37fi
38
39cd mdp
40./mdp -m policy.conf file_contexts
41$CP -U allow -M -o policy.$VERS policy.conf
24 42
25mkdir -p /etc/selinux/dummy/policy 43mkdir -p /etc/selinux/dummy/policy
26mkdir -p /etc/selinux/dummy/contexts/files 44mkdir -p /etc/selinux/dummy/contexts/files
27 45
46echo "__default__:user_u:s0" > /etc/selinux/dummy/seusers
47echo "base_r:base_t:s0" > /etc/selinux/dummy/contexts/failsafe_context
48echo "base_r:base_t:s0 base_r:base_t:s0" > /etc/selinux/dummy/default_contexts
49cat > /etc/selinux/dummy/contexts/x_contexts <<EOF
50client * user_u:base_r:base_t:s0
51property * user_u:object_r:base_t:s0
52extension * user_u:object_r:base_t:s0
53selection * user_u:object_r:base_t:s0
54event * user_u:object_r:base_t:s0
55EOF
56touch /etc/selinux/dummy/contexts/virtual_domain_context
57touch /etc/selinux/dummy/contexts/virtual_image_context
58
28cp file_contexts /etc/selinux/dummy/contexts/files 59cp file_contexts /etc/selinux/dummy/contexts/files
29cp dbus_contexts /etc/selinux/dummy/contexts 60cp dbus_contexts /etc/selinux/dummy/contexts
30cp policy.$VERS /etc/selinux/dummy/policy 61cp policy.$VERS /etc/selinux/dummy/policy
@@ -33,37 +64,22 @@ FC_FILE=/etc/selinux/dummy/contexts/files/file_contexts
33if [ ! -d /etc/selinux ]; then 64if [ ! -d /etc/selinux ]; then
34 mkdir -p /etc/selinux 65 mkdir -p /etc/selinux
35fi 66fi
36if [ ! -f /etc/selinux/config ]; then 67if [ -f /etc/selinux/config ]; then
37 cat > /etc/selinux/config << EOF 68 echo "/etc/selinux/config exists, moving to /etc/selinux/config.bak."
38SELINUX=enforcing 69 mv /etc/selinux/config /etc/selinux/config.bak
70fi
71echo "Creating new /etc/selinux/config for dummy policy."
72cat > /etc/selinux/config << EOF
73SELINUX=permissive
39SELINUXTYPE=dummy 74SELINUXTYPE=dummy
40EOF 75EOF
41else
42 TYPE=`cat /etc/selinux/config | grep "^SELINUXTYPE" | tail -1 | awk -F= '{ print $2 '}`
43 if [ "eq$TYPE" != "eqdummy" ]; then
44 selinuxenabled
45 if [ $? -eq 0 ]; then
46 echo "SELinux already enabled with a non-dummy policy."
47 echo "Exiting. Please install policy by hand if that"
48 echo "is what you REALLY want."
49 exit 1
50 fi
51 mv /etc/selinux/config /etc/selinux/config.mdpbak
52 grep -v "^SELINUXTYPE" /etc/selinux/config.mdpbak >> /etc/selinux/config
53 echo "SELINUXTYPE=dummy" >> /etc/selinux/config
54 fi
55fi
56 76
57cd /etc/selinux/dummy/contexts/files 77cd /etc/selinux/dummy/contexts/files
58$SF file_contexts / 78$SF -F file_contexts /
59 79
60mounts=`cat /proc/$$/mounts | egrep "ext2|ext3|xfs|jfs|ext4|ext4dev|gfs2" | awk '{ print $2 '}` 80mounts=`cat /proc/$$/mounts | \
61$SF file_contexts $mounts 81 egrep "ext[234]|jfs|xfs|reiserfs|jffs2|gfs2|btrfs|f2fs|ocfs2" | \
82 awk '{ print $2 '}`
83$SF -F file_contexts $mounts
62 84
63 85echo "-F" > /.autorelabel
64dodev=`cat /proc/$$/mounts | grep "/dev "`
65if [ "eq$dodev" != "eq" ]; then
66 mount --move /dev /mnt
67 $SF file_contexts /dev
68 mount --move /mnt /dev
69fi
diff --git a/scripts/selinux/mdp/Makefile b/scripts/selinux/mdp/Makefile
index e9c92db7e2a3..8a1269a9d0ba 100644
--- a/scripts/selinux/mdp/Makefile
+++ b/scripts/selinux/mdp/Makefile
@@ -2,7 +2,7 @@
2hostprogs-y := mdp 2hostprogs-y := mdp
3HOST_EXTRACFLAGS += \ 3HOST_EXTRACFLAGS += \
4 -I$(srctree)/include/uapi -I$(srctree)/include \ 4 -I$(srctree)/include/uapi -I$(srctree)/include \
5 -I$(srctree)/security/selinux/include 5 -I$(srctree)/security/selinux/include -I$(objtree)/include
6 6
7always := $(hostprogs-y) 7always := $(hostprogs-y)
8clean-files := policy.* file_contexts 8clean-files := policy.* file_contexts
diff --git a/scripts/selinux/mdp/mdp.c b/scripts/selinux/mdp/mdp.c
index 073fe7537f6c..576d11a60417 100644
--- a/scripts/selinux/mdp/mdp.c
+++ b/scripts/selinux/mdp/mdp.c
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
1/* 2/*
2 * 3 *
3 * mdp - make dummy policy 4 * mdp - make dummy policy
@@ -5,20 +6,6 @@
5 * When pointed at a kernel tree, builds a dummy policy for that kernel 6 * When pointed at a kernel tree, builds a dummy policy for that kernel
6 * with exactly one type with full rights to itself. 7 * with exactly one type with full rights to itself.
7 * 8 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 *
22 * Copyright (C) IBM Corporation, 2006 9 * Copyright (C) IBM Corporation, 2006
23 * 10 *
24 * Authors: Serge E. Hallyn <serue@us.ibm.com> 11 * Authors: Serge E. Hallyn <serue@us.ibm.com>
@@ -32,7 +19,7 @@
32#include <stdlib.h> 19#include <stdlib.h>
33#include <unistd.h> 20#include <unistd.h>
34#include <string.h> 21#include <string.h>
35#include <sys/socket.h> 22#include <linux/kconfig.h>
36 23
37static void usage(char *name) 24static void usage(char *name)
38{ 25{
@@ -95,10 +82,31 @@ int main(int argc, char *argv[])
95 } 82 }
96 fprintf(fout, "\n"); 83 fprintf(fout, "\n");
97 84
98 /* NOW PRINT OUT MLS STUFF */ 85 /* print out mls declarations and constraints */
99 if (mls) { 86 if (mls) {
100 printf("MLS not yet implemented\n"); 87 fprintf(fout, "sensitivity s0;\n");
101 exit(1); 88 fprintf(fout, "sensitivity s1;\n");
89 fprintf(fout, "dominance { s0 s1 }\n");
90 fprintf(fout, "category c0;\n");
91 fprintf(fout, "category c1;\n");
92 fprintf(fout, "level s0:c0.c1;\n");
93 fprintf(fout, "level s1:c0.c1;\n");
94#define SYSTEMLOW "s0"
95#define SYSTEMHIGH "s1:c0.c1"
96 for (i = 0; secclass_map[i].name; i++) {
97 struct security_class_mapping *map = &secclass_map[i];
98
99 fprintf(fout, "mlsconstrain %s {\n", map->name);
100 for (j = 0; map->perms[j]; j++)
101 fprintf(fout, "\t%s\n", map->perms[j]);
102 /*
103 * This requires all subjects and objects to be
104 * single-level (l2 eq h2), and that the subject
105 * level dominate the object level (h1 dom h2)
106 * in order to have any permissions to it.
107 */
108 fprintf(fout, "} (l2 eq h2 and h1 dom h2);\n\n");
109 }
102 } 110 }
103 111
104 /* types, roles, and allows */ 112 /* types, roles, and allows */
@@ -108,34 +116,127 @@ int main(int argc, char *argv[])
108 for (i = 0; secclass_map[i].name; i++) 116 for (i = 0; secclass_map[i].name; i++)
109 fprintf(fout, "allow base_t base_t:%s *;\n", 117 fprintf(fout, "allow base_t base_t:%s *;\n",
110 secclass_map[i].name); 118 secclass_map[i].name);
111 fprintf(fout, "user user_u roles { base_r };\n"); 119 fprintf(fout, "user user_u roles { base_r }");
112 fprintf(fout, "\n"); 120 if (mls)
121 fprintf(fout, " level %s range %s - %s", SYSTEMLOW,
122 SYSTEMLOW, SYSTEMHIGH);
123 fprintf(fout, ";\n");
124
125#define SUBJUSERROLETYPE "user_u:base_r:base_t"
126#define OBJUSERROLETYPE "user_u:object_r:base_t"
113 127
114 /* default sids */ 128 /* default sids */
115 for (i = 1; i < initial_sid_to_string_len; i++) 129 for (i = 1; i < initial_sid_to_string_len; i++)
116 fprintf(fout, "sid %s user_u:base_r:base_t\n", initial_sid_to_string[i]); 130 fprintf(fout, "sid %s " SUBJUSERROLETYPE "%s\n",
131 initial_sid_to_string[i], mls ? ":" SYSTEMLOW : "");
117 fprintf(fout, "\n"); 132 fprintf(fout, "\n");
118 133
119 fprintf(fout, "fs_use_xattr ext2 user_u:base_r:base_t;\n"); 134#define FS_USE(behavior, fstype) \
120 fprintf(fout, "fs_use_xattr ext3 user_u:base_r:base_t;\n"); 135 fprintf(fout, "fs_use_%s %s " OBJUSERROLETYPE "%s;\n", \
121 fprintf(fout, "fs_use_xattr ext4 user_u:base_r:base_t;\n"); 136 behavior, fstype, mls ? ":" SYSTEMLOW : "")
122 fprintf(fout, "fs_use_xattr jfs user_u:base_r:base_t;\n"); 137
123 fprintf(fout, "fs_use_xattr xfs user_u:base_r:base_t;\n"); 138 /*
124 fprintf(fout, "fs_use_xattr reiserfs user_u:base_r:base_t;\n"); 139 * Filesystems whose inode labels can be fetched via getxattr.
125 fprintf(fout, "fs_use_xattr jffs2 user_u:base_r:base_t;\n"); 140 */
126 fprintf(fout, "fs_use_xattr gfs2 user_u:base_r:base_t;\n"); 141#ifdef CONFIG_EXT2_FS_SECURITY
127 142 FS_USE("xattr", "ext2");
128 fprintf(fout, "fs_use_task eventpollfs user_u:base_r:base_t;\n"); 143#endif
129 fprintf(fout, "fs_use_task pipefs user_u:base_r:base_t;\n"); 144#ifdef CONFIG_EXT4_FS_SECURITY
130 fprintf(fout, "fs_use_task sockfs user_u:base_r:base_t;\n"); 145#ifdef CONFIG_EXT4_USE_FOR_EXT2
131 146 FS_USE("xattr", "ext2");
132 fprintf(fout, "fs_use_trans mqueue user_u:base_r:base_t;\n"); 147#endif
133 fprintf(fout, "fs_use_trans devpts user_u:base_r:base_t;\n"); 148 FS_USE("xattr", "ext3");
134 fprintf(fout, "fs_use_trans hugetlbfs user_u:base_r:base_t;\n"); 149 FS_USE("xattr", "ext4");
135 fprintf(fout, "fs_use_trans tmpfs user_u:base_r:base_t;\n"); 150#endif
136 fprintf(fout, "fs_use_trans shm user_u:base_r:base_t;\n"); 151#ifdef CONFIG_JFS_SECURITY
137 152 FS_USE("xattr", "jfs");
138 fprintf(fout, "genfscon proc / user_u:base_r:base_t\n"); 153#endif
154#ifdef CONFIG_REISERFS_FS_SECURITY
155 FS_USE("xattr", "reiserfs");
156#endif
157#ifdef CONFIG_JFFS2_FS_SECURITY
158 FS_USE("xattr", "jffs2");
159#endif
160#ifdef CONFIG_XFS_FS
161 FS_USE("xattr", "xfs");
162#endif
163#ifdef CONFIG_GFS2_FS
164 FS_USE("xattr", "gfs2");
165#endif
166#ifdef CONFIG_BTRFS_FS
167 FS_USE("xattr", "btrfs");
168#endif
169#ifdef CONFIG_F2FS_FS_SECURITY
170 FS_USE("xattr", "f2fs");
171#endif
172#ifdef CONFIG_OCFS2_FS
173 FS_USE("xattr", "ocsfs2");
174#endif
175#ifdef CONFIG_OVERLAY_FS
176 FS_USE("xattr", "overlay");
177#endif
178#ifdef CONFIG_SQUASHFS_XATTR
179 FS_USE("xattr", "squashfs");
180#endif
181
182 /*
183 * Filesystems whose inodes are labeled from allocating task.
184 */
185 FS_USE("task", "pipefs");
186 FS_USE("task", "sockfs");
187
188 /*
189 * Filesystems whose inode labels are computed from both
190 * the allocating task and the superblock label.
191 */
192#ifdef CONFIG_UNIX98_PTYS
193 FS_USE("trans", "devpts");
194#endif
195#ifdef CONFIG_HUGETLBFS
196 FS_USE("trans", "hugetlbfs");
197#endif
198#ifdef CONFIG_TMPFS
199 FS_USE("trans", "tmpfs");
200#endif
201#ifdef CONFIG_DEVTMPFS
202 FS_USE("trans", "devtmpfs");
203#endif
204#ifdef CONFIG_POSIX_MQUEUE
205 FS_USE("trans", "mqueue");
206#endif
207
208#define GENFSCON(fstype, prefix) \
209 fprintf(fout, "genfscon %s %s " OBJUSERROLETYPE "%s\n", \
210 fstype, prefix, mls ? ":" SYSTEMLOW : "")
211
212 /*
213 * Filesystems whose inodes are labeled from path prefix match
214 * relative to the filesystem root. Depending on the filesystem,
215 * only a single label for all inodes may be supported. Here
216 * we list the filesystem types for which per-file labeling is
217 * supported using genfscon; any other filesystem type can also
218 * be added by only with a single entry for all of its inodes.
219 */
220#ifdef CONFIG_PROC_FS
221 GENFSCON("proc", "/");
222#endif
223#ifdef CONFIG_SECURITY_SELINUX
224 GENFSCON("selinuxfs", "/");
225#endif
226#ifdef CONFIG_SYSFS
227 GENFSCON("sysfs", "/");
228#endif
229#ifdef CONFIG_DEBUG_FS
230 GENFSCON("debugfs", "/");
231#endif
232#ifdef CONFIG_TRACING
233 GENFSCON("tracefs", "/");
234#endif
235#ifdef CONFIG_PSTORE
236 GENFSCON("pstore", "/");
237#endif
238 GENFSCON("cgroup", "/");
239 GENFSCON("cgroup2", "/");
139 240
140 fclose(fout); 241 fclose(fout);
141 242
@@ -144,8 +245,8 @@ int main(int argc, char *argv[])
144 printf("Wrote policy, but cannot open %s for writing\n", ctxout); 245 printf("Wrote policy, but cannot open %s for writing\n", ctxout);
145 usage(argv[0]); 246 usage(argv[0]);
146 } 247 }
147 fprintf(fout, "/ user_u:base_r:base_t\n"); 248 fprintf(fout, "/ " OBJUSERROLETYPE "%s\n", mls ? ":" SYSTEMLOW : "");
148 fprintf(fout, "/.* user_u:base_r:base_t\n"); 249 fprintf(fout, "/.* " OBJUSERROLETYPE "%s\n", mls ? ":" SYSTEMLOW : "");
149 fclose(fout); 250 fclose(fout);
150 251
151 return 0; 252 return 0;
diff --git a/scripts/show_delta b/scripts/show_delta
index 5b365009e6a3..264399307c4f 100755
--- a/scripts/show_delta
+++ b/scripts/show_delta
@@ -1,4 +1,5 @@
1#!/usr/bin/python 1#!/usr/bin/python
2# SPDX-License-Identifier: GPL-2.0-only
2# 3#
3# show_deltas: Read list of printk messages instrumented with 4# show_deltas: Read list of printk messages instrumented with
4# time data, and format with time deltas. 5# time data, and format with time deltas.
@@ -7,7 +8,6 @@
7# 8#
8# Copyright 2003 Sony Corporation 9# Copyright 2003 Sony Corporation
9# 10#
10# GPL 2.0 applies.
11 11
12import sys 12import sys
13import string 13import string
diff --git a/scripts/sortextable.c b/scripts/sortextable.c
index 365a907f98b3..55768654e3c6 100644
--- a/scripts/sortextable.c
+++ b/scripts/sortextable.c
@@ -1,3 +1,4 @@
1// SPDX-License-Identifier: GPL-2.0-only
1/* 2/*
2 * sortextable.c: Sort the kernel's exception table 3 * sortextable.c: Sort the kernel's exception table
3 * 4 *
@@ -6,7 +7,6 @@
6 * Based on code taken from recortmcount.c which is: 7 * Based on code taken from recortmcount.c which is:
7 * 8 *
8 * Copyright 2009 John F. Reiser <jreiser@BitWagon.com>. All rights reserved. 9 * Copyright 2009 John F. Reiser <jreiser@BitWagon.com>. All rights reserved.
9 * Licensed under the GNU General Public License, version 2 (GPLv2).
10 * 10 *
11 * Restructured to fit Linux format, as well as other updates: 11 * Restructured to fit Linux format, as well as other updates:
12 * Copyright 2010 Steven Rostedt <srostedt@redhat.com>, Red Hat Inc. 12 * Copyright 2010 Steven Rostedt <srostedt@redhat.com>, Red Hat Inc.
diff --git a/scripts/sortextable.h b/scripts/sortextable.h
index ba8700428e21..d4b3f6c40f02 100644
--- a/scripts/sortextable.h
+++ b/scripts/sortextable.h
@@ -1,3 +1,4 @@
1/* SPDX-License-Identifier: GPL-2.0-only */
1/* 2/*
2 * sortextable.h 3 * sortextable.h
3 * 4 *
@@ -7,9 +8,6 @@
7 * 8 *
8 * Copyright 2009 John F. Reiser <jreiser@BitWagon.com>. All rights reserved. 9 * Copyright 2009 John F. Reiser <jreiser@BitWagon.com>. All rights reserved.
9 * Copyright 2010 Steven Rostedt <srostedt@redhat.com>, Red Hat Inc. 10 * Copyright 2010 Steven Rostedt <srostedt@redhat.com>, Red Hat Inc.
10 *
11 *
12 * Licensed under the GNU General Public License, version 2 (GPLv2).
13 */ 11 */
14 12
15#undef extable_ent_size 13#undef extable_ent_size
diff --git a/scripts/spdxcheck.py b/scripts/spdxcheck.py
index 4fe392e507fb..6374e078a5f2 100755
--- a/scripts/spdxcheck.py
+++ b/scripts/spdxcheck.py
@@ -32,7 +32,8 @@ class SPDXdata(object):
32def read_spdxdata(repo): 32def read_spdxdata(repo):
33 33
34 # The subdirectories of LICENSES in the kernel source 34 # The subdirectories of LICENSES in the kernel source
35 license_dirs = [ "preferred", "other", "exceptions" ] 35 # Note: exceptions needs to be parsed as last directory.
36 license_dirs = [ "preferred", "dual", "deprecated", "exceptions" ]
36 lictree = repo.head.commit.tree['LICENSES'] 37 lictree = repo.head.commit.tree['LICENSES']
37 38
38 spdx = SPDXdata() 39 spdx = SPDXdata()
@@ -58,13 +59,13 @@ def read_spdxdata(repo):
58 elif l.startswith('SPDX-Licenses:'): 59 elif l.startswith('SPDX-Licenses:'):
59 for lic in l.split(':')[1].upper().strip().replace(' ', '').replace('\t', '').split(','): 60 for lic in l.split(':')[1].upper().strip().replace(' ', '').replace('\t', '').split(','):
60 if not lic in spdx.licenses: 61 if not lic in spdx.licenses:
61 raise SPDXException(None, 'Exception %s missing license %s' %(ex, lic)) 62 raise SPDXException(None, 'Exception %s missing license %s' %(exception, lic))
62 spdx.exceptions[exception].append(lic) 63 spdx.exceptions[exception].append(lic)
63 64
64 elif l.startswith("License-Text:"): 65 elif l.startswith("License-Text:"):
65 if exception: 66 if exception:
66 if not len(spdx.exceptions[exception]): 67 if not len(spdx.exceptions[exception]):
67 raise SPDXException(el, 'Exception %s is missing SPDX-Licenses' %excid) 68 raise SPDXException(el, 'Exception %s is missing SPDX-Licenses' %exception)
68 spdx.exception_files += 1 69 spdx.exception_files += 1
69 else: 70 else:
70 spdx.license_files += 1 71 spdx.license_files += 1
diff --git a/scripts/sphinx-pre-install b/scripts/sphinx-pre-install
index 067459760a7b..9be208db88d3 100755
--- a/scripts/sphinx-pre-install
+++ b/scripts/sphinx-pre-install
@@ -1,19 +1,11 @@
1#!/usr/bin/perl 1#!/usr/bin/perl
2# SPDX-License-Identifier: GPL-2.0-or-later
2use strict; 3use strict;
3 4
4# Copyright (c) 2017 Mauro Carvalho Chehab <mchehab@kernel.org> 5# Copyright (c) 2017 Mauro Carvalho Chehab <mchehab@kernel.org>
5# 6#
6# This program is free software; you can redistribute it and/or
7# modify it under the terms of the GNU General Public License
8# as published by the Free Software Foundation; either version 2
9# of the License, or (at your option) any later version.
10#
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14# GNU General Public License for more details.
15 7
16my $virtenv_dir = "sphinx_1.4"; 8my $conf = "Documentation/conf.py";
17my $requirement_file = "Documentation/sphinx/requirements.txt"; 9my $requirement_file = "Documentation/sphinx/requirements.txt";
18 10
19# 11#
@@ -26,7 +18,9 @@ my $need = 0;
26my $optional = 0; 18my $optional = 0;
27my $need_symlink = 0; 19my $need_symlink = 0;
28my $need_sphinx = 0; 20my $need_sphinx = 0;
21my $rec_sphinx_upgrade = 0;
29my $install = ""; 22my $install = "";
23my $virtenv_dir = "sphinx_";
30 24
31# 25#
32# Command line arguments 26# Command line arguments
@@ -201,13 +195,15 @@ sub check_missing_tex($)
201 } 195 }
202} 196}
203 197
204sub check_sphinx() 198sub get_sphinx_fname()
205{ 199{
206 return if findprog("sphinx-build"); 200 my $fname = "sphinx-build";
201 return $fname if findprog($fname);
207 202
208 if (findprog("sphinx-build-3")) { 203 $fname = "sphinx-build-3";
204 if (findprog($fname)) {
209 $need_symlink = 1; 205 $need_symlink = 1;
210 return; 206 return $fname;
211 } 207 }
212 208
213 if ($virtualenv) { 209 if ($virtualenv) {
@@ -219,6 +215,73 @@ sub check_sphinx()
219 } else { 215 } else {
220 add_package("python-sphinx", 0); 216 add_package("python-sphinx", 0);
221 } 217 }
218
219 return "";
220}
221
222sub check_sphinx()
223{
224 my $min_version;
225 my $rec_version;
226 my $cur_version;
227
228 open IN, $conf or die "Can't open $conf";
229 while (<IN>) {
230 if (m/^\s*needs_sphinx\s*=\s*[\'\"]([\d\.]+)[\'\"]/) {
231 $min_version=$1;
232 last;
233 }
234 }
235 close IN;
236
237 die "Can't get needs_sphinx version from $conf" if (!$min_version);
238
239 open IN, $requirement_file or die "Can't open $requirement_file";
240 while (<IN>) {
241 if (m/^\s*Sphinx\s*==\s*([\d\.]+)$/) {
242 $rec_version=$1;
243 last;
244 }
245 }
246 close IN;
247
248 die "Can't get recommended sphinx version from $requirement_file" if (!$min_version);
249
250 $virtenv_dir .= $rec_version;
251
252 my $sphinx = get_sphinx_fname();
253 return if ($sphinx eq "");
254
255 open IN, "$sphinx --version 2>&1 |" or die "$sphinx returned an error";
256 while (<IN>) {
257 if (m/^\s*sphinx-build\s+([\d\.]+)$/) {
258 $cur_version=$1;
259 last;
260 }
261 # Sphinx 1.2.x uses a different format
262 if (m/^\s*Sphinx.*\s+([\d\.]+)$/) {
263 $cur_version=$1;
264 last;
265 }
266 }
267 close IN;
268
269 die "$sphinx didn't return its version" if (!$cur_version);
270
271 printf "Sphinx version %s (minimal: %s, recommended >= %s)\n",
272 $cur_version, $min_version, $rec_version;
273
274 if ($cur_version lt $min_version) {
275 print "Warning: Sphinx version should be >= $min_version\n\n";
276 $need_sphinx = 1;
277 return;
278 }
279
280 if ($cur_version lt $rec_version) {
281 print "Warning: It is recommended at least Sphinx version $rec_version.\n";
282 print " To upgrade, use:\n\n";
283 $rec_sphinx_upgrade = 1;
284 }
222} 285}
223 286
224# 287#
@@ -532,6 +595,7 @@ sub check_needs()
532 check_program("dot", 1); 595 check_program("dot", 1);
533 check_program("convert", 1); 596 check_program("convert", 1);
534 check_program("rsvg-convert", 1) if ($pdf); 597 check_program("rsvg-convert", 1) if ($pdf);
598 check_program("latexmk", 1) if ($pdf);
535 599
536 check_distros(); 600 check_distros();
537 601
@@ -539,7 +603,7 @@ sub check_needs()
539 printf "\tsudo ln -sf %s /usr/bin/sphinx-build\n\n", 603 printf "\tsudo ln -sf %s /usr/bin/sphinx-build\n\n",
540 which("sphinx-build-3"); 604 which("sphinx-build-3");
541 } 605 }
542 if ($need_sphinx) { 606 if ($need_sphinx || $rec_sphinx_upgrade) {
543 my $activate = "$virtenv_dir/bin/activate"; 607 my $activate = "$virtenv_dir/bin/activate";
544 if (-e "$ENV{'PWD'}/$activate") { 608 if (-e "$ENV{'PWD'}/$activate") {
545 printf "\nNeed to activate virtualenv with:\n"; 609 printf "\nNeed to activate virtualenv with:\n";
@@ -553,7 +617,8 @@ sub check_needs()
553 printf "\t$virtualenv $virtenv_dir\n"; 617 printf "\t$virtualenv $virtenv_dir\n";
554 printf "\t. $activate\n"; 618 printf "\t. $activate\n";
555 printf "\tpip install -r $requirement_file\n"; 619 printf "\tpip install -r $requirement_file\n";
556 $need++; 620
621 $need++ if (!$rec_sphinx_upgrade);
557 } 622 }
558 } 623 }
559 printf "\n"; 624 printf "\n";
diff --git a/scripts/tags.sh b/scripts/tags.sh
index f470d9919ed7..d46be47633af 100755
--- a/scripts/tags.sh
+++ b/scripts/tags.sh
@@ -1,4 +1,5 @@
1#!/bin/bash 1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0-only
2# Generate tags or cscope files 3# Generate tags or cscope files
3# Usage tags.sh <mode> 4# Usage tags.sh <mode>
4# 5#
@@ -19,7 +20,7 @@ ignore="$ignore ( -name *.mod.c ) -prune -o"
19# Do not use full path if we do not use O=.. builds 20# Do not use full path if we do not use O=.. builds
20# Use make O=. {tags|cscope} 21# Use make O=. {tags|cscope}
21# to force full paths for a non-O= build 22# to force full paths for a non-O= build
22if [ "${KBUILD_SRC}" = "" ]; then 23if [ "${srctree}" = "." -o -z "${srctree}" ]; then
23 tree= 24 tree=
24else 25else
25 tree=${srctree}/ 26 tree=${srctree}/
diff --git a/scripts/tracing/draw_functrace.py b/scripts/tracing/draw_functrace.py
index 9b6dd4f36335..b65735758520 100755
--- a/scripts/tracing/draw_functrace.py
+++ b/scripts/tracing/draw_functrace.py
@@ -1,8 +1,8 @@
1#!/usr/bin/python 1#!/usr/bin/python
2# SPDX-License-Identifier: GPL-2.0-only
2 3
3""" 4"""
4Copyright 2008 (c) Frederic Weisbecker <fweisbec@gmail.com> 5Copyright 2008 (c) Frederic Weisbecker <fweisbec@gmail.com>
5Licensed under the terms of the GNU GPL License version 2
6 6
7This script parses a trace provided by the function tracer in 7This script parses a trace provided by the function tracer in
8kernel/trace/trace_functions.c 8kernel/trace/trace_functions.c