* [PATCH 1/2] initramfs: don't include filenames from the initramfs for make goals (dist)clean
[not found] <532CC625.7020509@ahsoftware.de>
@ 2014-03-22 12:29 ` Alexander Holler
2014-03-22 12:29 ` [PATCH 2/2 v3] initramfs: print error and shell out for unsupported content Alexander Holler
0 siblings, 1 reply; 9+ messages in thread
From: Alexander Holler @ 2014-03-22 12:29 UTC (permalink / raw)
To: linux-kernel; +Cc: Andrew Morton, Levente Kurusa, Alexander Holler, stable
Various unusual filenames might break the make process when they are included
as dependencies (e.g. filenames with a colon).
This has the disadvantage that not even a make (dist)clean does work afterwards.
What makes the matter worse is that git clean -df doesn't remove such a possible
broken dependency list too.
Avoid that by not including this dependency list for make goals (dist)clean.
Signed-off-by: Alexander Holler <holler@ahsoftware.de>
Cc: <stable@vger.kernel.org>
---
usr/Makefile | 2 ++
1 file changed, 2 insertions(+)
diff --git a/usr/Makefile b/usr/Makefile
index e767f01..5d5b6aa 100644
--- a/usr/Makefile
+++ b/usr/Makefile
@@ -49,9 +49,11 @@ ramfs-args := \
# in initramfs and to detect if any files are added/removed.
# Removed files are identified by directory timestamp being updated
# The dependency list is generated by gen_initramfs.sh -l
+ifndef clean
ifneq ($(wildcard $(obj)/.initramfs_data.cpio.d),)
include $(obj)/.initramfs_data.cpio.d
endif
+endif
quiet_cmd_initfs = GEN $@
cmd_initfs = $(initramfs) -o $@ $(ramfs-args) $(ramfs-input)
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/2 v3] initramfs: print error and shell out for unsupported content
2014-03-22 12:29 ` [PATCH 1/2] initramfs: don't include filenames from the initramfs for make goals (dist)clean Alexander Holler
@ 2014-03-22 12:29 ` Alexander Holler
2014-03-22 18:22 ` Alexander Holler
0 siblings, 1 reply; 9+ messages in thread
From: Alexander Holler @ 2014-03-22 12:29 UTC (permalink / raw)
To: linux-kernel; +Cc: Andrew Morton, Levente Kurusa, Alexander Holler, stable
The initramfs generation is broken for file and directory names which contain
colons, spaces and other unusual characters. Print an error and don't try to
continue.
Some tests:
cd linux
make defconfig
echo 'CONFIG_BLK_DEV_INITRD=y' >> .config
echo 'CONFIG_INITRAMFS_ROOT_UID=0' >>.config
echo 'CONFIG_INITRAMFS_ROOT_GID=0' >>.config
echo 'CONFIG_INITRAMFS_COMPRESSION_NONE=y' >>.config
echo 'CONFIG_INITRAMFS_SOURCE="/tmp/bugroot"' >>.config
Problem with colons:
mkdir -p /tmp/bugroot/a:b
make -j4 bzImage # no error
make bzImage # try again, oops
Problem with spaces:
mkdir -p /tmp/bugroot/a\ b
make -j4 bzImage # no error
zcat usr/initramfs_data.cpio.gz | cpio --extract --list # oops, no content
Signed-off-by: Alexander Holler <holler@ahsoftware.de>
Cc: <stable@vger.kernel.org>
---
Changes in v2, v3: check for \n, \r and \t too, updated error msg.
scripts/gen_initramfs_list.sh | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/scripts/gen_initramfs_list.sh b/scripts/gen_initramfs_list.sh
index 17fa901..2c613e7 100644
--- a/scripts/gen_initramfs_list.sh
+++ b/scripts/gen_initramfs_list.sh
@@ -171,6 +171,19 @@ dir_filelist() {
${dep_list}header "$1"
srcdir=$(echo "$1" | sed -e 's://*:/:g')
+
+ # Files and directories with spaces and colons are unsupported.
+ local unsupported=$(find "${srcdir}" -regex '.*\(:\| \|\n\|\r\|\t\).*')
+ if [ ! -z "${unsupported}" ]; then
+ printf "ERROR: Unable to handle files/directories with " >&2
+ printf "unsupported characters (spaces, :, \\\n, \\\r, " >&2
+ printf "\\\t).\n Please use other ways to generate a " >&2
+ printf "cpio-archive with such names.\n" >&2
+ printf "Unsupported files and directories are:\n" >&2
+ printf "$unsupported\n" >&2
+ exit 1
+ fi
+
dirlist=$(find "${srcdir}" -printf "%p %m %U %G\n")
# If $dirlist is only one line, then the directory is empty
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2 v3] initramfs: print error and shell out for unsupported content
2014-03-22 12:29 ` [PATCH 2/2 v3] initramfs: print error and shell out for unsupported content Alexander Holler
@ 2014-03-22 18:22 ` Alexander Holler
2014-03-31 20:31 ` Michal Marek
0 siblings, 1 reply; 9+ messages in thread
From: Alexander Holler @ 2014-03-22 18:22 UTC (permalink / raw)
To: linux-kernel; +Cc: Andrew Morton, Levente Kurusa, stable
Am 22.03.2014 13:29, schrieb Alexander Holler:
> The initramfs generation is broken for file and directory names which contain
> colons, spaces and other unusual characters. Print an error and don't try to
> continue.
(...)
> + # Files and directories with spaces and colons are unsupported.
> + local unsupported=$(find "${srcdir}" -regex '.*\(:\| \|\n\|\r\|\t\).*')
I've just noted that -regex isn't POSIX. I don't know the kernel rules
regarding this, and I don't care. But it might be a blocker for this patch.
Regards,
Alexander Holler
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2 v3] initramfs: print error and shell out for unsupported content
2014-03-22 18:22 ` Alexander Holler
@ 2014-03-31 20:31 ` Michal Marek
2014-04-01 11:23 ` Alexander Holler
0 siblings, 1 reply; 9+ messages in thread
From: Michal Marek @ 2014-03-31 20:31 UTC (permalink / raw)
To: Alexander Holler, linux-kernel; +Cc: Andrew Morton, Levente Kurusa, stable
Dne 22.3.2014 19:22, Alexander Holler napsal(a):
> Am 22.03.2014 13:29, schrieb Alexander Holler:
>> The initramfs generation is broken for file and directory names which
>> contain
>> colons, spaces and other unusual characters. Print an error and don't
>> try to
>> continue.
>
> (...)
>> + # Files and directories with spaces and colons are unsupported.
>> + local unsupported=$(find "${srcdir}" -regex '.*\(:\|
>> \|\n\|\r\|\t\).*')
>
> I've just noted that -regex isn't POSIX. I don't know the kernel rules
> regarding this, and I don't care. But it might be a blocker for this patch.
The bigger problem is that there is no C-style quoting in regexps or
character classes matches any file with 'n', 'r' or 't' in its name. How
about
-name '*[:[:space:]]*'
?
Michal
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2 v3] initramfs: print error and shell out for unsupported content
2014-03-31 20:31 ` Michal Marek
@ 2014-04-01 11:23 ` Alexander Holler
2014-04-01 12:23 ` Michal Marek
0 siblings, 1 reply; 9+ messages in thread
From: Alexander Holler @ 2014-04-01 11:23 UTC (permalink / raw)
To: Michal Marek, linux-kernel; +Cc: Andrew Morton, Levente Kurusa, stable
Am 31.03.2014 22:31, schrieb Michal Marek:
> Dne 22.3.2014 19:22, Alexander Holler napsal(a):
>> Am 22.03.2014 13:29, schrieb Alexander Holler:
>>> The initramfs generation is broken for file and directory names which
>>> contain
>>> colons, spaces and other unusual characters. Print an error and don't
>>> try to
>>> continue.
>>
>> (...)
>>> + # Files and directories with spaces and colons are unsupported.
>>> + local unsupported=$(find "${srcdir}" -regex '.*\(:\|
>>> \|\n\|\r\|\t\).*')
>>
>> I've just noted that -regex isn't POSIX. I don't know the kernel rules
>> regarding this, and I don't care. But it might be a blocker for this patch.
>
> The bigger problem is that there is no C-style quoting in regexps or
> character classes matches any file with 'n', 'r' or 't' in its name. How
> about
>
> -name '*[:[:space:]]*'
>
> ?
Hmm, I wasn't aware that find supports such expressions, and I don't
know how compatible that is. It would do the trick too.
But as I already said, trying to use arbitrary filenames in a Makefile
doesn't really work. There are still other problems, e.g. filenames with
a / (directory separator), *, or some of the special make variables like $<.
So the really working solution would be to get rid of that generated
(and hidden) include. Modifying gen_init_cpio.c to browse and collect
all filenames and types itself doesn't look like much work (an evening
should be enough).
The drawback is that such a solution would build the initramfs every
time make is called (while CONFIG_INITRAMFS_SOURCE points to a
directory), but I think that time is negligible.
Another drawback is that it wouldn't be a simple patch anymore. Thus it
wouldn't qualify for any stable tree (and nobody promises such a patch
would be accepted at all, so it might be a waste of time at all).
Regards,
Alexander Holler
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2 v3] initramfs: print error and shell out for unsupported content
2014-04-01 11:23 ` Alexander Holler
@ 2014-04-01 12:23 ` Michal Marek
2014-04-01 17:52 ` Alexander Holler
0 siblings, 1 reply; 9+ messages in thread
From: Michal Marek @ 2014-04-01 12:23 UTC (permalink / raw)
To: Alexander Holler, linux-kernel; +Cc: Andrew Morton, Levente Kurusa, stable
On 2014-04-01 13:23, Alexander Holler wrote:
> But as I already said, trying to use arbitrary filenames in a Makefile
> doesn't really work. There are still other problems, e.g. filenames with
> a / (directory separator), *, or some of the special make variables like $<.
>
> So the really working solution would be to get rid of that generated
> (and hidden) include. Modifying gen_init_cpio.c to browse and collect
> all filenames and types itself doesn't look like much work (an evening
> should be enough).
>
> The drawback is that such a solution would build the initramfs every
> time make is called (while CONFIG_INITRAMFS_SOURCE points to a
> directory), but I think that time is negligible.
Well, the cpio is embedded in the kernel image, so a rebuild of the cpio
means a relink of the kernel. One option would be to implement the
timestamp checking in gen_init_cpio.c, but I'm not sure if that's worth it.
Michal
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2 v3] initramfs: print error and shell out for unsupported content
2014-04-01 12:23 ` Michal Marek
@ 2014-04-01 17:52 ` Alexander Holler
2014-10-19 7:18 ` [PATCH 1/2 v4] initramfs: don't include filenames from the initramfs for make goals (dist)clean Alexander Holler
0 siblings, 1 reply; 9+ messages in thread
From: Alexander Holler @ 2014-04-01 17:52 UTC (permalink / raw)
To: Michal Marek, linux-kernel; +Cc: Andrew Morton, Levente Kurusa, stable
Am 01.04.2014 14:23, schrieb Michal Marek:
> On 2014-04-01 13:23, Alexander Holler wrote:
>> But as I already said, trying to use arbitrary filenames in a Makefile
>> doesn't really work. There are still other problems, e.g. filenames with
>> a / (directory separator), *, or some of the special make variables like $<.
>>
>> So the really working solution would be to get rid of that generated
>> (and hidden) include. Modifying gen_init_cpio.c to browse and collect
>> all filenames and types itself doesn't look like much work (an evening
>> should be enough).
>>
>> The drawback is that such a solution would build the initramfs every
>> time make is called (while CONFIG_INITRAMFS_SOURCE points to a
>> directory), but I think that time is negligible.
>
> Well, the cpio is embedded in the kernel image, so a rebuild of the cpio
> means a relink of the kernel. One option would be to implement the
> timestamp checking in gen_init_cpio.c, but I'm not sure if that's worth it.
I can't answer that too, but if someone spends the time implement the
directory traversing and collecting stats, it would just be one stat
more (to get the timestamp of an maybe already built cpio archive).
But I'm fine with just avoiding the most common problems (in my case
colons and spaces). And the little patch which makes sure that make
clean, distclean or mrproper will work always, avoids the need to search
how to fix the problem (deleting that hidden include) once a broken
include was generated.
Regards,
Alexander Holler
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/2 v4] initramfs: don't include filenames from the initramfs for make goals (dist)clean
2014-04-01 17:52 ` Alexander Holler
@ 2014-10-19 7:18 ` Alexander Holler
2014-10-19 7:18 ` [PATCH 2/2 v4] initramfs: print error and shell out for unsupported content Alexander Holler
0 siblings, 1 reply; 9+ messages in thread
From: Alexander Holler @ 2014-10-19 7:18 UTC (permalink / raw)
To: linux-kernel; +Cc: Andrew Morton, Michal Marek, Alexander Holler, stable
Various unusual filenames might break the make process when they are included
as dependencies (e.g. filenames with a colon).
This has the disadvantage that not even a make (dist)clean does work afterwards.
What makes the matter worse is that git clean -df doesn't remove such a possible
broken dependency list too.
Avoid that by not including this dependency list for make goals (dist)clean.
Signed-off-by: Alexander Holler <holler@ahsoftware.de>
Cc: <stable@vger.kernel.org>
---
Changes to v3: none
usr/Makefile | 2 ++
1 file changed, 2 insertions(+)
diff --git a/usr/Makefile b/usr/Makefile
index e767f01..5d5b6aa 100644
--- a/usr/Makefile
+++ b/usr/Makefile
@@ -49,9 +49,11 @@ ramfs-args := \
# in initramfs and to detect if any files are added/removed.
# Removed files are identified by directory timestamp being updated
# The dependency list is generated by gen_initramfs.sh -l
+ifndef clean
ifneq ($(wildcard $(obj)/.initramfs_data.cpio.d),)
include $(obj)/.initramfs_data.cpio.d
endif
+endif
quiet_cmd_initfs = GEN $@
cmd_initfs = $(initramfs) -o $@ $(ramfs-args) $(ramfs-input)
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/2 v4] initramfs: print error and shell out for unsupported content
2014-10-19 7:18 ` [PATCH 1/2 v4] initramfs: don't include filenames from the initramfs for make goals (dist)clean Alexander Holler
@ 2014-10-19 7:18 ` Alexander Holler
0 siblings, 0 replies; 9+ messages in thread
From: Alexander Holler @ 2014-10-19 7:18 UTC (permalink / raw)
To: linux-kernel; +Cc: Andrew Morton, Michal Marek, Alexander Holler, stable
The initramfs generation is broken for file and directory names which contain
colons, spaces and other unusual characters which can't be included in names
for dependencies in traditional Makefiles (which gen_initramfs_list.sh
generates). Print an error for the most common unsupported characters (colons
and whitespace) and don't try to continue if these are discovered.
Some tests:
cd linux
make defconfig
echo 'CONFIG_BLK_DEV_INITRD=y' >> .config
echo 'CONFIG_INITRAMFS_ROOT_UID=0' >>.config
echo 'CONFIG_INITRAMFS_ROOT_GID=0' >>.config
echo 'CONFIG_INITRAMFS_COMPRESSION_NONE=y' >>.config
echo 'CONFIG_INITRAMFS_SOURCE="/tmp/bugroot"' >>.config
Problem with colons:
mkdir -p /tmp/bugroot/a:b
make -j4 bzImage # no error
make bzImage # try again, oops
Problem with spaces:
mkdir -p /tmp/bugroot/a\ b
make -j4 bzImage # no error
zcat usr/initramfs_data.cpio.gz | cpio --extract --list # oops, no content
Cc: <stable@vger.kernel.org>
---
Changes to v3:
- Uses find with -name and an expression suggested by Michael Marek
instead of find -regex. Therefor I've added his Signed-off-by.
- Detail the unsupported characters which which will be discovered in
the commit message.
scripts/gen_initramfs_list.sh | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/scripts/gen_initramfs_list.sh b/scripts/gen_initramfs_list.sh
index 17fa901..53398d5 100755
--- a/scripts/gen_initramfs_list.sh
+++ b/scripts/gen_initramfs_list.sh
@@ -171,6 +171,19 @@ dir_filelist() {
${dep_list}header "$1"
srcdir=$(echo "$1" | sed -e 's://*:/:g')
+
+ # Files and directories with spaces and colons are unsupported.
+ local unsupported=$(find "${srcdir}" -name '*[:[:space:]]*')
+ if [ ! -z "${unsupported}" ]; then
+ printf "ERROR: Unable to handle files/directories with " >&2
+ printf "unsupported characters (spaces, :, \\\n, \\\r, " >&2
+ printf "\\\t).\n Please use other ways to generate a " >&2
+ printf "cpio-archive with such names.\n" >&2
+ printf "Unsupported files and directories are:\n" >&2
+ printf "$unsupported\n" >&2
+ exit 1
+ fi
+
dirlist=$(find "${srcdir}" -printf "%p %m %U %G\n")
# If $dirlist is only one line, then the directory is empty
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2014-10-19 7:18 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <532CC625.7020509@ahsoftware.de>
2014-03-22 12:29 ` [PATCH 1/2] initramfs: don't include filenames from the initramfs for make goals (dist)clean Alexander Holler
2014-03-22 12:29 ` [PATCH 2/2 v3] initramfs: print error and shell out for unsupported content Alexander Holler
2014-03-22 18:22 ` Alexander Holler
2014-03-31 20:31 ` Michal Marek
2014-04-01 11:23 ` Alexander Holler
2014-04-01 12:23 ` Michal Marek
2014-04-01 17:52 ` Alexander Holler
2014-10-19 7:18 ` [PATCH 1/2 v4] initramfs: don't include filenames from the initramfs for make goals (dist)clean Alexander Holler
2014-10-19 7:18 ` [PATCH 2/2 v4] initramfs: print error and shell out for unsupported content Alexander Holler
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).