23 Sep, 2005

1 commit

  • In the lead up to 2.6.13 I fixed a large number of reboot problems by
    making the calling conventions consistent. Despite checking and double
    checking my work it appears I missed an obvious one.

    This first patch simply refactors the reboot routines so all of the
    preparation for various kinds of reboots are in their own functions.
    Making it very hard to get the various kinds of reboot out of sync.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Eric W. Biederman
     

18 Sep, 2005

1 commit

  • 2.6.13 incorporated Alan Cox's patch for /proc/sys/fs/suid_dumpable (one
    version of this patch can be found here
    http://marc.theaimsgroup.com/?l=linux-kernel&m=109647550421014&w=2 ).

    This patch also made corresponding changes in kernel/sys.c to change the
    prctl() PR_SET_DUMPABLE operation so that the permitted range of 'arg2' was
    modified from 0..1 to 0..2.

    However, a corresponding change was not made for PR_GET_DUMPABLE: if the
    dumpable flag is non-zero, then PR_GET_DUMPABLE always returns 1, so that
    the caller can't determine the true setting of this flag.

    Acked-by: Alan Cox
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Michael Kerrisk
     

08 Sep, 2005

1 commit

  • The patch removes a redundant variable `sig' from sys_prctl().

    For some reason, when sys_prctl is called with option == PR_SET_PDEATHSIG
    then the value of arg2 is assigned to an int variable named sig. Then sig
    is tested with valid_signal() and later used to set the value of
    current->pdeath_signal .

    There is no reason to use this intermediate variable since valid_signal()
    takes a unsigned long argument, so it can handle being passed arg2
    directly, and if the call to valid_signal is OK, then we know the value of
    arg2 is in the range zero to _NSIG and thus it'll easily fit in a plain int
    and thus there's no problem assigning it later to current->pdeath_signal
    (which is an int).

    The patch gets rid of the pointless variable `sig'.
    This reduces the size of kernel/sys.o in 2.6.13-rc6-mm1 by 32 bytes on my
    system.

    Patch has been compile tested, boot tested, and just to make damn sure I
    didn't break anything I wrote a quick test app that calls
    prctl(PR_SET_PDEATHSIG ...) with the entire range of values for a
    unsigned long, and it behaves as expected with and without the patch.

    Signed-off-by: Jesper Juhl
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jesper Juhl
     

04 Aug, 2005

1 commit

  • This removes the calls to device_suspend() from the shutdown path that
    were added sometime during 2.6.13-rc*. They aren't working properly on
    a number of configs (I got reports from both ppc powerbook users and x86
    users) causing the system to not shutdown anymore.

    I think it isn't the right approach at the moment anyway. We have
    already a shutdown() callback for the drivers that actually care about
    shutdown and the suspend() code isn't yet in a good enough shape to be
    so much generalized. Also, the semantics of suspend and shutdown are
    slightly different on a number of setups and the way this was patched in
    provides little way for drivers to cleanly differenciate. It should
    have been at least a different message.

    For 2.6.13, I think we should revert to 2.6.12 behaviour and have a
    working suspend back.

    Signed-off-by: Benjamin Herrenschmidt
    Signed-off-by: Linus Torvalds

    Benjamin Herrenschmidt
     

30 Jul, 2005

1 commit


28 Jul, 2005

1 commit


27 Jul, 2005

4 commits

  • When the kernel is working well and we want to restart cleanly
    kernel_restart is the function to use. But in many instances
    the kernel wants to reboot when thing are expected to be working
    very badly such as from panic or a software watchdog handler.

    This patch adds the function emergency_restart() so that
    callers can be clear what semantics they expect when calling
    restart. emergency_restart() is expected to be callable
    from interrupt context and possibly reliable in even more
    trying circumstances.

    This is an initial generic implementation for all architectures.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: Linus Torvalds

    Eric W. Biederman
     
  • It is obvious we wanted to call kernel_restart here
    but since we don't have it the code was expanded inline and hasn't
    been correct since sometime in 2.4.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: Linus Torvalds

    Eric W. Biederman
     
  • Because the factors of sys_reboot don't exist people calling
    into the reboot path duplicate the code badly, leading to
    inconsistent expectations of code in the reboot path.

    This patch should is just code motion.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: Linus Torvalds

    Eric W. Biederman
     
  • In the recent addition of device_suspend calls into
    sys_reboot two code paths were missed.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: Linus Torvalds

    Eric W. Biederman
     

26 Jun, 2005

2 commits

  • This patch introduces the architecture independent implementation the
    sys_kexec_load, the compat_sys_kexec_load system calls.

    Kexec on panic support has been integrated into the core patch and is
    relatively clean.

    In addition the hopefully architecture independent option
    crashkernel=size@location has been docuemented. It's purpose is to reserve
    space for the panic kernel to live, and where no DMA transfer will ever be
    setup to access.

    Signed-off-by: Eric Biederman
    Signed-off-by: Alexander Nyberg
    Signed-off-by: Adrian Bunk
    Signed-off-by: Vivek Goyal
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Eric W. Biederman
     
  • Without this patch, Linux provokes emergency disk shutdowns and
    similar nastiness. It was in SuSE kernels for some time, IIRC.

    Signed-off-by: Pavel Machek
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Pavel Machek
     

24 Jun, 2005

3 commits

  • The attached patch makes the following changes:

    (1) There's a new special key type called ".request_key_auth".

    This is an authorisation key for when one process requests a key and
    another process is started to construct it. This type of key cannot be
    created by the user; nor can it be requested by kernel services.

    Authorisation keys hold two references:

    (a) Each refers to a key being constructed. When the key being
    constructed is instantiated the authorisation key is revoked,
    rendering it of no further use.

    (b) The "authorising process". This is either:

    (i) the process that called request_key(), or:

    (ii) if the process that called request_key() itself had an
    authorisation key in its session keyring, then the authorising
    process referred to by that authorisation key will also be
    referred to by the new authorisation key.

    This means that the process that initiated a chain of key requests
    will authorise the lot of them, and will, by default, wind up with
    the keys obtained from them in its keyrings.

    (2) request_key() creates an authorisation key which is then passed to
    /sbin/request-key in as part of a new session keyring.

    (3) When request_key() is searching for a key to hand back to the caller, if
    it comes across an authorisation key in the session keyring of the
    calling process, it will also search the keyrings of the process
    specified therein and it will use the specified process's credentials
    (fsuid, fsgid, groups) to do that rather than the calling process's
    credentials.

    This allows a process started by /sbin/request-key to find keys belonging
    to the authorising process.

    (4) A key can be read, even if the process executing KEYCTL_READ doesn't have
    direct read or search permission if that key is contained within the
    keyrings of a process specified by an authorisation key found within the
    calling process's session keyring, and is searchable using the
    credentials of the authorising process.

    This allows a process started by /sbin/request-key to read keys belonging
    to the authorising process.

    (5) The magic KEY_SPEC_*_KEYRING key IDs when passed to KEYCTL_INSTANTIATE or
    KEYCTL_NEGATE will specify a keyring of the authorising process, rather
    than the process doing the instantiation.

    (6) One of the process keyrings can be nominated as the default to which
    request_key() should attach new keys if not otherwise specified. This is
    done with KEYCTL_SET_REQKEY_KEYRING and one of the KEY_REQKEY_DEFL_*
    constants. The current setting can also be read using this call.

    (7) request_key() is partially interruptible. If it is waiting for another
    process to finish constructing a key, it can be interrupted. This permits
    a request-key cycle to be broken without recourse to rebooting.

    Signed-Off-By: David Howells
    Signed-Off-By: Benoit Boissinot
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Howells
     
  • Avoid taking the tasklist_lock in sys_times if the process is single
    threaded. In a NUMA system taking the tasklist_lock may cause a bouncing
    cacheline if multiple independent processes continually call sys_times to
    measure their performance.

    Signed-off-by: Christoph Lameter
    Signed-off-by: Shai Fultheim
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     
  • Add a new `suid_dumpable' sysctl:

    This value can be used to query and set the core dump mode for setuid
    or otherwise protected/tainted binaries. The modes are

    0 - (default) - traditional behaviour. Any process which has changed
    privilege levels or is execute only will not be dumped

    1 - (debug) - all processes dump core when possible. The core dump is
    owned by the current user and no security is applied. This is intended
    for system debugging situations only. Ptrace is unchecked.

    2 - (suidsafe) - any binary which normally would not be dumped is dumped
    readable by root only. This allows the end user to remove such a dump but
    not access it directly. For security reasons core dumps in this mode will
    not overwrite one another or other files. This mode is appropriate when
    adminstrators are attempting to debug problems in a normal environment.

    (akpm:

    > > +EXPORT_SYMBOL(suid_dumpable);
    >
    > EXPORT_SYMBOL_GPL?

    No problem to me.

    > > if (current->euid == current->uid && current->egid == current->gid)
    > > current->mm->dumpable = 1;
    >
    > Should this be SUID_DUMP_USER?

    Actually the feedback I had from last time was that the SUID_ defines
    should go because its clearer to follow the numbers. They can go
    everywhere (and there are lots of places where dumpable is tested/used
    as a bool in untouched code)

    > Maybe this should be renamed to `dump_policy' or something. Doing that
    > would help us catch any code which isn't using the #defines, too.

    Fair comment. The patch was designed to be easy to maintain for Red Hat
    rather than for merging. Changing that field would create a gigantic
    diff because it is used all over the place.

    )

    Signed-off-by: Alan Cox
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alan Cox
     

06 May, 2005

1 commit

  • As per http://www.nist.gov/dads/HTML/shellsort.html, this should be
    referred to as a Shell sort. Shell-Metzner is a misnomer.

    Signed-off-by: Daniel Dickman
    Signed-off-by: Domen Puncer
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Domen Puncer
     

01 May, 2005

3 commits

  • Convert most of the current code that uses _NSIG directly to instead use
    valid_signal(). This avoids gcc -W warnings and off-by-one errors.

    Signed-off-by: Jesper Juhl
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jesper Juhl
     
  • Add a pair of rlimits for allowing non-root tasks to raise nice and rt
    priorities. Defaults to traditional behavior. Originally written by
    Chris Wright.

    The patch implements a simple rlimit ceiling for the RT (and nice) priorities
    a task can set. The rlimit defaults to 0, meaning no change in behavior by
    default. A value of 50 means RT priority levels 1-50 are allowed. A value of
    100 means all 99 privilege levels from 1 to 99 are allowed. CAP_SYS_NICE is
    blanket permission.

    (akpm: see http://www.uwsg.iu.edu/hypermail/linux/kernel/0503.1/1921.html for
    tips on integrating this with PAM).

    Signed-off-by: Matt Mackall
    Acked-by: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Matt Mackall
     
  • Replace a number of memory barriers with smp_ variants. This means we won't
    take the unnecessary hit on UP machines.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    akpm@osdl.org
     

17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds