Skip to content

Commit 78eeac0

Browse files
committed
dm: Fail fast when no name/node specified for dm_node_from_name/dm_name_from_node
1 parent f8733f2 commit 78eeac0

File tree

2 files changed

+21
-12
lines changed

2 files changed

+21
-12
lines changed

src/plugins/dm.c

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -178,19 +178,21 @@ gboolean bd_dm_remove (const gchar *map_name, GError **error) {
178178
gchar* bd_dm_name_from_node (const gchar *dm_node, GError **error) {
179179
gchar *ret = NULL;
180180
gboolean success = FALSE;
181+
g_autofree gchar *sys_path = g_strdup_printf ("/sys/class/block/%s/dm/name", dm_node);
181182

182-
gchar *sys_path = g_strdup_printf ("/sys/class/block/%s/dm/name", dm_node);
183+
if (!dm_node || strlen (dm_node) == 0) {
184+
g_set_error (error, BD_DM_ERROR, BD_DM_ERROR_DEVICE_NOEXIST,
185+
"No DM node specified");
186+
return NULL;
187+
}
183188

184189
if (access (sys_path, R_OK) != 0) {
185-
g_free (sys_path);
186190
g_set_error (error, BD_DM_ERROR, BD_DM_ERROR_SYS,
187191
"Failed to access dm node's parameters under /sys");
188192
return NULL;
189193
}
190194

191195
success = g_file_get_contents (sys_path, &ret, NULL, error);
192-
g_free (sys_path);
193-
194196
if (!success) {
195197
/* error is already populated */
196198
g_free (ret);
@@ -211,20 +213,21 @@ gchar* bd_dm_name_from_node (const gchar *dm_node, GError **error) {
211213
* Tech category: %BD_DM_TECH_MAP-%BD_DM_TECH_MODE_QUERY
212214
*/
213215
gchar* bd_dm_node_from_name (const gchar *map_name, GError **error) {
214-
gchar *dev_path = NULL;
215-
gchar *ret = NULL;
216-
gchar *dev_mapper_path = g_strdup_printf ("/dev/mapper/%s", map_name);
216+
g_autofree gchar *dev_path = NULL;
217+
g_autofree gchar *dev_mapper_path = g_strdup_printf ("/dev/mapper/%s", map_name);
218+
219+
if (!map_name || strlen (map_name) == 0) {
220+
g_set_error (error, BD_DM_ERROR, BD_DM_ERROR_DEVICE_NOEXIST,
221+
"No DM name specified");
222+
return NULL;
223+
}
217224

218225
dev_path = bd_utils_resolve_device (dev_mapper_path, error);
219-
g_free (dev_mapper_path);
220226
if (!dev_path)
221227
/* error is already populated */
222228
return NULL;
223229

224-
ret = g_path_get_basename (dev_path);
225-
g_free (dev_path);
226-
227-
return ret;
230+
return g_path_get_basename (dev_path);
228231
}
229232

230233
/**

tests/dm_test.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,12 @@ def test_name_node_bijection(self):
153153
self.assertEqual(BlockDev.dm_name_from_node(BlockDev.dm_node_from_name("testMap")),
154154
"testMap")
155155

156+
with self.assertRaisesRegex(GLib.GError, "No DM name specified"):
157+
BlockDev.dm_node_from_name("")
158+
159+
with self.assertRaisesRegex(GLib.GError, "No DM node specified"):
160+
BlockDev.dm_name_from_node("")
161+
156162

157163
class DMNoStorageTest(DevMapperTest):
158164
@tag_test(TestTags.NOSTORAGE)

0 commit comments

Comments
 (0)