lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Sat, 18 Apr 2020 22:54:32 +0200
From:   Helge Deller <deller@....de>
To:     Dmitry Safonov <dima@...sta.com>, linux-kernel@...r.kernel.org
Cc:     Dmitry Safonov <0x7f454c46@...il.com>,
        Andrew Morton <akpm@...ux-foundation.org>,
        Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        Ingo Molnar <mingo@...nel.org>, Jiri Slaby <jslaby@...e.com>,
        Petr Mladek <pmladek@...e.com>,
        Sergey Senozhatsky <sergey.senozhatsky@...il.com>,
        Steven Rostedt <rostedt@...dmis.org>,
        Tetsuo Handa <penguin-kernel@...ove.SAKURA.ne.jp>,
        "James E.J. Bottomley" <James.Bottomley@...senPartnership.com>,
        linux-parisc@...r.kernel.org
Subject: Re: [PATCHv3 25/50] parisc: Add show_stack_loglvl()

On 18.04.20 22:19, Dmitry Safonov wrote:
> Currently, the log-level of show_stack() depends on a platform
> realization. It creates situations where the headers are printed with
> lower log level or higher than the stacktrace (depending on
> a platform or user).
>
> Furthermore, it forces the logic decision from user to an architecture
> side. In result, some users as sysrq/kdb/etc are doing tricks with
> temporary rising console_loglevel while printing their messages.
> And in result it not only may print unwanted messages from other CPUs,
> but also omit printing at all in the unlucky case where the printk()
> was deferred.
>
> Introducing log-level parameter and KERN_UNSUPPRESSED [1] seems
> an easier approach than introducing more printk buffers.
> Also, it will consolidate printings with headers.
>
> Introduce show_stack_loglvl(), that eventually will substitute
> show_stack().
>
> Cc: Helge Deller <deller@....de>
> Cc: "James E.J. Bottomley" <James.Bottomley@...senPartnership.com>
> Cc: linux-parisc@...r.kernel.org
> [1]: https://lore.kernel.org/lkml/20190528002412.1625-1-dima@arista.com/T/#u
> Signed-off-by: Dmitry Safonov <dima@...sta.com>
> ---
>  arch/parisc/kernel/traps.c | 28 +++++++++++++++++-----------
>  1 file changed, 17 insertions(+), 11 deletions(-)

Acked-by: Helge Deller <deller@....de>

Thanks!
Helge


>
> diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c
> index 82fc01189488..c2411de3730f 100644
> --- a/arch/parisc/kernel/traps.c
> +++ b/arch/parisc/kernel/traps.c
> @@ -49,7 +49,7 @@
>  #include "../math-emu/math-emu.h"	/* for handle_fpe() */
>
>  static void parisc_show_stack(struct task_struct *task,
> -	struct pt_regs *regs);
> +	struct pt_regs *regs, const char *loglvl);
>
>  static int printbinary(char *buf, unsigned long x, int nbits)
>  {
> @@ -155,7 +155,7 @@ void show_regs(struct pt_regs *regs)
>  		printk("%s IAOQ[1]: %pS\n", level, (void *) regs->iaoq[1]);
>  		printk("%s RP(r2): %pS\n", level, (void *) regs->gr[2]);
>
> -		parisc_show_stack(current, regs);
> +		parisc_show_stack(current, regs, KERN_DEFAULT);
>  	}
>  }
>
> @@ -170,37 +170,43 @@ static DEFINE_RATELIMIT_STATE(_hppa_rs,
>  }
>
>
> -static void do_show_stack(struct unwind_frame_info *info)
> +static void do_show_stack(struct unwind_frame_info *info, const char *loglvl)
>  {
>  	int i = 1;
>
> -	printk(KERN_CRIT "Backtrace:\n");
> +	printk("%sBacktrace:\n", loglvl);
>  	while (i <= MAX_UNWIND_ENTRIES) {
>  		if (unwind_once(info) < 0 || info->ip == 0)
>  			break;
>
>  		if (__kernel_text_address(info->ip)) {
> -			printk(KERN_CRIT " [<" RFMT ">] %pS\n",
> -				info->ip, (void *) info->ip);
> +			printk("%s [<" RFMT ">] %pS\n",
> +				loglvl, info->ip, (void *) info->ip);
>  			i++;
>  		}
>  	}
> -	printk(KERN_CRIT "\n");
> +	printk("%s\n", loglvl);
>  }
>
>  static void parisc_show_stack(struct task_struct *task,
> -	struct pt_regs *regs)
> +	struct pt_regs *regs, const char *loglvl)
>  {
>  	struct unwind_frame_info info;
>
>  	unwind_frame_init_task(&info, task, regs);
>
> -	do_show_stack(&info);
> +	do_show_stack(&info, loglvl);
> +}
> +
> +void show_stack_loglvl(struct task_struct *t, unsigned long *sp,
> +		       const char *loglvl)
> +{
> +	parisc_show_stack(t, NULL, loglvl);
>  }
>
>  void show_stack(struct task_struct *t, unsigned long *sp)
>  {
> -	parisc_show_stack(t, NULL);
> +	show_stack_loglvl(t, sp, KERN_CRIT)
>  }
>
>  int is_valid_bugaddr(unsigned long iaoq)
> @@ -446,7 +452,7 @@ void parisc_terminate(char *msg, struct pt_regs *regs, int code, unsigned long o
>  		/* show_stack(NULL, (unsigned long *)regs->gr[30]); */
>  		struct unwind_frame_info info;
>  		unwind_frame_init(&info, current, regs);
> -		do_show_stack(&info);
> +		do_show_stack(&info, KERN_CRIT);
>  	}
>
>  	printk("\n");
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ