image: check if the file is core dump

Message ID 20240417064600.12133-1-zhibin.dong@siemens.com
State Accepted, archived
Headers show
Series image: check if the file is core dump | expand

Commit Message

Zhibin Dong April 17, 2024, 6:46 a.m. UTC
The previous code does a wrong judgement in two cases:
1. a file is suffixed by .core but is not a core dump file
2. a file is a core dump file but is not suffixed by .core

The new code uses `file` to determine the type of files, which is more
accurate.

Signed-off-by: Zhibin Dong <zhibin.dong@siemens.com>
---
 meta/classes/image.bbclass | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Zhibin Dong April 17, 2024, 6:50 a.m. UTC | #1
How about using `--mime-type`?

在2024年4月17日星期三 UTC+8 14:47:25<Zhibin Dong> 写道:

> The previous code does a wrong judgement in two cases:
> 1. a file is suffixed by .core but is not a core dump file
> 2. a file is a core dump file but is not suffixed by .core
>
> The new code uses `file` to determine the type of files, which is more
> accurate.
>
> Signed-off-by: Zhibin Dong <zhibi...@siemens.com>
> ---
> meta/classes/image.bbclass | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
> index 98741da0..2b0995d2 100644
> --- a/meta/classes/image.bbclass
> +++ b/meta/classes/image.bbclass
> @@ -444,7 +444,7 @@ EOSUDO
>
> # Sometimes qemu-user-static generates coredumps in chroot, move them
> # to work temporary directory and inform user about it.
> - for f in $(sudo find ${ROOTFSDIR} -type f -name *.core); do
> + for f in $(sudo find ${ROOTFSDIR} -type f -exec file --mime-type {} \; | 
> grep 'application/x-coredump' | cut -d: -f1); do
> sudo mv "${f}" "${WORKDIR}/temp/"
> bbwarn "found core dump in rootfs, check it in ${WORKDIR}/temp/${f##*/}"
> done
> -- 
> 2.39.2
>
>
Uladzimir Bely June 17, 2024, 5:23 a.m. UTC | #2
On Tue, 2024-04-16 at 23:50 -0700, Zhibin Dong wrote:
> How about using `--mime-type`?
> 
> 在2024年4月17日星期三 UTC+8 14:47:25<Zhibin Dong> 写道:
> > The previous code does a wrong judgement in two cases:
> > 1. a file is suffixed by .core but is not a core dump file
> > 2. a file is a core dump file but is not suffixed by .core
> > 
> > The new code uses `file` to determine the type of files, which is
> > more
> > accurate.
> > 
> > Signed-off-by: Zhibin Dong <zhibi...@siemens.com>
> > ---
> >  meta/classes/image.bbclass | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/meta/classes/image.bbclass
> > b/meta/classes/image.bbclass
> > index 98741da0..2b0995d2 100644
> > --- a/meta/classes/image.bbclass
> > +++ b/meta/classes/image.bbclass
> > @@ -444,7 +444,7 @@ EOSUDO
> >  
> >  # Sometimes qemu-user-static generates coredumps in chroot, move
> > them
> >  # to work temporary directory and inform user about it.
> > - for f in $(sudo find ${ROOTFSDIR} -type f -name *.core); do
> > + for f in $(sudo find ${ROOTFSDIR} -type f -exec file --mime-type
> > {} \; | grep 'application/x-coredump' | cut -d: -f1); do
> >  sudo mv "${f}" "${WORKDIR}/temp/"
> >  bbwarn "found core dump in rootfs, check it in
> > ${WORKDIR}/temp/${f##*/}"
> >  done

Applied to next, thanks.
Jan Kiszka June 27, 2024, 3:44 p.m. UTC | #3
On 17.04.24 08:46, Zhibin Dong wrote:
> The previous code does a wrong judgement in two cases:
> 1. a file is suffixed by .core but is not a core dump file
> 2. a file is a core dump file but is not suffixed by .core
> 
> The new code uses `file` to determine the type of files, which is more
> accurate.
> 
> Signed-off-by: Zhibin Dong <zhibin.dong@siemens.com>
> ---
>  meta/classes/image.bbclass | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
> index 98741da0..2b0995d2 100644
> --- a/meta/classes/image.bbclass
> +++ b/meta/classes/image.bbclass
> @@ -444,7 +444,7 @@ EOSUDO
>  
>      # Sometimes qemu-user-static generates coredumps in chroot, move them
>      # to work temporary directory and inform user about it.
> -    for f in $(sudo find ${ROOTFSDIR} -type f -name *.core); do
> +    for f in $(sudo find ${ROOTFSDIR} -type f -exec file --mime-type {} \; | grep 'application/x-coredump' | cut -d: -f1); do
>          sudo mv "${f}" "${WORKDIR}/temp/"
>          bbwarn "found core dump in rootfs, check it in ${WORKDIR}/temp/${f##*/}"
>      done

Unfortunately, this turns out to be extreeemly costly: For every file in
the rootfs, we now call 'file' which opens and reads its header to
determine whether it is a coredump. I suspect this was never really
tested against some non-trivial rootfs.

I agree that we would avoid false positives, thus should check for the
mime-type before deleting. But is there really a case for coredumps not
ending on .core?

Jan
Schmidt, Adriaan July 1, 2024, 4:56 a.m. UTC | #4
Jan Kiszka, Donnerstag, 27. Juni 2024 17:44:
> On 17.04.24 08:46, Zhibin Dong wrote:
> > The previous code does a wrong judgement in two cases:
> > 1. a file is suffixed by .core but is not a core dump file
> > 2. a file is a core dump file but is not suffixed by .core
> >
> > The new code uses `file` to determine the type of files, which is more
> > accurate.
> >
> > Signed-off-by: Zhibin Dong <zhibin.dong@siemens.com>
> > ---
> >  meta/classes/image.bbclass | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
> > index 98741da0..2b0995d2 100644
> > --- a/meta/classes/image.bbclass
> > +++ b/meta/classes/image.bbclass
> > @@ -444,7 +444,7 @@ EOSUDO
> >
> >      # Sometimes qemu-user-static generates coredumps in chroot, move them
> >      # to work temporary directory and inform user about it.
> > -    for f in $(sudo find ${ROOTFSDIR} -type f -name *.core); do
> > +    for f in $(sudo find ${ROOTFSDIR} -type f -exec file --mime-type {} \;
> | grep 'application/x-coredump' | cut -d: -f1); do
> >          sudo mv "${f}" "${WORKDIR}/temp/"
> >          bbwarn "found core dump in rootfs, check it in
> ${WORKDIR}/temp/${f##*/}"
> >      done
> 
> Unfortunately, this turns out to be extreeemly costly: For every file in
> the rootfs, we now call 'file' which opens and reads its header to
> determine whether it is a coredump. I suspect this was never really
> tested against some non-trivial rootfs.
> 
> I agree that we would avoid false positives, thus should check for the
> mime-type before deleting. But is there really a case for coredumps not
> ending on .core?

Quoting my own reply [0] to the original patch:

> I don't know the details of why we have this code [1], but maybe "scan the whole
> rootfs" is not the best solution to the problem...
> When specifically can those core dumps happen?
> Is it only during update-initramfs, which is mentioned in the bug linked to the original commit [2]?
> Maybe also during package installation, which may run commands with qemu-user?
> Can we reproduce this?
> Where in the rootfs are they stored?
> Can our search for them be more targeted?
> Would such core dumps be caught by other checks we have in place (e.g., modification time of files)?

For now I fully agree with your proposal to only check files named *.core.

After that, if there is need for further optimization, I think it's worth examining
the questions above, and try to find a solution with a more targeted search (not scanning
the complete rootfs).

Adriaan

[0] https://groups.google.com/g/isar-users/c/w2KZ8IOyoF8/m/wGIug0kBAwAJ
[1] introduced in fa10b1d9b3a5e876bbcf556b03d585bf712fa7a5
[2] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1040981

> Jan
> 
> --
> Siemens AG, Technology
> Linux Expert Center
> 
> --
> You received this message because you are subscribed to the Google Groups
> "isar-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to isar-users+unsubscribe@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/isar-users/9cd2657d-cc5f-47cd-8c9b-
> abd6091e7c43%40siemens.com.

Patch

diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
index 98741da0..2b0995d2 100644
--- a/meta/classes/image.bbclass
+++ b/meta/classes/image.bbclass
@@ -444,7 +444,7 @@  EOSUDO
 
     # Sometimes qemu-user-static generates coredumps in chroot, move them
     # to work temporary directory and inform user about it.
-    for f in $(sudo find ${ROOTFSDIR} -type f -name *.core); do
+    for f in $(sudo find ${ROOTFSDIR} -type f -exec file --mime-type {} \; | grep 'application/x-coredump' | cut -d: -f1); do
         sudo mv "${f}" "${WORKDIR}/temp/"
         bbwarn "found core dump in rootfs, check it in ${WORKDIR}/temp/${f##*/}"
     done