[lvm-devel] master - lvmcache: check for too long pvid
Zdenek Kabelac
zkabelac at fedoraproject.org
Tue Aug 18 13:01:30 UTC 2015
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=70db1d523db330cbdfc39163c30dc00cf16a1fdc
Commit: 70db1d523db330cbdfc39163c30dc00cf16a1fdc
Parent: 8e229cb7ea37ccab0e235e53d27adca9b32ffae0
Author: Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate: Tue Aug 18 11:28:02 2015 +0200
Committer: Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Tue Aug 18 14:53:36 2015 +0200
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 cfa1d5f..530bcd3 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 4ad2ccd..5835bc2 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;
More information about the lvm-devel
mailing list