lkml.org 
[lkml]   [2005]   [Jun]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 5/5] UML - clean up error path
    Date
    From
    This cleans an error path which used to leak file descriptors by returning
    without trying to tidy up.

    Signed-off-by: Jeff Dike <jdike@addtoit.com>

    Index: linux-2.6.12-rc/arch/um/drivers/chan_user.c
    ===================================================================
    --- linux-2.6.12-rc.orig/arch/um/drivers/chan_user.c 2005-06-02 17:04:11.000000000 -0400
    +++ linux-2.6.12-rc/arch/um/drivers/chan_user.c 2005-06-03 17:46:17.000000000 -0400
    @@ -143,22 +143,22 @@ static int winch_tramp(int fd, struct tt
    {
    struct winch_data data;
    unsigned long stack;
    - int fds[2], pid, n, err;
    + int fds[2], n, err;
    char c;

    err = os_pipe(fds, 1, 1);
    if(err < 0){
    printk("winch_tramp : os_pipe failed, err = %d\n", -err);
    - return(err);
    + goto out;
    }

    data = ((struct winch_data) { .pty_fd = fd,
    .pipe_fd = fds[1],
    .close_me = fds[0] } );
    - pid = run_helper_thread(winch_thread, &data, 0, &stack, 0);
    - if(pid < 0){
    + err = run_helper_thread(winch_thread, &data, 0, &stack, 0);
    + if(err < 0){
    printk("fork of winch_thread failed - errno = %d\n", errno);
    - return(pid);
    + goto out_close;
    }

    os_close_file(fds[1]);
    @@ -168,14 +168,22 @@ static int winch_tramp(int fd, struct tt
    printk("winch_tramp : failed to read synchronization byte\n");
    printk("read failed, err = %d\n", -n);
    printk("fd %d will not support SIGWINCH\n", fd);
    - pid = -1;
    + err = -EINVAL;
    + goto out_close1;
    }
    - return(pid);
    + return err ;
    +
    + out_close:
    + os_close_file(fds[1]);
    + out_close1:
    + os_close_file(fds[0]);
    + out:
    + return err;
    }

    void register_winch(int fd, struct tty_struct *tty)
    {
    - int pid, thread, thread_fd;
    + int pid, thread, thread_fd = -1;
    int count;
    char c = 1;

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

    \
     
     \ /
      Last update: 2005-06-06 22:22    [W:4.237 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site