commit 079148b91 (coredump: factor out the setting of PF_DUMPCORE)
cleaned up the setting of PF_DUMPCORE by removing it from all the
linux_binfmt->core_dump() and moving it to zap_threads().But this
ended up clearing all the previously set flags. This causes issues
during core generation when tsk->flags is checked again
(eg. for PF_USED_MATH to dump floating point registers). Fix this.
Signed-off-by: Silesh C V <[email protected]>
Cc: Oleg Nesterov <[email protected]>
Cc: Mandeep Singh Baines <[email protected]>
---
fs/coredump.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/coredump.c b/fs/coredump.c
index 0b2528f..a93f7e6 100644
--- a/fs/coredump.c
+++ b/fs/coredump.c
@@ -306,7 +306,7 @@ static int zap_threads(struct task_struct *tsk, struct mm_struct *mm,
if (unlikely(nr < 0))
return nr;
- tsk->flags = PF_DUMPCORE;
+ tsk->flags |= PF_DUMPCORE;
if (atomic_read(&mm->mm_users) == nr + 1)
goto done;
/*
--
1.8.1.2
OOPS. Thanks a lot Silesh.
Hopefully Andrew can take this patch. And it probably needs
Cc: [email protected] # v3.10+
On 07/11, Silesh C V wrote:
>
> commit 079148b91 (coredump: factor out the setting of PF_DUMPCORE)
> cleaned up the setting of PF_DUMPCORE by removing it from all the
> linux_binfmt->core_dump() and moving it to zap_threads().But this
> ended up clearing all the previously set flags. This causes issues
> during core generation when tsk->flags is checked again
> (eg. for PF_USED_MATH to dump floating point registers). Fix this.
>
> Signed-off-by: Silesh C V <[email protected]>
> Cc: Oleg Nesterov <[email protected]>
> Cc: Mandeep Singh Baines <[email protected]>
>
> ---
> fs/coredump.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/coredump.c b/fs/coredump.c
> index 0b2528f..a93f7e6 100644
> --- a/fs/coredump.c
> +++ b/fs/coredump.c
> @@ -306,7 +306,7 @@ static int zap_threads(struct task_struct *tsk, struct mm_struct *mm,
> if (unlikely(nr < 0))
> return nr;
>
> - tsk->flags = PF_DUMPCORE;
> + tsk->flags |= PF_DUMPCORE;
> if (atomic_read(&mm->mm_users) == nr + 1)
> goto done;
> /*
> --
> 1.8.1.2
>