From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755424AbcC1VQG (ORCPT ); Mon, 28 Mar 2016 17:16:06 -0400 Received: from mail-pf0-f175.google.com ([209.85.192.175]:35423 "EHLO mail-pf0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754639AbcC1VOa (ORCPT ); Mon, 28 Mar 2016 17:14:30 -0400 From: Kees Cook To: James Morris Cc: Kees Cook , "Serge E. Hallyn" , Andrew Morton , Kalle Valo , Mauro Carvalho Chehab , Joe Perches , Guenter Roeck , Jiri Slaby , Paul Moore , Stephen Smalley , Mimi Zohar , Casey Schaufler , Andreas Gruenbacher , Andy Shevchenko , Rasmus Villemoes , Ulf Hansson , Vitaly Kuznetsov , linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/5] string_helpers: add kstrdup_quotable_file Date: Mon, 28 Mar 2016 14:14:20 -0700 Message-Id: <1459199662-16558-4-git-send-email-keescook@chromium.org> X-Mailer: git-send-email 2.6.3 In-Reply-To: <1459199662-16558-1-git-send-email-keescook@chromium.org> References: <1459199662-16558-1-git-send-email-keescook@chromium.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Allocate a NULL-terminated file path with special characters escaped, safe for logging. Signed-off-by: Kees Cook --- include/linux/string_helpers.h | 3 +++ lib/string_helpers.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/include/linux/string_helpers.h b/include/linux/string_helpers.h index ee1e8f701eb1..63f06745c36d 100644 --- a/include/linux/string_helpers.h +++ b/include/linux/string_helpers.h @@ -3,6 +3,8 @@ #include +struct file; + /* Descriptions of the types of units to * print in */ enum string_size_units { @@ -70,5 +72,6 @@ static inline int string_escape_str_any_np(const char *src, char *dst, char *kstrdup_quotable(char *src); char *kstrdup_quotable_cmdline(struct task_struct *task); +char *kstrdup_quotable_file(struct file *file); #endif diff --git a/lib/string_helpers.c b/lib/string_helpers.c index 142bed739fed..981e6655a9d4 100644 --- a/lib/string_helpers.c +++ b/lib/string_helpers.c @@ -10,6 +10,8 @@ #include #include #include +#include +#include #include #include #include @@ -597,3 +599,31 @@ char *kstrdup_quotable_cmdline(struct task_struct *task) return quoted; } EXPORT_SYMBOL_GPL(kstrdup_quotable_cmdline); + +/* + * Returns allocated NULL-terminated string containing pathname, + * with special characters escaped, able to be safely logged. If + * there is an error, the leading character will be "<". + */ +char *kstrdup_quotable_file(struct file *file) +{ + char *temp, *pathname; + + if (!file) + return kstrdup("", GFP_KERNEL); + + /* We add 11 spaces for ' (deleted)' to be appended */ + temp = kmalloc(PATH_MAX + 11, GFP_TEMPORARY); + if (!temp) + return kstrdup("", GFP_KERNEL); + + pathname = file_path(file, temp, PATH_MAX + 11); + if (IS_ERR(pathname)) + pathname = kstrdup("", GFP_KERNEL); + else + pathname = kstrdup_quotable(pathname); + + kfree(temp); + return pathname; +} +EXPORT_SYMBOL_GPL(kstrdup_quotable_file); -- 2.6.3