From 70db1d523db330cbdfc39163c30dc00cf16a1fdc Mon Sep 17 00:00:00 2001 From: Zdenek Kabelac Date: Tue, 18 Aug 2015 11:28:02 +0200 Subject: [PATCH] lvmcache: check for too long pvid --- lib/cache/lvmcache.c | 7 ++++++- lib/format_text/text_label.c | 8 +++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/cache/lvmcache.c b/lib/cache/lvmcache.c index cfa1d5f22..530bcd377 100644 --- a/lib/cache/lvmcache.c +++ b/lib/cache/lvmcache.c @@ -1178,7 +1178,12 @@ static int _lvmcache_update_pvid(struct lvmcache_info *info, const char *pvid) return 1; if (*info->dev->pvid) dm_hash_remove(_pvid_hash, info->dev->pvid); - strncpy(info->dev->pvid, pvid, sizeof(info->dev->pvid)); + + if (!dm_strncpy(info->dev->pvid, pvid, sizeof(info->dev->pvid))){ + log_error("_lvmcache_update: too long pvid: %s.", pvid); + return 0; + } + if (!dm_hash_insert(_pvid_hash, pvid, info)) { log_error("_lvmcache_update: pvid insertion failed: %s", pvid); return 0; diff --git a/lib/format_text/text_label.c b/lib/format_text/text_label.c index 4ad2ccdb2..5835bc297 100644 --- a/lib/format_text/text_label.c +++ b/lib/format_text/text_label.c @@ -94,9 +94,11 @@ static int _text_write(struct label *label, void *buf) * PV header base */ /* FIXME Move to where label is created */ - strncpy(label->type, LVM2_LABEL, sizeof(label->type)); - - strncpy((char *)lh->type, label->type, sizeof(label->type)); + if (!dm_strncpy(label->type, LVM2_LABEL, sizeof(label->type)) || + !dm_strncpy((char *)lh->type, label->type, sizeof(label->type))) { + log_error(INTERNAL_ERROR "LVM2 label %s does not fit.", LVM2_LABEL); + return 0; + } pvhdr = (struct pv_header *) ((char *) buf + xlate32(lh->offset_xl)); info = (struct lvmcache_info *) label->info;