From: Peter Rajnoha <prajnoha@redhat.com>
To: dm-devel@redhat.com
Cc: agk@redhat.com
Subject: [PATCH] Add name checks in dmsetup
Date: Tue, 06 Jan 2009 23:19:12 +0100 [thread overview]
Message-ID: <4963D8E0.4080208@redhat.com> (raw)
Checks added for DM device names to allow only names < DM_NAME_LEN, otherwise a part of
lengthy name would be silently ignored and could cause confusion while using dmsetup.
Also, the name should not contain '/' character, if it is used in context of creating
a new device or renaming the existing one (because we do not consider full path to devices,
they do not exist in filesystem yet) and appropriate error messages are shown.
diff --git a/libdm/ioctl/libdm-iface.c b/libdm/ioctl/libdm-iface.c
index 05b6894..1dce40e 100644
--- a/libdm/ioctl/libdm-iface.c
+++ b/libdm/ioctl/libdm-iface.c
@@ -1018,6 +1018,16 @@ int dm_task_suppress_identical_reload(struct dm_task *dmt)
int dm_task_set_newname(struct dm_task *dmt, const char *newname)
{
+ if (strchr(newname, '/')) {
+ log_error("Name \"%s\" invalid, contains \"/\"", newname);
+ return 0;
+ }
+
+ if (strlen(newname) >= DM_NAME_LEN) {
+ log_error("Name \"%s\" too long", newname);
+ return 0;
+ }
+
if (!(dmt->newname = dm_strdup(newname))) {
log_error("dm_task_set_newname: strdup(%s) failed", newname);
return 0;
diff --git a/libdm/libdm-common.c b/libdm/libdm-common.c
index 26fc043..deff03f 100644
--- a/libdm/libdm-common.c
+++ b/libdm/libdm-common.c
@@ -143,18 +143,27 @@ int dm_task_set_name(struct dm_task *dmt, const char *name)
* as its last component.
*/
if ((pos = strrchr(name, '/'))) {
+ if (dmt->type == DM_DEVICE_CREATE) {
+ log_error("Name \"%s\" invalid, contains \"/\"", name);
+ return 0;
+ }
+
snprintf(path, sizeof(path), "%s/%s", _dm_dir, pos + 1);
if (stat(name, &st1) || stat(path, &st2) ||
!(st1.st_dev == st2.st_dev)) {
- log_error("dm_task_set_name: Device %s not found",
- name);
+ log_error("Device %s not found", name);
return 0;
}
name = pos + 1;
}
+ if (strlen(name) >= DM_NAME_LEN) {
+ log_error("Name \"%s\" too long", name);
+ return 0;
+ }
+
if (!(dmt->dev_name = dm_strdup(name))) {
log_error("dm_task_set_name: strdup(%s) failed", name);
return 0;
next reply other threads:[~2009-01-06 22:19 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-06 22:19 Peter Rajnoha [this message]
2009-01-07 1:49 ` [PATCH] Add name checks in dmsetup Alasdair G Kergon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4963D8E0.4080208@redhat.com \
--to=prajnoha@redhat.com \
--cc=agk@redhat.com \
--cc=dm-devel@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.