All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rasmus Villemoes <linux@rasmusvillemoes.dk>
To: Andrew Morton <akpm@linux-foundation.org>,
	Rasmus Villemoes <linux@rasmusvillemoes.dk>
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH v3 07/14] lib/kasprintf.c: add sanity check to kvasprintf
Date: Thu,  3 Dec 2015 21:51:06 +0100	[thread overview]
Message-ID: <1449175873-1780-8-git-send-email-linux@rasmusvillemoes.dk> (raw)
In-Reply-To: <1449175873-1780-1-git-send-email-linux@rasmusvillemoes.dk>

kasprintf relies on being able to replay the formatting and getting
the same result (in particular, the same length). This will almost
always work, but it is possible that the object pointed to by a %s or
%p argument changed under us (so we might get truncated output). Add a
somewhat paranoid sanity check and let's see if it ever triggers.

Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
---
 lib/kasprintf.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/lib/kasprintf.c b/lib/kasprintf.c
index f194e6e593e1..7f6c506a4942 100644
--- a/lib/kasprintf.c
+++ b/lib/kasprintf.c
@@ -13,19 +13,21 @@
 /* Simplified asprintf. */
 char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap)
 {
-	unsigned int len;
+	unsigned int first, second;
 	char *p;
 	va_list aq;
 
 	va_copy(aq, ap);
-	len = vsnprintf(NULL, 0, fmt, aq);
+	first = vsnprintf(NULL, 0, fmt, aq);
 	va_end(aq);
 
-	p = kmalloc_track_caller(len+1, gfp);
+	p = kmalloc_track_caller(first+1, gfp);
 	if (!p)
 		return NULL;
 
-	vsnprintf(p, len+1, fmt, ap);
+	second = vsnprintf(p, first+1, fmt, ap);
+	WARN(first != second, "different return values (%u and %u) from vsnprintf(\"%s\", ...)",
+	     first, second, fmt);
 
 	return p;
 }
-- 
2.6.1


  parent reply	other threads:[~2015-12-03 20:51 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-03 20:50 [PATCH v3 00/14] printf stuff for 4.5 Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 01/14] lib/vsprintf.c: pull out padding code from dentry_name() Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 02/14] lib/vsprintf.c: move string() below widen_string() Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 03/14] lib/vsprintf.c: eliminate potential race in string() Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 04/14] lib/vsprintf.c: expand field_width to 24 bits Rasmus Villemoes
2015-12-03 20:54   ` Joe Perches
2015-12-03 21:28     ` Andy Shevchenko
2015-12-03 23:34       ` Andrew Morton
2015-12-04  0:03         ` Joe Perches
2015-12-04  8:59           ` Rasmus Villemoes
2015-12-04  9:02         ` Rasmus Villemoes
2015-12-03 23:41       ` Joe Perches
2015-12-03 20:51 ` [PATCH v3 05/14] lib/vsprintf.c: help gcc make number() smaller Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 06/14] lib/vsprintf.c: warn about too large precisions and field widths Rasmus Villemoes
2015-12-03 20:51 ` Rasmus Villemoes [this message]
2015-12-03 20:51 ` [PATCH v3 08/14] lib/test_printf.c: don't BUG Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 09/14] lib/test_printf.c: check for out-of-bound writes Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 10/14] lib/test_printf.c: test precision quirks Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 11/14] lib/test_printf.c: add a few number() tests Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 12/14] lib/test_printf.c: account for kvasprintf tests Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 13/14] lib/test_printf.c: add test for large bitmaps Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 14/14] lib/test_printf.c: test dentry printing Rasmus Villemoes
2015-12-04  0:19   ` Andrew Morton
2015-12-04  8:16     ` Rasmus Villemoes
2015-12-04  8:46       ` Andrew Morton

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=1449175873-1780-8-git-send-email-linux@rasmusvillemoes.dk \
    --to=linux@rasmusvillemoes.dk \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.