lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1337105014.12610.81.camel@sbsiddha-desk.sc.intel.com>
Date:	Tue, 15 May 2012 11:03:33 -0700
From:	Suresh Siddha <suresh.b.siddha@...el.com>
To:	Oleg Nesterov <oleg@...hat.com>, torvalds@...ux-foundation.org
Cc:	hpa@...or.com, mingo@...e.hu, linux-kernel@...r.kernel.org,
	suresh@...stanetworks.com
Subject: Re: [PATCH v2 2/4] coredump: ensure the fpu state is flushed for
 proper multi-threaded core dump

On Sun, 2012-05-13 at 18:11 +0200, Oleg Nesterov wrote:
> On 05/11, Suresh Siddha wrote:
> >
> > On Fri, 2012-05-11 at 18:51 +0200, Oleg Nesterov wrote:
> > > On 05/10, Suresh Siddha wrote:
> > > >
> > > > --- a/fs/exec.c
> > > > +++ b/fs/exec.c
> > > > @@ -1930,8 +1930,21 @@ static int coredump_wait(int exit_code, struct core_state *core_state)
> > > >  		core_waiters = zap_threads(tsk, mm, core_state, exit_code);
> > > >  	up_write(&mm->mmap_sem);
> > > >
> > > > -	if (core_waiters > 0)
> > > > +	if (core_waiters > 0) {
> > > > +		struct core_thread *ptr;
> > > > +
> > > >  		wait_for_completion(&core_state->startup);
> > > > +		/*
> > > > +		 * Wait for all the threads to become inactive, so that
> > > > +		 * all the thread context (extended register state, like
> > > > +		 * fpu etc) gets copied to the memory.
> > > > +		 */
> > > > +		ptr = core_state->dumper.next;
> > > > +		while (ptr != NULL) {
> > > > +			wait_task_inactive(ptr->task, 0);
> > > > +			ptr = ptr->next;
> > > > +		}
> > > > +	}

Linus, are you ok with this?

> > and in most cases, wait_task_inactive() will
> > return success immediately.
> 
> I agree. Still, we add the O(n) loop which needs task_rq_lock() at least.

yeah I am not too happy with it. But we have only two choices and I
presented both of them.

1. What I do in this patch. Wait for all the threads to become inactive
so that core dumping thread can proceed with the dump operation.

2. call the equivalent of prepare_to_copy() in exit_mm() when the
mm->core_state is set, so that each thread's latest state is flushed to
the memory before we notify the main thread to start the core dump. You
and I think even Linus didn't like it.

May be there is a third one, which I don't want to pursue. using
finish_task_switch() to notify the main-core dumping thread that all the
other threads are now inactive. But adding the core-dump related check
in the hot task switch path is probably not a good idea :(

Given that the process exit with a signal leading to coredump is not a
common thing, we can probably live with option-1.

> I believe the patch is correct.
> 

Oleg, Can I treat this as your Ack for this patch?

thanks,
suresh

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ