summaryrefslogtreecommitdiffstats
path: root/lib/locking/file_locking.c
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2012-02-08 11:17:34 +0000
committerZdenek Kabelac <zkabelac@redhat.com>2012-02-08 11:17:34 +0000
commit0154bcf0a7f0eac3452ef271b4de8811e6128296 (patch)
tree0a9362a89152a34b2545e7df44e955c0adef96df /lib/locking/file_locking.c
parent1a39fa0073a6851ff6681ece41a1ceadb2bd2546 (diff)
downloadlvm2-0154bcf0a7f0eac3452ef271b4de8811e6128296.tar.gz
lvm2-0154bcf0a7f0eac3452ef271b4de8811e6128296.tar.xz
lvm2-0154bcf0a7f0eac3452ef271b4de8811e6128296.zip
Check that whole locking_dir fits _lock_dir buffer
Diffstat (limited to 'lib/locking/file_locking.c')
-rw-r--r--lib/locking/file_locking.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/locking/file_locking.c b/lib/locking/file_locking.c
index 3ecea8c9..6d773701 100644
--- a/lib/locking/file_locking.c
+++ b/lib/locking/file_locking.c
@@ -337,6 +337,7 @@ int init_file_locking(struct locking_type *locking, struct cmd_context *cmd,
int suppress_messages)
{
int r;
+ const char *locking_dir;
locking->lock_resource = _file_lock_resource;
locking->reset_locking = _reset_file_locking;
@@ -344,9 +345,14 @@ int init_file_locking(struct locking_type *locking, struct cmd_context *cmd,
locking->flags = 0;
/* Get lockfile directory from config file */
- strncpy(_lock_dir, find_config_tree_str(cmd, "global/locking_dir",
- DEFAULT_LOCK_DIR),
- sizeof(_lock_dir));
+ locking_dir = find_config_tree_str(cmd, "global/locking_dir",
+ DEFAULT_LOCK_DIR);
+ if (strlen(locking_dir) >= sizeof(_lock_dir)) {
+ log_error("Path for locking_dir %s is invalid.", locking_dir);
+ return 0;
+ }
+
+ strcpy(_lock_dir, locking_dir);
_prioritise_write_locks =
find_config_tree_bool(cmd, "global/prioritise_write_locks",