@@ -729,70 +729,81 @@ int save_mns_fd(int pid, enum MountNamespaceState mns_state, struct root_impl im
729729 return -1 ;
730730 }
731731
732- int reader = sockets [0 ];
733- int writer = sockets [1 ];
732+ int socket_parent = sockets [0 ];
733+ int socket_child = sockets [1 ];
734734
735735 pid_t fork_pid = fork ();
736736 if (fork_pid < 0 ) {
737737 LOGE ("fork: %s\n" , strerror (errno ));
738738
739- if (close (reader ) == -1 ) {
740- LOGE ("Failed to close reader: %s\n" , strerror (errno ));
741- }
739+ if (close (socket_parent ) == -1 )
740+ LOGE ("Failed to close socket_parent: %s\n" , strerror (errno ));
742741
743- if (close (writer ) == -1 ) {
744- LOGE ("Failed to close writer: %s\n" , strerror (errno ));
745- }
742+ if (close (socket_child ) == -1 )
743+ LOGE ("Failed to close socket_child: %s\n" , strerror (errno ));
746744
747745 return -1 ;
748746 }
749747
750748 if (fork_pid == 0 ) {
751- close (reader );
749+ close (socket_parent );
752750
753751 if (switch_mount_namespace (pid ) == false) {
754752 LOGE ("Failed to switch mount namespace\n" );
755753
756- write_uint8_t (writer , (uint8_t )false);
754+ if (write_uint8_t (socket_child , 0 ) == -1 )
755+ LOGE ("Failed to write to socket_child: %s\n" , strerror (errno ));
757756
758- close (writer );
759-
760- _exit (1 );
757+ goto finalize_mns_fork ;
761758 }
762759
763760 if (mns_state == Clean ) {
764761 unshare (CLONE_NEWNS );
765762
766763 if (!umount_root (impl )) {
767- LOGE ("Failed to umount root" );
764+ LOGE ("Failed to umount root\n " );
768765
769- write_uint8_t (writer , false);
766+ if (write_uint8_t (socket_child , 0 ) == -1 )
767+ LOGE ("Failed to write to socket_child: %s\n" , strerror (errno ));
770768
771- close (writer );
772-
773- _exit (1 );
769+ goto finalize_mns_fork ;
774770 }
775771 }
776772
777- write_uint8_t (writer , true);
773+ if (write_uint8_t (socket_child , 1 ) == -1 ) {
774+ LOGE ("Failed to write to socket_child: %s\n" , strerror (errno ));
775+
776+ close (socket_child );
777+
778+ _exit (1 );
779+ }
778780
779- /* INFO: Just a delay for the original process to open ns mnt */
780781 uint8_t has_opened = 0 ;
781- read_uint8_t (reader , & has_opened );
782+ if (read_uint8_t (socket_child , & has_opened ) == -1 )
783+ LOGE ("Failed to read from socket_child: %s\n" , strerror (errno ));
782784
783- close (writer );
785+ finalize_mns_fork :
786+ if (close (socket_child ) == -1 )
787+ LOGE ("Failed to close socket_child: %s\n" , strerror (errno ));
784788
785- _exit (0 );
789+ _exit (0 );
786790 }
787791
788- bool has_succeeded = true;
789- read_uint8_t (reader , (uint8_t * )& has_succeeded );
792+ close (socket_child );
793+
794+ uint8_t has_succeeded = 0 ;
795+ if (read_uint8_t (socket_parent , & has_succeeded ) == -1 ) {
796+ LOGE ("Failed to read from socket_parent: %s\n" , strerror (errno ));
797+
798+ close (socket_parent );
799+
800+ return -1 ;
801+ }
790802
791803 if (!has_succeeded ) {
792- LOGE ("Failed to unmount root\n" );
804+ LOGE ("Failed to umount root\n" );
793805
794- close (reader );
795- close (writer );
806+ close (socket_parent );
796807
797808 return -1 ;
798809 }
@@ -804,22 +815,25 @@ int save_mns_fd(int pid, enum MountNamespaceState mns_state, struct root_impl im
804815 if (ns_fd == -1 ) {
805816 LOGE ("open: %s\n" , strerror (errno ));
806817
807- close (reader );
808- close (writer );
818+ close (socket_parent );
809819
810820 return -1 ;
811821 }
812822
813- write_uint8_t (writer , has_succeeded );
823+ uint8_t opened_signal = 1 ;
824+ if (write_uint8_t (socket_parent , opened_signal ) == -1 ) {
825+ LOGE ("Failed to write to socket_parent: %s\n" , strerror (errno ));
814826
815- if ( close (reader ) == -1 ) {
816- LOGE ( "Failed to close reader: %s\n" , strerror ( errno ) );
827+ close (ns_fd );
828+ close ( socket_parent );
817829
818830 return -1 ;
819831 }
820832
821- if (close (writer ) == -1 ) {
822- LOGE ("Failed to close writer: %s\n" , strerror (errno ));
833+ if (close (socket_parent ) == -1 ) {
834+ LOGE ("Failed to close socket_parent: %s\n" , strerror (errno ));
835+
836+ close (ns_fd );
823837
824838 return -1 ;
825839 }
0 commit comments