History

Merge 5.18-rc5 into driver-core-next

We need the kernfs/driver core fixes in here as well.

Greg Kroah-Hartman committed 4 years ago

Commit 0e509f52 parents f8ae07f 672c0c51035 files · +8377 −5699Browse files

Showing the changes to scripts (3 of 1035 files). Show all

Unified · Split

3 files
  1. scripts/Makefile.build +1 −1
  2. scripts/gcc-plugins/latent_entropy_plugin.c +27 −17
  3. scripts/link-vmlinux.sh +1 −1
scripts/Makefile.build+1−1
@@ -231,7 +231,7 @@ objtool_args = \ · 230 unmodified lines
231231 $(if $(part-of-module), --module) \
232232 $(if $(CONFIG_X86_KERNEL_IBT), --lto --ibt) \
233233 $(if $(CONFIG_FRAME_POINTER),, --no-fp) \
234− $(if $(CONFIG_GCOV_KERNEL)$(CONFIG_LTO_CLANG), --no-unreachable)\
234+ $(if $(CONFIG_GCOV_KERNEL), --no-unreachable) \
235235 $(if $(CONFIG_RETPOLINE), --retpoline) \
236236 $(if $(CONFIG_X86_SMAP), --uaccess) \
237237 $(if $(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL), --mcount) \
scripts/gcc-plugins/latent_entropy_plugin.c+27−17
@@ -86,25 +86,31 @@ static struct plugin_info latent_entropy_plugin_info = { · 85 unmodified lines
8686 .help = "disable\tturn off latent entropy instrumentation\n",
8787 };
8888
89−static unsigned HOST_WIDE_INT seed;
90−/*
91− * get_random_seed() (this is a GCC function) generates the seed.
92− * This is a simple random generator without any cryptographic security because
93− * the entropy doesn't come from here.
94− */
89+static unsigned HOST_WIDE_INT deterministic_seed;
90+static unsigned HOST_WIDE_INT rnd_buf[32];
91+static size_t rnd_idx = ARRAY_SIZE(rnd_buf);
92+static int urandom_fd = -1;
93+
9594 static unsigned HOST_WIDE_INT get_random_const(void)
9695 {
97− unsigned int i;
98− unsigned HOST_WIDE_INT ret = 0;
99−
100− for (i = 0; i < 8 * sizeof(ret); i++) {
101− ret = (ret << 1) | (seed & 1);
102− seed >>= 1;
103− if (ret & 1)
104− seed ^= 0xD800000000000000ULL;
96+ if (deterministic_seed) {
97+ unsigned HOST_WIDE_INT w = deterministic_seed;
98+ w ^= w << 13;
99+ w ^= w >> 7;
100+ w ^= w << 17;
101+ deterministic_seed = w;
102+ return deterministic_seed;
105103 }
106104
107− return ret;
105+ if (urandom_fd < 0) {
106+ urandom_fd = open("/dev/urandom", O_RDONLY);
107+ gcc_assert(urandom_fd >= 0);
108+ }
109+ if (rnd_idx >= ARRAY_SIZE(rnd_buf)) {
110+ gcc_assert(read(urandom_fd, rnd_buf, sizeof(rnd_buf)) == sizeof(rnd_buf));
111+ rnd_idx = 0;
112+ }
113+ return rnd_buf[rnd_idx++];
108114 }
109115
110116 static tree tree_get_random_const(tree type)
@@ -537,8 +543,6 @@ static void latent_entropy_start_unit(void *gcc_data __unused, · 426 unmodified lines
537543 tree type, id;
538544 int quals;
539545
540− seed = get_random_seed(false);
541−
542546 if (in_lto_p)
543547 return;
544548
@@ -573,6 +577,12 @@ __visible int plugin_init(struct plugin_name_args *plugin_info, · 28 unmodified lines
573577 const struct plugin_argument * const argv = plugin_info->argv;
574578 int i;
575579
580+ /*
581+ * Call get_random_seed() with noinit=true, so that this returns
582+ * 0 in the case where no seed has been passed via -frandom-seed.
583+ */
584+ deterministic_seed = get_random_seed(true);
585+
576586 static const struct ggc_root_tab gt_ggc_r_gt_latent_entropy[] = {
577587 {
578588 .base = &latent_entropy_decl,
scripts/link-vmlinux.sh+1−1
@@ -140,7 +140,7 @@ objtool_link() · 139 unmodified lines
140140 if ! is_enabled CONFIG_FRAME_POINTER; then
141141 objtoolopt="${objtoolopt} --no-fp"
142142 fi
143− if is_enabled CONFIG_GCOV_KERNEL || is_enabled CONFIG_LTO_CLANG; then
143+ if is_enabled CONFIG_GCOV_KERNEL; then
144144 objtoolopt="${objtoolopt} --no-unreachable"
145145 fi
146146 if is_enabled CONFIG_RETPOLINE; then