]> git.cworth.org Git - tar/blobdiff - src/extract.c
upstream: Fix extraction of device nodes.
[tar] / src / extract.c
index 0d23d4ab55ec9027b45bfd5ae3dff676ef223e3f..3d3eafbcc6b9b9d30cc99796f5f994a98779b8d8 100644 (file)
@@ -777,7 +777,7 @@ extract_dir (char *file_name, int typeflag)
 
   for (;;)
     {
-      status = mkdir (file_name, mode);
+      status = mkdirat (chdir_fd, file_name, mode);
       if (status == 0)
        {
          current_mode = mode & ~ current_umask;
@@ -1191,7 +1191,7 @@ static int
 extract_node (char *file_name, int typeflag)
 {
   bool interdir_made = false;
-  mode_t mode = (current_stat_info.stat.st_mode & MODE_RWX
+  mode_t mode = (current_stat_info.stat.st_mode & (MODE_RWX | S_IFBLK | S_IFCHR)
                 & ~ (0 < same_owner_option ? S_IRWXG | S_IRWXO : 0));
 
   while (mknodat (chdir_fd, file_name, mode, current_stat_info.stat.st_rdev)