[
https://issues.apache.org/jira/browse/TS-3160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14590106#comment-14590106
]
ASF GitHub Bot commented on TS-3160:
------------------------------------
Github user asfgit closed the pull request at:
https://github.com/apache/trafficserver/pull/135
> 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
> Assignee: Alan M. Carroll
> Labels: review
> Fix For: 5.3.0
>
>
> 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)