mirror of
https://gitlab.com/cryptsetup/cryptsetup.git
synced 2025-12-17 13:50:06 +01:00
Fix possible fd leaks after exec.
Thanks Natanael Copa for the report. Fixes issue#313.
This commit is contained in:
@@ -28,6 +28,10 @@
|
|||||||
#include "libcryptsetup.h"
|
#include "libcryptsetup.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
|
#ifndef O_CLOEXEC
|
||||||
|
#define O_CLOEXEC 0
|
||||||
|
#endif
|
||||||
|
|
||||||
static int random_initialised = 0;
|
static int random_initialised = 0;
|
||||||
|
|
||||||
#define URANDOM_DEVICE "/dev/urandom"
|
#define URANDOM_DEVICE "/dev/urandom"
|
||||||
@@ -152,13 +156,13 @@ int crypt_random_init(struct crypt_device *ctx)
|
|||||||
|
|
||||||
/* Used for CRYPT_RND_NORMAL */
|
/* Used for CRYPT_RND_NORMAL */
|
||||||
if(urandom_fd == -1)
|
if(urandom_fd == -1)
|
||||||
urandom_fd = open(URANDOM_DEVICE, O_RDONLY);
|
urandom_fd = open(URANDOM_DEVICE, O_RDONLY | O_CLOEXEC);
|
||||||
if(urandom_fd == -1)
|
if(urandom_fd == -1)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
/* Used for CRYPT_RND_KEY */
|
/* Used for CRYPT_RND_KEY */
|
||||||
if(random_fd == -1)
|
if(random_fd == -1)
|
||||||
random_fd = open(RANDOM_DEVICE, O_RDONLY | O_NONBLOCK);
|
random_fd = open(RANDOM_DEVICE, O_RDONLY | O_NONBLOCK | O_CLOEXEC);
|
||||||
if(random_fd == -1)
|
if(random_fd == -1)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user