[stgt] [PATCH 09/15] Fix tgtd startup
FUJITA Tomonori
fujita.tomonori at lab.ntt.co.jp
Fri Jun 12 04:35:50 CEST 2009
On Tue, 09 Jun 2009 18:22:30 +0200
Arne Redlich <arne.redlich at googlemail.com> wrote:
> tgtd was deamonized and forked the logger daemon quite late during startup,
> leading to the logger getting ahold of resources (IPC fd) it should not
> have.
>
> This also fixes the working dir and closes the std{in,out,err} file descriptors of
> the logger daemon.
daemon() could simplify this part?
> Signed-off-by: Arne Redlich <arne.redlich at googlemail.com>
> ---
> usr/log.c | 20 ++++++++++++++++++++
> usr/tgtd.c | 28 ++++++++++++++--------------
> 2 files changed, 34 insertions(+), 14 deletions(-)
>
> diff --git a/usr/log.c b/usr/log.c
> index 056314a..cf7e905 100644
> --- a/usr/log.c
> +++ b/usr/log.c
> @@ -17,6 +17,7 @@
> * 02110-1301 USA
> */
> #include <ctype.h>
> +#include <fcntl.h>
> #include <string.h>
> #include <stdarg.h>
> #include <stdio.h>
> @@ -27,6 +28,7 @@
> #include <errno.h>
> #include <sys/shm.h>
> #include <sys/ipc.h>
> +#include <sys/stat.h>
> #include <sys/types.h>
> #include <sys/wait.h>
>
> @@ -340,6 +342,7 @@ int log_init(char *program_name, int size, int daemon, int debug)
> if (daemon) {
> struct sigaction sa_old;
> struct sigaction sa_new;
> + int fd;
>
> openlog(log_name, 0, LOG_DAEMON);
> setlogmask (LOG_UPTO (LOG_DEBUG));
> @@ -360,6 +363,23 @@ int log_init(char *program_name, int size, int daemon, int debug)
> return 0;
> }
>
> + fd = open("/dev/null", O_RDWR);
> + if (fd < 0) {
> + syslog(LOG_ERR, "failed to open /dev/null: %s\n",
> + strerror(errno));
> + exit(1);
> + }
> +
> + dup2(fd, 0);
> + dup2(fd, 1);
> + dup2(fd, 2);
> + setsid();
> + if (chdir("/") < 0) {
> + syslog(LOG_ERR, "failed to chdir to '/': %s\n",
> + strerror(errno));
> + exit(1);
> + }
> +
> /* flush on daemon's crash */
> sa_new.sa_handler = (void*)log_flush;
> sigemptyset(&sa_new.sa_mask);
> diff --git a/usr/tgtd.c b/usr/tgtd.c
> index 945be31..3e0d400 100644
> --- a/usr/tgtd.c
> +++ b/usr/tgtd.c
> @@ -348,19 +348,7 @@ int main(int argc, char **argv)
> }
> }
>
> - ep_fd = epoll_create(4096);
> - if (ep_fd < 0) {
> - fprintf(stderr, "can't create epoll fd, %m\n");
> - exit(1);
> - }
> -
> - nr_lld = lld_init(&use_kernel, argv[optind]);
> - if (!nr_lld) {
> - fprintf(stderr, "No available low level driver!\n");
> - exit(1);
> - }
> -
> - err = ipc_init();
> + err = log_init(program_name, LOG_SPACE_SIZE, is_daemon, is_debug);
> if (err)
> exit(1);
>
> @@ -375,7 +363,19 @@ int main(int argc, char **argv)
> if (err)
> exit(1);
>
> - err = log_init(program_name, LOG_SPACE_SIZE, is_daemon, is_debug);
> + ep_fd = epoll_create(4096);
> + if (ep_fd < 0) {
> + fprintf(stderr, "can't create epoll fd, %m\n");
> + exit(1);
> + }
> +
> + nr_lld = lld_init(&use_kernel, argv[optind]);
> + if (!nr_lld) {
> + fprintf(stderr, "No available low level driver!\n");
> + exit(1);
> + }
> +
> + err = ipc_init();
> if (err)
> exit(1);
>
> --
> 1.6.0.4
>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe stgt" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
More information about the stgt
mailing list