Message ID | 20211013175742.1197608-3-keescook@chromium.org (mailing list archive) |
---|---|
State | Mainlined |
Commit | 0d054d4e82072bcfd5eb961536b09a9b3f5613fb |
Headers | show |
Series | x86: Various clean-ups in support of FGKASLR | expand |
On Wed, Oct 13, 2021 at 10:57 AM Kees Cook <keescook@chromium.org> wrote: > > Under earlyprintk, each RNG call produces a debug report line. To support > the future FGKASLR feature, which will fetch random bytes during function > shuffling, this is not useful information (each line is identical and > tells us nothing new), needlessly spamming the console. Instead, allow > for a NULL "purpose" to suppress the debug reporting. Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> > > Signed-off-by: Kees Cook <keescook@chromium.org> > --- > arch/x86/lib/kaslr.c | 18 ++++++++++++------ > 1 file changed, 12 insertions(+), 6 deletions(-) > > diff --git a/arch/x86/lib/kaslr.c b/arch/x86/lib/kaslr.c > index a53665116458..2b3eb8c948a3 100644 > --- a/arch/x86/lib/kaslr.c > +++ b/arch/x86/lib/kaslr.c > @@ -56,11 +56,14 @@ unsigned long kaslr_get_random_long(const char *purpose) > unsigned long raw, random = get_boot_seed(); > bool use_i8254 = true; > > - debug_putstr(purpose); > - debug_putstr(" KASLR using"); > + if (purpose) { > + debug_putstr(purpose); > + debug_putstr(" KASLR using"); > + } > > if (has_cpuflag(X86_FEATURE_RDRAND)) { > - debug_putstr(" RDRAND"); > + if (purpose) > + debug_putstr(" RDRAND"); > if (rdrand_long(&raw)) { > random ^= raw; > use_i8254 = false; > @@ -68,7 +71,8 @@ unsigned long kaslr_get_random_long(const char *purpose) > } > > if (has_cpuflag(X86_FEATURE_TSC)) { > - debug_putstr(" RDTSC"); > + if (purpose) > + debug_putstr(" RDTSC"); > raw = rdtsc(); > > random ^= raw; > @@ -76,7 +80,8 @@ unsigned long kaslr_get_random_long(const char *purpose) > } > > if (use_i8254) { > - debug_putstr(" i8254"); > + if (purpose) > + debug_putstr(" i8254"); > random ^= i8254(); > } > > @@ -86,7 +91,8 @@ unsigned long kaslr_get_random_long(const char *purpose) > : "a" (random), "rm" (mix_const)); > random += raw; > > - debug_putstr("...\n"); > + if (purpose) > + debug_putstr("...\n"); > > return random; > } > -- > 2.30.2 >
diff --git a/arch/x86/lib/kaslr.c b/arch/x86/lib/kaslr.c index a53665116458..2b3eb8c948a3 100644 --- a/arch/x86/lib/kaslr.c +++ b/arch/x86/lib/kaslr.c @@ -56,11 +56,14 @@ unsigned long kaslr_get_random_long(const char *purpose) unsigned long raw, random = get_boot_seed(); bool use_i8254 = true; - debug_putstr(purpose); - debug_putstr(" KASLR using"); + if (purpose) { + debug_putstr(purpose); + debug_putstr(" KASLR using"); + } if (has_cpuflag(X86_FEATURE_RDRAND)) { - debug_putstr(" RDRAND"); + if (purpose) + debug_putstr(" RDRAND"); if (rdrand_long(&raw)) { random ^= raw; use_i8254 = false; @@ -68,7 +71,8 @@ unsigned long kaslr_get_random_long(const char *purpose) } if (has_cpuflag(X86_FEATURE_TSC)) { - debug_putstr(" RDTSC"); + if (purpose) + debug_putstr(" RDTSC"); raw = rdtsc(); random ^= raw; @@ -76,7 +80,8 @@ unsigned long kaslr_get_random_long(const char *purpose) } if (use_i8254) { - debug_putstr(" i8254"); + if (purpose) + debug_putstr(" i8254"); random ^= i8254(); } @@ -86,7 +91,8 @@ unsigned long kaslr_get_random_long(const char *purpose) : "a" (random), "rm" (mix_const)); random += raw; - debug_putstr("...\n"); + if (purpose) + debug_putstr("...\n"); return random; }
Under earlyprintk, each RNG call produces a debug report line. To support the future FGKASLR feature, which will fetch random bytes during function shuffling, this is not useful information (each line is identical and tells us nothing new), needlessly spamming the console. Instead, allow for a NULL "purpose" to suppress the debug reporting. Signed-off-by: Kees Cook <keescook@chromium.org> --- arch/x86/lib/kaslr.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-)