Project

General

Profile

Bug #623 ยป fix-sigbus-race.patch

Mathieu Desnoyers, 11/06/2013 07:16 AM

View differences:

src/bin/lttng-sessiond/shm.c
/* Default permissions */
mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP;
/* Change owner of the shm path */
/*
* Change owner of the shm path.
*/
if (global) {
ret = chown(shm_path, 0, 0);
if (ret < 0) {
if (errno != ENOENT) {
PERROR("chown wait shm");
goto error;
}
}
/*
* If global session daemon, any application can register so the shm
* needs to be set in read-only mode for others.
* If global session daemon, any application can
* register. Make it initially writeable so applications
* registering concurrently can do ftruncate() by
* themselves.
*/
mode |= S_IROTH;
} else {
ret = chown(shm_path, getuid(), getgid());
if (ret < 0) {
if (errno != ENOENT) {
PERROR("chown wait shm");
goto error;
}
}
}
/*
* Set permissions to the shm even if we did not create the shm.
*/
ret = chmod(shm_path, mode);
if (ret < 0) {
if (errno != ENOENT) {
PERROR("chmod wait shm");
goto error;
}
mode |= S_IROTH | S_IWOTH;
}
/*
......
}
#ifndef __FreeBSD__
ret = fchmod(wait_shm_fd, mode);
if (ret < 0) {
PERROR("fchmod");
exit(EXIT_FAILURE);
if (global) {
ret = fchown(wait_shm_fd, 0, 0);
if (ret < 0) {
PERROR("fchown");
exit(EXIT_FAILURE);
}
/*
* If global session daemon, any application can
* register so the shm needs to be set in read-only mode
* for others.
*/
mode &= ~S_IWOTH;
ret = fchmod(wait_shm_fd, mode);
if (ret < 0) {
PERROR("fchmod");
exit(EXIT_FAILURE);
}
} else {
ret = fchown(wait_shm_fd, getuid(), getgid());
if (ret < 0) {
PERROR("fchown");
exit(EXIT_FAILURE);
}
}
#else
#warning "FreeBSD does not support setting file mode on shm FD. Remember that for secure use, lttng-sessiond should be started before applications linked on lttng-ust."
#warning "FreeBSD does not support setting file mode on shm FD."
#endif
DBG("Got the wait shm fd %d", wait_shm_fd);
    (1-1/1)