Quoting Kees Cook (keescook@xxxxxxxxxxxx): > Allocate a NULL-terminated file path with special characters escaped, > safe for logging. > > Signed-off-by: Kees Cook <keescook@xxxxxxxxxxxx> Acked-by: Serge Hallyn <serge.hallyn@xxxxxxxxxxxxx> > --- > 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 684d2695fc36..5ce9538f290e 100644 > --- a/include/linux/string_helpers.h > +++ b/include/linux/string_helpers.h > @@ -3,6 +3,8 @@ > > #include <linux/types.h> > > +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(const char *src, gfp_t gfp); > char *kstrdup_quotable_cmdline(struct task_struct *task, gfp_t gfp); > +char *kstrdup_quotable_file(struct file *file, gfp_t gfp); > > #endif > diff --git a/lib/string_helpers.c b/lib/string_helpers.c > index b16ee85aaf87..ecaac2c0526f 100644 > --- a/lib/string_helpers.c > +++ b/lib/string_helpers.c > @@ -10,6 +10,8 @@ > #include <linux/export.h> > #include <linux/ctype.h> > #include <linux/errno.h> > +#include <linux/fs.h> > +#include <linux/limits.h> > #include <linux/mm.h> > #include <linux/slab.h> > #include <linux/string.h> > @@ -596,3 +598,31 @@ char *kstrdup_quotable_cmdline(struct task_struct *task, gfp_t gfp) > 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, gfp_t gfp) > +{ > + char *temp, *pathname; > + > + if (!file) > + return kstrdup("<unknown>", gfp); > + > + /* We add 11 spaces for ' (deleted)' to be appended */ > + temp = kmalloc(PATH_MAX + 11, GFP_TEMPORARY); > + if (!temp) > + return kstrdup("<no_memory>", gfp); > + > + pathname = file_path(file, temp, PATH_MAX + 11); > + if (IS_ERR(pathname)) > + pathname = kstrdup("<too_long>", gfp); > + else > + pathname = kstrdup_quotable(pathname, gfp); > + > + kfree(temp); > + return pathname; > +} > +EXPORT_SYMBOL_GPL(kstrdup_quotable_file); > -- > 2.6.3 -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html