From: David Engraf <david.engraf@sysgo.com>
To: linux-mtd@lists.infradead.org
Cc: David Engraf <david.engraf@sysgo.com>
Subject: [PATCH] mkfs.ubifs: Allow root entry in device table
Date: Tue, 6 Jun 2017 15:31:58 +0200 [thread overview]
Message-ID: <20170606133158.6973-1-david.engraf@sysgo.com> (raw)
When using a local root folder the permissions, user and group settings
are taken from the local folder. These permissions might be incorrect if
the folder has been created for the local user. Creating an UBIFS image
on my local system resulted in the following output on the target:
drwx------ 17 1000 1000 1264 Jan 1 00:00 .
drwx------ 17 1000 1000 1264 Jan 1 00:00 ..
drwxr-xr-x 2 root root 9104 May 30 2017 bin
drwxr-xr-x 7 root root 2760 Jan 1 00:00 dev
...
mkfs.ubifs aborts with an error message when the device table contains
a root entry. This patch allows setting the root folder permissions,
user and group to overwrite local configurations.
---
ubifs-utils/mkfs.ubifs/devtable.c | 8 ++++----
ubifs-utils/mkfs.ubifs/mkfs.ubifs.c | 13 +++++++++++++
2 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/ubifs-utils/mkfs.ubifs/devtable.c b/ubifs-utils/mkfs.ubifs/devtable.c
index 3b46abc..10faaca 100644
--- a/ubifs-utils/mkfs.ubifs/devtable.c
+++ b/ubifs-utils/mkfs.ubifs/devtable.c
@@ -146,16 +146,16 @@ static int interpret_table_entry(const char *line)
increment, count);
len = strnlen(buf, 1024);
+ if (len == 0)
+ return err_msg("empty path");
if (len == 1024)
return err_msg("too long path");
- if (!strcmp(buf, "/"))
+ if (buf[0] != '/')
return err_msg("device table entries require absolute paths");
- if (buf[1] == '\0')
- return err_msg("root directory cannot be created");
if (strstr(buf, "//"))
return err_msg("'//' cannot be used in the path");
- if (buf[len - 1] == '/')
+ if (len > 1 && buf[len - 1] == '/')
return err_msg("do not put '/' at the end");
if (strstr(buf, "/./") || strstr(buf, "/../") ||
diff --git a/ubifs-utils/mkfs.ubifs/mkfs.ubifs.c b/ubifs-utils/mkfs.ubifs/mkfs.ubifs.c
index a60052d..52ed511 100644
--- a/ubifs-utils/mkfs.ubifs/mkfs.ubifs.c
+++ b/ubifs-utils/mkfs.ubifs/mkfs.ubifs.c
@@ -1823,6 +1823,8 @@ static int write_data(void)
{
int err;
mode_t mode = S_IFDIR | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
+ struct path_htbl_element *ph_elt;
+ struct name_htbl_element *nh_elt;
if (root) {
err = stat(root, &root_st);
@@ -1835,6 +1837,17 @@ static int write_data(void)
root_st.st_mode = mode;
}
+ /*
+ * Check for root entry and update permissions if it exists. This will
+ * also remove the entry from the device table list.
+ */
+ ph_elt = devtbl_find_path("/");
+ if (ph_elt) {
+ nh_elt = devtbl_find_name(ph_elt, "");
+ if (nh_elt && override_attributes(&root_st, ph_elt, nh_elt))
+ return -1;
+ }
+
head_flags = 0;
err = create_inum_attr(UBIFS_ROOT_INO, root);
--
2.11.0
next reply other threads:[~2017-06-06 13:32 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-06 13:31 David Engraf [this message]
2017-06-06 13:46 ` [PATCH] mkfs.ubifs: Allow root entry in device table David Engraf
2018-03-06 8:13 ` [PATCH RESEND] " David Engraf
2018-03-07 23:23 ` David Oberhollenzer
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=20170606133158.6973-1-david.engraf@sysgo.com \
--to=david.engraf@sysgo.com \
--cc=linux-mtd@lists.infradead.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox