From: John Hodge Date: Mon, 16 Nov 2009 03:14:17 +0000 (+0800) Subject: Fixed implementation of ChRoot X-Git-Tag: rel0.06~367 X-Git-Url: https://git.ucc.asn.au/?a=commitdiff_plain;h=574bd1d04d98f1b75c42eb45a2cdb49788cceb01;p=tpg%2Facess2.git Fixed implementation of ChRoot (it could be bypassed by using ..) --- diff --git a/Kernel/vfs/open.c b/Kernel/vfs/open.c index 7382a0c8..507f1826 100644 --- a/Kernel/vfs/open.c +++ b/Kernel/vfs/open.c @@ -39,7 +39,6 @@ char *VFS_GetAbsPath(char *Path) char *cwd = CFGPTR(CFG_VFS_CWD); int cwdLen; - ENTER("sPath", Path); // Memory File @@ -54,6 +53,7 @@ char *VFS_GetAbsPath(char *Path) return ret; } + // - Fetch ChRoot if( chroot == NULL ) { chroot = ""; chrootLen = 0; @@ -63,13 +63,12 @@ char *VFS_GetAbsPath(char *Path) // Check if the path is already absolute if(Path[0] == '/') { - ret = malloc(chrootLen + pathLen + 1); + ret = malloc(pathLen + 1); if(!ret) { Warning("VFS_GetAbsPath - malloc() returned NULL"); return NULL; } - strcpy(ret, chroot); - strcpy(ret+chrootLen, Path); + strcpy(ret, Path); } else { if(cwd == NULL) { cwd = "/"; @@ -153,6 +152,14 @@ char *VFS_GetAbsPath(char *Path) else ret[iPos2] = 0; + + // Prepend the chroot + tmpStr = malloc(chrootLen + strlen(ret) + 1); + strcpy( tmpStr, chroot ); + strcpy( tmpStr+chrootLen, ret ); + free(ret); + ret = tmpStr; + LEAVE('s', ret); //Log("VFS_GetAbsPath: RETURN '%s'", ret); return ret;