Skip to contentSkip to conversation

New: It should be documented that using fexecve on a file opened in O_CLOEXEC that is a script cannot possibly work.

Bug 74481 bugzilla-daemon-590EEB7GvNiWaY/[email protected] 2 participants 4 messages Apr 20, 2014 1 message not in the archive Man-pages: manual pages for Linux -- Sections 2, 3, 4, 5, and 7

lore
Share & tools
lore
#0 lore raw

https://bugzilla.kernel.org/show_bug.cgi?id=74481

Bug ID: 74481
Summary: It should be documented that using fexecve on a file
opened in O_CLOEXEC that is a script cannot possibly
work.
Product: Documentation
Version: unspecified
Hardware: All
OS: Linux
Status: NEW
Severity: normal
Priority: P1
Component: man-pages
Assignee: documentation_man-pages-ztI5WcYan/[email protected]
Reporter: [email protected]
Regression: No

Consider the following program:

#include <errno.h>
#include <fcntl.h>
#include <unistd.h>

int main()

{
    int test = open("./test.sh", O_RDONLY | O_CLOEXEC);
    if (-1 == test) {
        perror("open");
    }

    char * const argv[] = {
        (char *) "./test.sh",
        NULL
    };
    char * const env[] = { NULL };
    fexecve(test, argv, env);
    perror("fexecve");

    return 0;
}

and the following script:

#! /usr/bin/env dash

echo 'hello world!'

When the C program is run, it cannot work because by the time the interpreter has the passed in file name "/proc/self/fd/${FD}" it has already been closed. This is a strange corner case that should be documented.

Signature · 6 lines
You are receiving this mail because:
You are watching the assignee of the bug.
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

A message that is not in the archive (sent off-list or not yet received): bug-74481-11311-3bo0kxnWaOQUvHkbgXJLS5sdmw4N0Rt+2LY78lusg7I@public.gmane.org/

#2 lore raw
Quoted 44 lines · On 04/20/2014 04:36 AM, bugzilla-daemon-590EEB7GvNiWaY/ihj7yzEB+6BGkLq7r@public…

https://bugzilla.kernel.org/show_bug.cgi?id=74481

Bug ID: 74481
Summary: It should be documented that using fexecve on a file
opened in O_CLOEXEC that is a script cannot possibly
work.
Product: Documentation
Version: unspecified
Hardware: All
OS: Linux
Status: NEW
Severity: normal
Priority: P1
Component: man-pages
Assignee: documentation_man-pages-ztI5WcYan/[email protected]
Reporter: [email protected]
Regression: No

Consider the following program:

#include <errno.h>
#include <fcntl.h>
#include <unistd.h>

int main()

{
    int test = open("./test.sh", O_RDONLY | O_CLOEXEC);
    if (-1 == test) {
        perror("open");
    }

    char * const argv[] = {
        (char *) "./test.sh",
        NULL
    };
    char * const env[] = { NULL };
    fexecve(test, argv, env);
    perror("fexecve");

    return 0;
}

and the following script:

Quoted 7 lines

#! /usr/bin/env dash

echo 'hello world!'

When the C program is run, it cannot work because by the time the interpreter has the passed in file name "/proc/self/fd/${FD}" it has already been closed. This is a strange corner case that should be documented.

Agreed. I added the text below, under NOTES.

Thanks for the report, Steven.

Cheers,

Michael

If
.I fd
is a file descriptor that refers to an interpreter script and has been marked as close-on-exec (see the discussion of the .BR FD_CLOEXEC
in
.BR fcntl (2)),
.BR fexecve ()
will fail to execute the script, since,
by the time the script interpreter tries to access the script file, .I fd
has already been closed.

Signature · 7 lines
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
#3 lore raw

[Bug 74481] It should be documented that using fexecve on a file opened in O_CLOEXEC that is a script cannot possibly work.

In reply to a message not in the archive

https://bugzilla.kernel.org/show_bug.cgi?id=74481

--- Comment #1 from Michael Kerrisk <[email protected]> ---

Quoted 44 lines · On 04/20/2014 04:36 AM, bugzilla-daemon-590EEB7GvNiWaY/ihj7yzEB+6BGkLq7r@public…

https://bugzilla.kernel.org/show_bug.cgi?id=74481

Bug ID: 74481
Summary: It should be documented that using fexecve on a file
opened in O_CLOEXEC that is a script cannot possibly
work.
Product: Documentation
Version: unspecified
Hardware: All
OS: Linux
Status: NEW
Severity: normal
Priority: P1
Component: man-pages
Assignee: documentation_man-pages-ztI5WcYan/[email protected]
Reporter: [email protected]
Regression: No

Consider the following program:

#include <errno.h>
#include <fcntl.h>
#include <unistd.h>

int main()

{
    int test = open("./test.sh", O_RDONLY | O_CLOEXEC);
    if (-1 == test) {
        perror("open");
    }

    char * const argv[] = {
        (char *) "./test.sh",
        NULL
    };
    char * const env[] = { NULL };
    fexecve(test, argv, env);
    perror("fexecve");

    return 0;
}

and the following script:

Quoted 7 lines

#! /usr/bin/env dash

echo 'hello world!'

When the C program is run, it cannot work because by the time the interpreter has the passed in file name "/proc/self/fd/${FD}" it has already been closed. This is a strange corner case that should be documented.

Agreed. I added the text below, under NOTES.

Thanks for the report, Steven.

Cheers,

Michael

If
.I fd
is a file descriptor that refers to an interpreter script and has been marked as close-on-exec (see the discussion of the .BR FD_CLOEXEC
in
.BR fcntl (2)),
.BR fexecve ()
will fail to execute the script, since,
by the time the script interpreter tries to access the script file, .I fd
has already been closed.

Signature · 6 lines
You are receiving this mail because:
You are watching the assignee of the bug.
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
#4 lore raw

[Bug 74481] It should be documented that using fexecve on a file opened in O_CLOEXEC that is a script cannot possibly work.

In reply to a message not in the archive

https://bugzilla.kernel.org/show_bug.cgi?id=74481

Michael Kerrisk <[email protected]> changed:

What |Removed |Added
----------------------------------------------------------------------------

             Status|NEW                         |RESOLVED
                 CC|                            |[email protected]
         Resolution|---                         |CODE_FIX
Signature · 6 lines
You are receiving this mail because:
You are watching the assignee of the bug.
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html