[PATCH 1/2] fix O_CLOEXEC related build problems with kernel versions < 2.6.23

Ralf Friedl Ralf.Friedl at online.de
Wed Oct 18 10:31:39 UTC 2017


Eugene Rudoy wrote:
> Do not use O_CLOEXEC flags (available since 2.6.23),
> use close_on_exec_on provided by libbb instead (like everywhere else)
>
> Signed-off-by: Eugene Rudoy <gene.devel at gmail.com>
> ---
>   miscutils/time.c          | 6 ++++--
>   modutils/modprobe-small.c | 3 ++-
>   modutils/modutils.c       | 3 ++-
>   3 files changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/modutils/modprobe-small.c b/modutils/modprobe-small.c
> index a94b0b9a6..e782d687d 100644
> --- a/modutils/modprobe-small.c
> +++ b/modutils/modprobe-small.c
> @@ -270,8 +270,9 @@ static int load_module(const char *fname, const char *options)
>   	r = 1;
>   # ifdef __NR_finit_module
>   	{
> -		int fd = open(fname, O_RDONLY | O_CLOEXEC);
> +		int fd = open(fname, O_RDONLY);
>   		if (fd >= 0) {
> +			close_on_exec_on(fd);
>   			r = finit_module(fd, options, 0) != 0;
>   			close(fd);
>   		}
> diff --git a/modutils/modutils.c b/modutils/modutils.c
> index 6f7cd9721..9f73d676c 100644
> --- a/modutils/modutils.c
> +++ b/modutils/modutils.c
> @@ -215,8 +215,9 @@ int FAST_FUNC bb_init_module(const char *filename, const char *options)
>   	 */
>   # ifdef __NR_finit_module
>   	{
> -		int fd = open(filename, O_RDONLY | O_CLOEXEC);
> +		int fd = open(filename, O_RDONLY);
>   		if (fd >= 0) {
> +			close_on_exec_on(fd);
>   			rc = finit_module(fd, options, 0) != 0;
>   			close(fd);
>   			if (rc == 0)
What is the purpose of O_CLOEXEC here? In both cases, we try to open a 
file. If the file is opened, we use the finit_module syscall and 
immediately close the file.  Is there a danger that finit_module might 
exec something and the file needs to be closed if that happens?
Specifying O_CLOEXEC as a parameter to open just changes the value of 
the constant, although loading a large value like O_CLOEXEC needs an 
extra instruction on MIPS, but this adds an additional function call, so 
is it really needed?


More information about the busybox mailing list