diff --git a/daemon/lvm.c b/daemon/lvm.c index 4026c4f92..9d91b6459 100644 --- a/daemon/lvm.c +++ b/daemon/lvm.c @@ -723,7 +723,18 @@ char * do_lvm_canonical_lv_name (const char *device) { char *canonical; - int r = lv_canonical (device, &canonical); + int r; + + /* The device parameter is passed as PlainString because we can't + * really be sure that the device name will exist (especially for + * "/dev/mapper/..." names). Do some sanity checking on it here. + */ + if (!STRPREFIX (device, "/dev/")) { + reply_with_error ("%s: not a device name", device); + return NULL; + } + + r = lv_canonical (device, &canonical); if (r == -1) return NULL; diff --git a/generator/actions_core.ml b/generator/actions_core.ml index fba6c39ca..81cb99ea8 100644 --- a/generator/actions_core.ml +++ b/generator/actions_core.ml @@ -6002,7 +6002,7 @@ See also C." }; { defaults with name = "lvm_canonical_lv_name"; added = (1, 5, 24); - style = RString (RDevice, "lv"), [String (Device, "lvname")], []; + style = RString (RDevice, "lv"), [String (PlainString, "lvname")], []; tests = [ InitBasicFSonLVM, IfAvailable "lvm2", TestResultString ( [["lvm_canonical_lv_name"; "/dev/mapper/VG-LV"]], "/dev/VG/LV"), [];