summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WHATS_NEW1
-rw-r--r--lib/cache/lvmcache.c8
-rw-r--r--lib/commands/toolcontext.c5
-rw-r--r--lib/metadata/metadata.c4
4 files changed, 10 insertions, 8 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index 8df7e090..ddc9cb83 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.89 -
==================================
+ Add check for access through NULL pointer when refresh_filter() fails.
Use pthread condition for SINGLENODE lock implementation.
Improve backtrace reporting for some dev_manager_ functions.
Change message severity to log_warn when symlink creation fails.
diff --git a/lib/cache/lvmcache.c b/lib/cache/lvmcache.c
index 6fdd976a..c02ec7b9 100644
--- a/lib/cache/lvmcache.c
+++ b/lib/cache/lvmcache.c
@@ -597,12 +597,10 @@ int lvmcache_label_scan(struct cmd_context *cmd, int full_scan)
goto out;
}
- if (full_scan == 2 && !cmd->filter->use_count && !refresh_filters(cmd)) {
- log_error("refresh filters failed");
- goto out;
- }
+ if (full_scan == 2 && (cmd->filter && !cmd->filter->use_count) && !refresh_filters(cmd))
+ goto_out;
- if (!(iter = dev_iter_create(cmd->filter, (full_scan == 2) ? 1 : 0))) {
+ if (!cmd->filter || !(iter = dev_iter_create(cmd->filter, (full_scan == 2) ? 1 : 0))) {
log_error("dev_iter creation failed");
goto out;
}
diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c
index 6c554b20..db5ef030 100644
--- a/lib/commands/toolcontext.c
+++ b/lib/commands/toolcontext.c
@@ -786,7 +786,7 @@ static int _init_filters(struct cmd_context *cmd, unsigned load_persistent_cache
cmd->dump_filter = 0;
if (!(f3 = _init_filter_components(cmd)))
- return 0;
+ return_0;
init_ignore_suspended_devices(find_config_tree_int(cmd,
"devices/ignore_suspended_devices", DEFAULT_IGNORE_SUSPENDED_DEVICES));
@@ -1402,7 +1402,8 @@ int refresh_filters(struct cmd_context *cmd)
cmd->filter = NULL;
}
- r = _init_filters(cmd, 0);
+ if (!(r = _init_filters(cmd, 0)))
+ stack;
/*
* During repair code must not reset suspended flag.
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index e9894c5b..2d53d572 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -1373,7 +1373,9 @@ static int pvcreate_check(struct cmd_context *cmd, const char *name,
/* Is there an md superblock here? */
/* FIXME: still possible issues here - rescan cache? */
if (!dev && md_filtering()) {
- refresh_filters(cmd);
+ if (!refresh_filters(cmd))
+ goto_bad;
+
init_md_filtering(0);
dev = dev_cache_get(name, cmd->filter);
init_md_filtering(1);