From cc33b36c56dfc5b649671d4dc06490929c5d1df1 Mon Sep 17 00:00:00 2001 From: dsmith Date: Thu, 21 Feb 2008 16:29:41 +0000 Subject: 2008-02-21 David Smith * staprun_funcs.c (check_path): Small security fix. --- runtime/staprun/staprun_funcs.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'runtime/staprun/staprun_funcs.c') diff --git a/runtime/staprun/staprun_funcs.c b/runtime/staprun/staprun_funcs.c index 3a678405..34e12c25 100644 --- a/runtime/staprun/staprun_funcs.c +++ b/runtime/staprun/staprun_funcs.c @@ -277,10 +277,20 @@ check_path(void) /* Use realpath() to canonicalize the module path. */ if (realpath(modpath, module_realpath) == NULL) { - perr("Unable to canonicalize path \"%s\"",modpath); + perr("Unable to canonicalize path \"%s\"", modpath); return -1; } + /* To make sure the user can't specify something like + * /lib/modules/`uname -r`/systemtapmod.ko, put a '/' on the + * end of staplib_dir_realpath. */ + if (strlen(staplib_dir_realpath) < (PATH_MAX - 1)) + strcat(staplib_dir_realpath, "/"); + else { + err("Path \"%s\" is too long.", modpath); + return -1; + } + /* Now we've got two canonicalized paths. Make sure * module_realpath starts with staplib_dir_realpath. */ if (strncmp(staplib_dir_realpath, module_realpath, -- cgit