From 6fc5e41fd85b1c96d3c4cb6b58cdeb088abc0a95 Mon Sep 17 00:00:00 2001 From: Andrei Vagin Date: Tue, 18 Oct 2016 04:40:00 +0300 Subject: [PATCH] mount: skip '/' only if it is there If p->mountpoint is "/", off will be 0 and we will try to acess path[-1]. On Tue, Sep 20, 2016 at 05:17:27PM +0300, Kirill Tkhai wrote: > > > > int off = 0; > > > > ... > > > > if (p->mountpoint[1] != 0) /* not / */ > > off = snprintf(path, len, %s, p->mountpoint); > > if (path[off - 1] == '/') /* p->mountpoint = ./ */ > > > > ^^^ > > The above looks like off-by-one when off == 0. Is there is > > a condition which guarantees that off is not zero? travis-ci: success for mount: skip '/' only if it is there Reported-by: Kirill Tkhai Cc: Kirill Tkhai Signed-off-by: Andrei Vagin Acked-by: Kirill Tkhai Signed-off-by: Pavel Emelyanov --- criu/path.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/criu/path.c b/criu/path.c index c43b5e277..57773d547 100644 --- a/criu/path.c +++ b/criu/path.c @@ -72,10 +72,11 @@ char *mnt_get_sibling_path(struct mount_info *m, cut_root = cut_root_for_bind(pa->root, p->root); if (cut_root == NULL) return NULL; - if (p->mountpoint[1] != 0) /* not "/" */ + if (p->mountpoint[1] != 0) /* not "/" */ { off = snprintf(path, len, "%s", p->mountpoint); - if (path[off - 1] == '/') /* p->mountpoint = "./" */ - off--; + if (path[off - 1] == '/') /* p->mountpoint = "./" */ + off--; + } len -= off; path += off;