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] [day] [month] [year] [list]
Message-ID: <10341.1334911738@redhat.com>
Date:	Fri, 20 Apr 2012 09:48:58 +0100
From:	David Howells <dhowells@...hat.com>
To:	Oleg Nesterov <oleg@...hat.com>
Cc:	dhowells@...hat.com, Andrew Morton <akpm@...ux-foundation.org>,
	Linus Torvalds <torvalds@...ux-foundation.org>,
	Thomas Gleixner <tglx@...utronix.de>,
	Alexander Gordeev <agordeev@...hat.com>,
	Chris Zankel <chris@...kel.net>,
	David Smith <dsmith@...hat.com>,
	"Frank Ch. Eigler" <fche@...hat.com>,
	Geert Uytterhoeven <geert@...ux-m68k.org>,
	Larry Woodman <lwoodman@...hat.com>,
	Peter Zijlstra <peterz@...radead.org>,
	Richard Kuo <rkuo@...eaurora.org>, Tejun Heo <tj@...nel.org>,
	linux-arch@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v6 1/6] task_work_add: generic process-context callbacks

Oleg Nesterov <oleg@...hat.com> wrote:

> Provide a simple mechanism that allows running code in the
> (nonatomic) context of the arbitrary task.
> 
> The caller does task_work_add(task, task_work) and this task
> executes task_work->func() either from do_notify_resume() or
> from do_exit(). The callback can rely on PF_EXITING to detect
> the latter case.
> 
> "struct task_work" can be embedded in another struct, still it
> has "void *data" to handle the most common/simple case.
> 
> This allows us to kill the ->replacement_session_keyring hack,
> and potentially this can have more users.
> 
> Performance-wise, this adds 2 "unlikely(!hlist_empty())" checks
> into tracehook_notify_resume() and do_exit(). But at the same
> time we can remove the "replacement_session_keyring != NULL"
> checks from arch/*/signal.c and exit_creds().
> 
> Note: task_work_add/task_work_run abuses ->pi_lock. This is
> only because this lock is already used by lookup_pi_state() to
> synchronize with do_exit() setting PF_EXITING. Fortunately the
> scope of this lock in task_work.c is really tiny, and the code
> is unlikely anyway.
> 
> v2:
> 	- implement task_work_cancel(func), it removes the first
> 	  task_work with the same callback.
> v3:
> 	- task_work_add() gets the new arg, "bool notify" to
> 	  conditionalize set_notify_resume(), this makes it useable
> 	  for kthreads and task_work_add(notify => false) can
> 	  work without TIF_NOTIFY_RESUME.
> 
> 	- don't add the dummy "ifndef TIF_NOTIFY_RESUME" inlines,
> 	  just add the simple check in task_work_add().
> v4:
> 	- s/task_work_queue/task_work_add/
> v5:
> 	- task_work_run() uses current explicitely
> 
> Todo:
> 	- move clear_thread_flag(TIF_NOTIFY_RESUME) from arch/
> 	  to tracehook_notify_resume()
> 
> 	- rename tracehook_notify_resume() and move it into
> 	  linux/task_work.h
> 
> 	- m68k and xtensa don't have TIF_NOTIFY_RESUME and thus
> 	  task_work_add(notify => true) fails with -ENOTSUPP.
> 
> 	  However, ->replacement_session_keyring equally needs
> 	  this flag, task_work_add() is not worse.
> 
> Signed-off-by: Oleg Nesterov <oleg@...hat.com>

Acked-by: David Howells <dhowells@...hat.com>
--
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