All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] vgremove: PVID file leakage in /run/lvm/pvs_online
@ 2022-09-08 14:03 miaoguanqin
  2022-09-09 14:27 ` David Teigland
  0 siblings, 1 reply; 4+ messages in thread
From: miaoguanqin @ 2022-09-08 14:03 UTC (permalink / raw)
  To: lvm-devel

We found PVID file leakage problem when exec the following test;
  pvcreate /dev/sdb
  vgcreate -s 1M docker /dev/sdb
  lvcreate -L 10M docker
  pvscan --cache --listvg --checkcomplete --vgonline --udevoutput 
--journal=output /dev/sdb
  vgremove -ff docker

pvcreate operation generates a new PVID, which is used to create PVID 
pvid file
when exec pvcan. However vgremove does not delete the old PVID file.

Here, we will delete all PVID files of each pv in current vg, when exec 
vgremove.

Signed-off-by: miaoguanqin<miaopguanqin@huawei.com
---
  lib/metadata/metadata.c | 33 +++++++++++++++++++++++++++++++++
  1 file changed, 33 insertions(+)

diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index 1cda1888f..75233d120 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -38,6 +38,30 @@
  #include <time.h>
  #include <math.h>

+
+static const char *_pvs_online_dir = DEFAULT_RUN_DIR "/pvs_online";
+
+static int remove_pvid_file(struct physical_volume *pv)
+{
+	char pvid[ID_LEN + 1] __attribute__((aligned(8))) = { 0 };
+	char path[PATH_MAX] __attribute__((aligned(8))) = { 0 };
+
+	memcpy(pvid, &pv->id.uuid, ID_LEN);
+
+	if (dm_snprintf(path, sizeof(path), "%s/%s", _pvs_online_dir, pvid) < 0) {
+		log_warn("WARNING:pvid file path is %s", path);
+		return 0;
+	}
+
+	log_warn("unlink pvid file, path is %s", path);
+
+	if (unlink(path) && (errno != ENOENT)) {
+		log_warn("WARNING:unlink pvid file path error, path is %s", path);
+		return 0;
+	}
+	return 1;
+}
+
  static struct physical_volume *_pv_read(struct cmd_context *cmd,
  					const struct format_type *fmt,
  					struct volume_group *vg,
@@ -665,6 +689,15 @@ int vg_remove_direct(struct volume_group *vg)
  				  " from volume group \"%s\"",
  				  pv_dev_name(pv), vg->name);
  			ret = 0;
+			continue;
+		}
+
+		/* Remove pvid files */
+		if(!remove_pvid_file(pv)){
+			log_error("Failed to remove pvid files \"%s\""
+				  " from volume group \"%s\"",
+				  _pvs_online_dir, vg->name);
+			ret = 0;
  		}
  	}

-- 
2.33.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-09-14 19:27 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-09-08 14:03 [PATCH] vgremove: PVID file leakage in /run/lvm/pvs_online miaoguanqin
2022-09-09 14:27 ` David Teigland
2022-09-10  1:56   ` liuzhiqiang
2022-09-14 19:27     ` David Teigland

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.