lkml.org 
[lkml]   [2022]   [Nov]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH 0/1] *** Fix kill(-1,s) returning 0 on 0 kills ***
    Date
    Hi. I've never sent a kernel patch before but this one seemed trivial,
    so I thought I'd give it a shot.

    My issue: kill(-1,s) on Linux doesn't return -ESCHR when it has nothing
    to kill.

    The code sample below demonstrates the problem, which gets fixed by the
    patch:

    #define _GNU_SOURCE
    #include <assert.h>
    #include <errno.h>
    #include <signal.h>
    #include <stdio.h>
    #include <sys/wait.h>
    #include <unistd.h>
    #define VICTIM_UID 4200 //check these are safe to use on your system!
    #define UNUSED_UID 4300
    int main(){
    uid_t r,e,s;
    if(geteuid()) return 1; //requires root privileges

    //pipe to let the parent know when the child has changed ids
    int fds[2]; if(0>pipe(fds)) return 1;
    pid_t pid;
    if(0>(pid=fork())) return 1;
    else if(0==pid){
    setreuid(VICTIM_UID,VICTIM_UID);
    getresuid(&r,&e,&s); printf("child: %u %u %u\n", r,e,s);
    close(fds[0]); close(fds[1]); //let the parent continue
    for(;;) pause();
    }
    close(fds[1]);
    read(fds[0],&(char){0},1); //wait for uid change in the child

    #if 1
    setreuid(VICTIM_UID,(uid_t)-1); seteuid(VICTIM_UID);
    #else
    setresuid(UNUSED_UID,VICTIM_UID,0);
    #endif
    getresuid(&r,&e,&s); printf("parent: %u %u %u\n", r,e,s); //4200 4200 0

    int err = kill(-1,-111); (void)err; //test -EINVAL
    assert(err < 0 && errno == EINVAL);

    int rc = kill(-1,SIGTERM); //test 0
    if(rc>=0) wait(0);
    int rc2 = kill(-1,SIGTERM); //test -ESCHR
    printf("1st kill ok==%d; 2nd kill ESRCH==%d\n", rc==0, rc2<0&& errno==ESRCH);
    }

    Thank you for considering the patch.

    Best regards,
    Petr S.


    Petr Skocik (1):
    Fix kill(-1,s) returning 0 on 0 kills

    kernel/signal.c | 6 ++----
    1 file changed, 2 insertions(+), 4 deletions(-)

    --
    2.25.1

    \
     
     \ /
      Last update: 2022-11-22 17:18    [W:4.851 / U:0.420 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site