this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix: Add mldr lifetime pipes to guard table.

+24 -18
+2 -2
src/kernel/emulation/linux/elfcalls_wrapper.c
··· 100 100 return elfcalls()->dserver_process_lifetime_pipe_refresh(); 101 101 }; 102 102 103 - void __dserver_close_process_lifetime_pipe(int* fds) { 104 - return elfcalls()->dserver_close_process_lifetime_pipe(fds); 103 + void __dserver_close_process_lifetime_pipe(int fd) { 104 + return elfcalls()->dserver_close_process_lifetime_pipe(fd); 105 105 };
+1 -1
src/kernel/emulation/linux/elfcalls_wrapper.h
··· 35 35 36 36 int __dserver_get_process_lifetime_pipe(void); 37 37 int __dserver_process_lifetime_pipe_refresh(void); 38 - void __dserver_close_process_lifetime_pipe(int* fds); 38 + void __dserver_close_process_lifetime_pipe(int fd); 39 39 40 40 #ifdef __cplusplus 41 41 }
+5
src/kernel/emulation/linux/mach/lkm.c
··· 57 57 guard_entry_options_t options; 58 58 options.close = _elfcalls->dserver_close_socket; 59 59 guard_table_add(__dserver_per_thread_socket(), guard_flag_prevent_close | guard_flag_close_on_fork, &options); 60 + int lifetime_pipe = __dserver_get_process_lifetime_pipe(); 61 + if (lifetime_pipe != -1) { 62 + options.close = _elfcalls->dserver_close_process_lifetime_pipe; 63 + guard_table_add(lifetime_pipe, guard_flag_prevent_close | guard_flag_close_on_fork, &options); 64 + } 60 65 } 61 66 #endif 62 67
+8 -2
src/kernel/emulation/linux/process/fork.c
··· 46 46 options.close = __dserver_close_socket; 47 47 guard_table_add(__dserver_per_thread_socket(), guard_flag_prevent_close | guard_flag_close_on_fork, &options); 48 48 49 + // only guard the lifetime pipe if it's used. 50 + if (newReadFd != -1) 51 + { 52 + options.close = __dserver_close_process_lifetime_pipe; 53 + guard_table_add(__dserver_get_process_lifetime_pipe(), guard_flag_prevent_close | guard_flag_close_on_fork, &options); 54 + } 55 + 49 56 int dummy_stack_variable; 50 57 if (dserver_rpc_checkin(true, &dummy_stack_variable, newReadFd) < 0) { 51 58 // we can't do ANYTHING if darlingserver fails to acknowledge us ··· 55 62 if (wdfd >= 0) 56 63 sys_fchdir(wdfd); 57 64 58 - int pipe[2] = { newReadFd, -1 }; 59 - __dserver_close_process_lifetime_pipe(pipe); 65 + __dserver_close_process_lifetime_pipe(newReadFd); 60 66 } 61 67 62 68 return ret;
+2 -4
src/startup/mldr/elfcalls/elfcalls.c
··· 65 65 extern void __mldr_close_rpc_socket(int socket); 66 66 67 67 extern int __mldr_create_process_lifetime_pipe(int* fds); 68 - extern void __mldr_close_process_lifetime_pipe(int* fds); 68 + extern void __mldr_close_process_lifetime_pipe(int fd); 69 69 extern int __dserver_process_lifetime_pipe_fd; 70 70 71 71 static int __dserver_get_process_lifetime_pipe() { ··· 73 73 } 74 74 75 75 static int __dserver_process_lifetime_pipe_refresh() { 76 - // the read end has already been closed. 77 - int pipe[2] = { -1, __dserver_process_lifetime_pipe_fd }; 78 - __mldr_close_process_lifetime_pipe(pipe); 76 + int pipe[2]; 79 77 80 78 if (__mldr_create_process_lifetime_pipe(pipe) == -1) { 81 79 fprintf(stderr, "Failed to create process lifetime pipe: %d (%s)\n", errno, strerror(errno));
+1 -1
src/startup/mldr/elfcalls/elfcalls.h
··· 65 65 // darlingserver process lifetime pipe info 66 66 int (*dserver_get_process_lifetime_pipe)(void); 67 67 int (*dserver_process_lifetime_pipe_refresh)(void); 68 - void (*dserver_close_process_lifetime_pipe)(int* fds); 68 + void (*dserver_close_process_lifetime_pipe)(int fd); 69 69 }; 70 70 71 71 #endif
+5 -8
src/startup/mldr/mldr.c
··· 796 796 return -1; 797 797 } 798 798 799 - void __mldr_close_process_lifetime_pipe(int* fds) { 800 - for (int i = 0; i < 2; ++i) { 801 - if (fds[i] != -1) { 802 - close(fds[i]); 803 - socket_bitmap_put(&socket_bitmap, fds[i]); 804 - } 799 + void __mldr_close_process_lifetime_pipe(int fd) { 800 + if (fd != -1) { 801 + close(fd); 802 + socket_bitmap_put(&socket_bitmap, fd); 805 803 } 806 804 } 807 805 ··· 881 879 } 882 880 883 881 // keep our write end while closing the unused read end. 884 - lifetime_pipe[1] = -1; 885 - __mldr_close_process_lifetime_pipe(lifetime_pipe); 882 + __mldr_close_process_lifetime_pipe(lifetime_pipe[0]); 886 883 887 884 if (!lr->root_path) { 888 885 static char vchroot_buffer[4096];