From: Wang Long <long.wanglong@huawei.com>
To: <rostedt@goodmis.org>, <jkosina@suse.cz>, <pmladek@suse.cz>,
<gregkh@linuxfoundation.org>
Cc: <stable@vger.kernel.org>, <wanglong@laoqinren.net>,
<peifeiyue@huawei.com>, <linux-kernel@vger.kernel.org>,
<paulmck@linux.vnet.ibm.com>, <dzickus@redhat.com>,
<x86@kernel.org>, <long.wanglong@huawei.com>,
<morgan.wang@huawei.com>, <sasha.levin@oracle.com>
Subject: [PATCH v2 12/17] seq_buf: Fix seq_buf_vprintf() truncation
Date: Tue, 19 May 2015 09:08:57 +0000 [thread overview]
Message-ID: <1432026542-123571-13-git-send-email-long.wanglong@huawei.com> (raw)
In-Reply-To: <1432026542-123571-1-git-send-email-long.wanglong@huawei.com>
From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>
commit 4a8fe4e1811c96ad0ad9f4083f2fe4fb43b2988d upstream.
In seq_buf_vprintf(), vsnprintf() is used to copy the format into the
buffer remaining in the seq_buf structure. The return of vsnprintf()
is the amount of characters written to the buffer excluding the '\0',
unless the line was truncated!
If the line copied does not fit, it is truncated, and a '\0' is added
to the end of the buffer. But in this case, '\0' is included in the length
of the line written. To know if the buffer had overflowed, the return
length will be the same as the length of the buffer passed in.
The check in seq_buf_vprintf() only checked if the length returned from
vsnprintf() would fit in the buffer, as the seq_buf_vprintf() is only
to be an all or nothing command. It either writes all the string into
the seq_buf, or none of it. If the string is truncated, the pointers
inside the seq_buf must be reset to what they were when the function was
called. This is not the case. On overflow, it copies only part of the string.
The fix is to change the overflow check to see if the length returned from
vsnprintf() is less than the length remaining in the seq_buf buffer, and not
if it is less than or equal to as it currently does. Then seq_buf_vprintf()
will know if the write from vsnpritnf() was truncated or not.
Cc: stable@vger.kernel.org
[wanglong: backport to 3.10 stable]
Signed-off-by: Wang Long <long.wanglong@huawei.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
lib/seq_buf.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/seq_buf.c b/lib/seq_buf.c
index 4eedfed..795dd94 100644
--- a/lib/seq_buf.c
+++ b/lib/seq_buf.c
@@ -61,7 +61,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 (seq_buf_can_fit(s, len)) {
+ if (s->len + len < s->size) {
s->len += len;
return 0;
}
--
1.8.3.4
next prev parent reply other threads:[~2015-05-19 9:13 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-19 9:08 [PATCH v2 00/17] [request for stable 3.10 inclusion] x86/nmi: Print all cpu stacks from NMI safely Wang Long
2015-05-19 9:08 ` [PATCH v2 01/17] tracing: Create seq_buf layer in trace_seq Wang Long
2015-05-19 9:08 ` [PATCH v2 02/17] tracing: Convert seq_buf_path() to be like seq_path() Wang Long
2015-05-19 9:08 ` [PATCH v2 03/17] tracing: Convert seq_buf fields to be like seq_file fields Wang Long
2015-05-19 9:08 ` [PATCH v2 04/17] tracing: Add a seq_buf_clear() helper and clear len and readpos in init Wang Long
2015-05-19 9:08 ` [PATCH v2 05/17] seq_buf: Create seq_buf_used() to find out how much was written Wang Long
2015-05-19 9:08 ` [PATCH v2 06/17] tracing: Use trace_seq_used() and seq_buf_used() instead of len Wang Long
2015-05-19 9:08 ` [PATCH v2 07/17] seq_buf: Add seq_buf_can_fit() helper function Wang Long
2015-05-19 9:08 ` [PATCH v2 08/17] tracing: Have seq_buf use full buffer Wang Long
2015-05-19 9:08 ` [PATCH v2 09/17] tracing: Add seq_buf_get_buf() and seq_buf_commit() helper functions Wang Long
2015-05-19 9:08 ` [PATCH v2 10/17] seq-buf: Make seq_buf_bprintf() conditional on CONFIG_BINARY_PRINTF Wang Long
2015-05-19 9:08 ` [PATCH v2 11/17] seq_buf: Move the seq_buf code to lib/ Wang Long
2015-05-19 9:08 ` Wang Long [this message]
2015-05-19 9:08 ` [PATCH v2 13/17] seq_buf: Fix seq_buf_bprintf() truncation Wang Long
2015-05-19 9:08 ` [PATCH v2 14/17] printk: Add per_cpu printk func to allow printk to be diverted Wang Long
2015-05-19 9:09 ` [PATCH v2 15/17] printk/percpu: Define printk_func when printk is not defined Wang Long
2015-05-19 9:09 ` [PATCH v2 16/17] x86/nmi: Perform a safe NMI stack trace on all CPUs Wang Long
2015-05-19 9:09 ` [PATCH v2 17/17] x86/nmi: Fix use of unallocated cpumask_var_t Wang Long
2015-05-19 12:57 ` [PATCH v2 00/17] [request for stable 3.10 inclusion] x86/nmi: Print all cpu stacks from NMI safely Petr Mladek
2015-05-20 13:22 ` Petr Mladek
2015-05-21 1:38 ` long.wanglong
2015-06-29 23:56 ` Greg KH
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=1432026542-123571-13-git-send-email-long.wanglong@huawei.com \
--to=long.wanglong@huawei.com \
--cc=dzickus@redhat.com \
--cc=gregkh@linuxfoundation.org \
--cc=jkosina@suse.cz \
--cc=linux-kernel@vger.kernel.org \
--cc=morgan.wang@huawei.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peifeiyue@huawei.com \
--cc=pmladek@suse.cz \
--cc=rostedt@goodmis.org \
--cc=sasha.levin@oracle.com \
--cc=stable@vger.kernel.org \
--cc=wanglong@laoqinren.net \
--cc=x86@kernel.org \
/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
all inboxes | Powered by JetHome®