Uploaded image for project: 'Traffic Server'
  1. Traffic Server
  2. TS-3160

traffic_cop mis-closed fd before forking traffic_manager

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 5.3.0
    • Cop

    Description

      In traffic_cop 'main' function, before it forks traffic_manager, it will first close stdin, stdout, and stderr and then redirect them to /dev/null.
      But when it closes the fd opened by /dev/null, it doesn't check whether the fd is 0, 1 or 2. So, in current code logic, the fd may be 1, and after close it, later opened file will uses the fd 1, and printf will corrupt that file.
      1826 if (!stdout_flag) {
      1827 close(STDIN_FILENO);
      1828 close(STDOUT_FILENO);
      1829 close(STDERR_FILENO);
      1830 if ((fd = open("/dev/null", O_WRONLY, 0)) >= 0)

      { 1831 fcntl(fd, F_DUPFD, STDIN_FILENO); 1832 fcntl(fd, F_DUPFD, STDOUT_FILENO); 1833 fcntl(fd, F_DUPFD, STDERR_FILENO); 1834 close(fd); //zouyu this doesn't check the fd value 0, 1 or 2. 1835 }

      else

      { 1836 ink_fputln(stderr, "Unable to open /dev/null"); 1837 return 0; 1838 }

      1839 }

      Attachments

        Issue Links

          Activity

            People

              amc Alan M. Carroll
              zouy zouyu
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Slack

                  Issue deployment