From 2054a5b8cb52a66462b7d967ed9a6c179777bc0f Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 14 Oct 2010 00:41:57 +0200 Subject: [PATCH 1/1] umount: unescape path from /proc/self/mountinfo first, then check against api mount list --- src/umount.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/umount.c b/src/umount.c index 468eb715d..79fbba732 100644 --- a/src/umount.c +++ b/src/umount.c @@ -38,6 +38,7 @@ typedef struct MountPoint { LIST_FIELDS (struct MountPoint, mount_point); } MountPoint; +/* Takes over possession of path */ static MountPoint *mount_point_alloc(char *path) { MountPoint *mp; @@ -98,23 +99,26 @@ static int mount_points_list_get(MountPoint **mount_point_list_head) { continue; } - if (mount_point_is_api(path)) { - free(path); - continue; - } + p = cunescape(path); + free(path); - if (!(p = cunescape(path))) { + if (!p) { r = -ENOMEM; goto finish; } + if (mount_point_is_api(p)) { + free(p); + continue; + } + if (!(mp = mount_point_alloc(p))) { + free(p); r = -ENOMEM; goto finish; } - LIST_PREPEND(MountPoint, mount_point, *mount_point_list_head, mp); - free(path); + LIST_PREPEND(MountPoint, mount_point, *mount_point_list_head, mp); } r = 0; @@ -122,8 +126,6 @@ static int mount_points_list_get(MountPoint **mount_point_list_head) { finish: fclose(proc_self_mountinfo); - free(path); - return r; } -- 2.30.2