1. 24 May, 2012 1 commit
  2. 22 May, 2012 5 commits
  3. 09 Sep, 2009 1 commit
  4. 02 Sep, 2009 2 commits
    • David Howells's avatar
      KEYS: Add a keyctl to install a process's session keyring on its parent [try #6] · ee18d64c
      David Howells authored
      Add a keyctl to install a process's session keyring onto its parent.  This
      replaces the parent's session keyring.  Because the COW credential code does
      not permit one process to change another process's credentials directly, the
      change is deferred until userspace next starts executing again.  Normally this
      will be after a wait*() syscall.
      To support this, three new security hooks have been provided:
      cred_alloc_blank() to allocate unset security creds, cred_transfer() to fill in
      the blank security creds and key_session_to_parent() - which asks the LSM if
      the process may replace its parent's session keyring.
      The replacement may only happen if the process has the same ownership details
      as its parent, and the process has LINK permission on the session keyring, and
      the session keyring is owned by the process, and the LSM permits it.
      Note that this requires alteration to each architecture's notify_resume path.
      This has been done for all arches barring blackfin, m68k* and xtensa, all of
      which need assembly alteration to support TIF_NOTIFY_RESUME.  This allows the
      replacement to be performed at the point the parent process resumes userspace
      This allows the userspace AFS pioctl emulation to fully emulate newpag() and
      the VIOCSETTOK and VIOCSETTOK2 pioctls, all of which require the ability to
      alter the parent process's PAG membership.  However, since kAFS doesn't use
      PAGs per se, but rather dumps the keys into the session keyring, the session
      keyring of the parent must be replaced if, for example, VIOCSETTOK is passed
      the newpag flag.
      This can be tested with the following program:
      	#include <stdio.h>
      	#include <stdlib.h>
      	#include <keyutils.h>
      	#define KEYCTL_SESSION_TO_PARENT	18
      	#define OSERROR(X, S) do { if ((long)(X) == -1) { perror(S); exit(1); } } while(0)
      	int main(int argc, char **argv)
      		key_serial_t keyring, key;
      		long ret;
      		keyring = keyctl_join_session_keyring(argv[1]);
      		OSERROR(keyring, "keyctl_join_session_keyring");
      		key = add_key("user", "a", "b", 1, keyring);
      		OSERROR(key, "add_key");
      		ret = keyctl(KEYCTL_SESSION_TO_PARENT);
      		return 0;
      Compiled and linked with -lkeyutils, you should see something like:
      	[dhowells@andromeda ~]$ keyctl show
      	Session Keyring
      	       -3 --alswrv   4043  4043  keyring: _ses
      	355907932 --alswrv   4043    -1   \_ keyring: _uid.4043
      	[dhowells@andromeda ~]$ /tmp/newpag
      	[dhowells@andromeda ~]$ keyctl show
      	Session Keyring
      	       -3 --alswrv   4043  4043  keyring: _ses
      	1055658746 --alswrv   4043  4043   \_ user: a
      	[dhowells@andromeda ~]$ /tmp/newpag hello
      	[dhowells@andromeda ~]$ keyctl show
      	Session Keyring
      	       -3 --alswrv   4043  4043  keyring: hello
      	340417692 --alswrv   4043  4043   \_ user: a
      Where the test program creates a new session keyring, sticks a user key named
      'a' into it and then installs it on its parent.
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Signed-off-by: default avatarJames Morris <jmorris@namei.org>
    • David Howells's avatar
      KEYS: Extend TIF_NOTIFY_RESUME to (almost) all architectures [try #6] · d0420c83
      David Howells authored
      Implement TIF_NOTIFY_RESUME for most of those architectures in which isn't yet
      available, and, whilst we're at it, have it call the appropriate tracehook.
      After this patch, blackfin, m68k* and xtensa still lack support and need
      alteration of assembly code to make it work.
      Resume notification can then be used (by a later patch) to install a new
      session keyring on the parent of a process.
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Acked-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      cc: linux-arch@vger.kernel.org
      Signed-off-by: default avatarJames Morris <jmorris@namei.org>
  5. 20 May, 2009 1 commit
    • Eric W. Biederman's avatar
      syscall: Sort out syscall_restart name clash. · 288ddad5
      Eric W. Biederman authored
      Stephen Rothwell <sfr@canb.auug.org.au> writes:
      > Today's linux-next build of at least some av32 and arm configs failed like this:
      > arch/avr32/kernel/signal.c:216: error: conflicting types for 'restart_syscall'
      > include/linux/sched.h:2184: error: previous definition of 'restart_syscall' was here
      > Caused by commit 690cc3ff ("syscall:
      > Implement a convinience function restart_syscall") from the net tree.
      Grrr. Some days it feels like all of the good names are already taken.
      Let's just rename the two static users in arm and avr32 to get this
      sorted out.
      Signed-off-by: default avatarEric W. Biederman <ebiederm@aristanetworks.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
  6. 17 Dec, 2008 1 commit
  7. 27 Jun, 2008 1 commit
    • Martin Koegler's avatar
      avr32: Fix sigaltstack behaviour · 7c1b90a1
      Martin Koegler authored
      A signal handler should be able to change the signal stack used for the
      next signal by altering the ucontext_t passed as a parameter to the
      handler. This does not currently work on avr32 since it doesn't update
      the in-kernel signal context from the ucontext_t upon signal handler
      Fix it by adding a call to do_sigaltstack() from sys_rt_sigreturn(),
      bringing it in line with most other architectures.
      Signed-off-by: default avatarMartin Koegler <mkoegler@auto.tuwien.ac.at>
      [haavard.skinnemoen@atmel.com: changed patch description]
      Signed-off-by: default avatarHaavard Skinnemoen <haavard.skinnemoen@atmel.com>
  8. 25 Jan, 2008 1 commit
  9. 07 Dec, 2006 1 commit
  10. 26 Sep, 2006 1 commit