From 7b408a08ef9a6a2d5c13ca696542b96898ea577a Mon Sep 17 00:00:00 2001 From: Zdenek Kabelac Date: Wed, 8 Feb 2012 10:43:42 +0000 Subject: [PATCH] Check result of lstat If lstat returns errno different from ENOENT, do not use the content of struct stat 'buf'. --- WHATS_NEW | 1 + lib/activate/fs.c | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index e5c3312c9..58d76d46f 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.91 - =================================== + Do not use lstat() results when failed in _rm_link(). Remove a "waiting for another thread" log message from dmeventd plugins. Version 2.02.90 - 1st February 2012 diff --git a/lib/activate/fs.c b/lib/activate/fs.c index 2edd81e62..fdff0d1cd 100644 --- a/lib/activate/fs.c +++ b/lib/activate/fs.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. - * Copyright (C) 2004-2011 Red Hat, Inc. All rights reserved. + * Copyright (C) 2004-2012 Red Hat, Inc. All rights reserved. * * This file is part of LVM2. * @@ -225,6 +225,7 @@ static int _mk_link(const char *dev_dir, const char *vg_name, static int _rm_link(const char *dev_dir, const char *vg_name, const char *lv_name, int check_udev) { + int r; struct stat buf; static char lv_path[PATH_MAX]; @@ -234,14 +235,14 @@ static int _rm_link(const char *dev_dir, const char *vg_name, return 0; } - if (lstat(lv_path, &buf) && errno == ENOENT) + if ((r = lstat(lv_path, &buf)) && errno == ENOENT) return 1; else if (dm_udev_get_sync_support() && udev_checking() && check_udev) log_warn("The link %s should have been removed by udev " "but it is still present. Falling back to " "direct link removal.", lv_path); - if (!S_ISLNK(buf.st_mode)) { + if (r || !S_ISLNK(buf.st_mode)) { log_error("%s not symbolic link - not removing", lv_path); return 0; } -- 2.43.5