linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Petr Mladek <pmladek@suse.cz>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: linux-kernel@vger.kernel.org, Ingo Molnar <mingo@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Jiri Kosina <jkosina@suse.cz>, "H. Peter Anvin" <hpa@zytor.com>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: Re: [RFC][PATCH 07/12 v3] tracing: Have seq_buf use full buffer
Date: Wed, 5 Nov 2014 17:31:50 +0100	[thread overview]
Message-ID: <20141105163150.GI4570@pathway.suse.cz> (raw)
In-Reply-To: <20141104160222.502133196@goodmis.org>

On Tue 2014-11-04 10:52:44, Steven Rostedt wrote:
> From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>
> 
> Currently seq_buf is full when all but one byte of the buffer is
> filled. Change it so that the seq_buf is full when all of the
> buffer is filled.
> 
> Some of the functions would fill the buffer completely and report
> everything was fine. This was inconsistent with the max of size - 1.
> Changing this to be max of size makes all functions consistent.
> 
> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
> ---
>  include/linux/seq_buf.h |  4 ++--
>  kernel/trace/seq_buf.c  | 18 +++++++++---------
>  2 files changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/include/linux/seq_buf.h b/include/linux/seq_buf.h
> index 064a8604ad33..3cd25038cb5e 100644
> --- a/include/linux/seq_buf.h
> +++ b/include/linux/seq_buf.h
> @@ -46,13 +46,13 @@ seq_buf_init(struct seq_buf *s, unsigned char *buf, unsigned int size)
>  static inline bool
>  seq_buf_has_overflowed(struct seq_buf *s)
>  {
> -	return s->len == s->size;
> +	return s->len > s->size;
>  }
>  
>  static inline void
>  seq_buf_set_overflow(struct seq_buf *s)
>  {
> -	s->len = s->size;
> +	s->len = s->size + 1;
>  }
>  
>  extern __printf(2, 3)
> diff --git a/kernel/trace/seq_buf.c b/kernel/trace/seq_buf.c
> index 243123b12d16..06fd1833e692 100644
> --- a/kernel/trace/seq_buf.c
> +++ b/kernel/trace/seq_buf.c
> @@ -11,17 +11,17 @@
>   * This will set up the counters within the descriptor. You can call
>   * seq_buf_init() more than once to reset the seq_buf to start
>   * from scratch.
> - * 
> + *
>   */
>  #include <linux/uaccess.h>
>  #include <linux/seq_file.h>
>  #include <linux/seq_buf.h>
>  
>  /* How much buffer is left on the seq_buf? */
> -#define SEQ_BUF_LEFT(s) (((s)->size - 1) - (s)->len)
> +#define SEQ_BUF_LEFT(s) ((s)->size - (s)->len)
>  
>  /* How much buffer is written? */
> -#define SEQ_BUF_USED(s) min((s)->len, (s)->size - 1)
> +#define SEQ_BUF_USED(s) min((s)->len, (s)->size)
>  
>  /**
>   * seq_buf_print_seq - move the contents of seq_buf into a seq_file
> @@ -55,7 +55,7 @@ int seq_buf_vprintf(struct seq_buf *s, const char *fmt, va_list args)
>  
>  	if (s->len < s->size) {
>  		len = vsnprintf(s->buffer + s->len, s->size - s->len, fmt, args);
> -		if (s->len + len < s->size) {
> +		if (s->len + len <= s->size) {

This is always true because we limit vsnprintf() to write (s->size -
s->len) bytes. Similar problem is also in the other parts of this
patch.

I wonder if we want this change at all. It means that we are not able to
detect overflow in some functions. It is pity because the users
might want to increase the buffer size and try again if the print
was incomplete.

I think that we need to leave the one byte for the overflow detection
if we want to detect it properly.

Best Regards,
Petr

>  			s->len += len;
>  			return 0;
>  		}
> @@ -105,7 +105,7 @@ int seq_buf_bitmask(struct seq_buf *s, const unsigned long *maskp,
>  
>  	if (s->len < s->size) {
>  		ret = bitmap_scnprintf(s->buffer, len, maskp, nmaskbits);
> -		if (s->len + ret < s->size) {
> +		if (s->len + ret <= s->size) {
>  			s->len += ret;
>  			return 0;
>  		}

  reply	other threads:[~2014-11-05 16:32 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-04 15:52 [RFC][PATCH 00/12 v3] seq-buf/x86/printk: Print all stacks from NMI safely Steven Rostedt
2014-11-04 15:52 ` [RFC][PATCH 01/12 v3] x86/kvm/tracing: Use helper function trace_seq_buffer_ptr() Steven Rostedt
2014-11-04 16:27   ` Paolo Bonzini
2014-11-04 17:17   ` Rustad, Mark D
2014-11-04 19:09     ` Steven Rostedt
2014-11-04 19:35       ` Steven Rostedt
2014-11-04 20:09         ` Rustad, Mark D
2014-11-05 10:28   ` Petr Mladek
2014-11-04 15:52 ` [RFC][PATCH 02/12 v3] RAS/tracing: Use trace_seq_buffer_ptr() helper instead of open coded Steven Rostedt
2014-11-04 19:59   ` Borislav Petkov
2014-11-05 10:29   ` Petr Mladek
2014-11-04 15:52 ` [RFC][PATCH 03/12 v3] tracing: Create seq_buf layer in trace_seq Steven Rostedt
2014-11-05 14:22   ` Petr Mladek
2014-11-05 18:41     ` Steven Rostedt
2014-11-05 20:00       ` Steven Rostedt
2014-11-05 21:17         ` Steven Rostedt
2014-11-05 21:21           ` Steven Rostedt
2014-11-06 16:33             ` Petr Mladek
2014-11-07 18:30               ` Steven Rostedt
2014-11-07 18:59                 ` Joe Perches
2014-11-07 19:10                   ` Steven Rostedt
2014-11-10 13:53                 ` Petr Mladek
2014-11-10 17:37                   ` Steven Rostedt
2014-11-10 19:02                     ` Petr Mladek
2014-11-06 16:13       ` Petr Mladek
2014-11-05 14:26   ` Petr Mladek
2014-11-05 18:42     ` Steven Rostedt
2014-11-04 15:52 ` [RFC][PATCH 04/12 v3] tracing: Convert seq_buf_path() to be like seq_path() Steven Rostedt
2014-11-05 14:45   ` Petr Mladek
2014-11-05 20:10     ` Steven Rostedt
2014-11-06 14:18       ` Petr Mladek
2014-11-06 21:09         ` Steven Rostedt
2014-11-06 15:01   ` Petr Mladek
2014-11-07 18:34     ` Steven Rostedt
2014-11-10 14:03       ` Petr Mladek
2014-11-10 17:38         ` Steven Rostedt
2014-11-04 15:52 ` [RFC][PATCH 05/12 v3] tracing: Convert seq_buf fields to be like seq_file fields Steven Rostedt
2014-11-05 15:57   ` Petr Mladek
2014-11-05 20:14     ` Steven Rostedt
2014-11-06 14:24       ` Petr Mladek
2014-11-04 15:52 ` [RFC][PATCH 06/12 v3] tracing: Add a seq_buf_clear() helper and clear len and readpos in init Steven Rostedt
2014-11-05 16:00   ` Petr Mladek
2014-11-04 15:52 ` [RFC][PATCH 07/12 v3] tracing: Have seq_buf use full buffer Steven Rostedt
2014-11-05 16:31   ` Petr Mladek [this message]
2014-11-05 20:21     ` Steven Rostedt
2014-11-05 21:06       ` Steven Rostedt
2014-11-06 15:31         ` Petr Mladek
2014-11-06 19:24           ` Steven Rostedt
2014-11-07  9:11             ` Petr Mladek
2014-11-07 18:37               ` Steven Rostedt
2014-11-10 18:11                 ` Petr Mladek
2014-11-06 15:13       ` Petr Mladek
2014-11-04 15:52 ` [RFC][PATCH 08/12 v3] tracing: Add seq_buf_get_buf() and seq_buf_commit() helper functions Steven Rostedt
2014-11-05 16:51   ` Petr Mladek
2014-11-05 20:26     ` Steven Rostedt
2014-11-07 18:39     ` Steven Rostedt
2014-11-10 18:33       ` Petr Mladek
2014-11-10 19:23         ` Steven Rostedt
2014-11-04 15:52 ` [RFC][PATCH 09/12 v3] seq_buf: Move the seq_buf code to lib/ Steven Rostedt
2014-11-05 16:57   ` Petr Mladek
2014-11-05 20:32     ` Steven Rostedt
2014-11-04 15:52 ` [RFC][PATCH 10/12 v3] seq-buf: Make seq_buf_bprintf() conditional on CONFIG_BINARY_PRINTF Steven Rostedt
2014-11-05 17:06   ` Petr Mladek
2014-11-05 20:33     ` Steven Rostedt
2014-11-05 20:42       ` Steven Rostedt
2014-11-06 14:39         ` Petr Mladek
2014-11-07 20:36           ` Junio C Hamano
2014-11-07 21:49             ` Steven Rostedt
2014-11-10 18:43             ` Petr Mladek
2014-11-04 15:52 ` [RFC][PATCH 11/12 v3] printk: Add per_cpu printk func to allow printk to be diverted Steven Rostedt
2014-11-06 16:56   ` Petr Mladek
2014-11-04 15:52 ` [RFC][PATCH 12/12 v3] x86/nmi: Perform a safe NMI stack trace on all CPUs Steven Rostedt
2014-11-04 23:05   ` Jiri Kosina
2014-11-04 23:41     ` Steven Rostedt
2014-11-06 18:41   ` Petr Mladek
2014-11-07 18:56     ` Steven Rostedt
2014-11-10 18:58       ` Petr Mladek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20141105163150.GI4570@pathway.suse.cz \
    --to=pmladek@suse.cz \
    --cc=akpm@linux-foundation.org \
    --cc=hpa@zytor.com \
    --cc=jkosina@suse.cz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).