You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@trafficserver.apache.org by "zouyu (JIRA)" <ji...@apache.org> on 2014/10/30 07:01:33 UTC

[jira] [Created] (TS-3160) traffic_cop mis-closed fd before forking traffic_manager

zouyu created TS-3160:
-------------------------

             Summary: traffic_cop mis-closed fd before forking traffic_manager
                 Key: TS-3160
                 URL: https://issues.apache.org/jira/browse/TS-3160
             Project: Traffic Server
          Issue Type: Bug
          Components: Cop
            Reporter: zouyu


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   }



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)