Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F145645478
D32464.id96770.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D32464.id96770.diff
View Options
diff --git a/libexec/rtld-elf/rtld.1 b/libexec/rtld-elf/rtld.1
--- a/libexec/rtld-elf/rtld.1
+++ b/libexec/rtld-elf/rtld.1
@@ -330,6 +330,7 @@
.Bd -ragged -offset indent
.Pa /libexec/ld-elf.so.1
.Op Fl b Ar exe
+.Op Fl d
.Op Fl f Ar fd
.Op Fl p
.Op Fl u
@@ -352,6 +353,8 @@
is only used to provide the
.Va argv[0]
value to the program.
+.It Fl d
+Turn off the emulation of the binary execute permission.
.It Fl f Ar fd
File descriptor
.Ar fd
@@ -403,6 +406,9 @@
and is naturally prone to race conditions.
Environments which rely on such restrictions are weak
and breakable on their own.
+It can be turned off with the
+.Fl d
+option.
.Sh VERSIONING
Newer
.Nm
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -140,7 +140,7 @@
static int open_binary_fd(const char *argv0, bool search_in_path,
const char **binpath_res);
static int parse_args(char* argv[], int argc, bool *use_pathp, int *fdp,
- const char **argv0);
+ const char **argv0, bool *dir_ignore);
static int parse_integer(const char *);
static void *path_enumerate(const char *, path_enum_proc, const char *, void *);
static void print_usage(const char *argv0);
@@ -503,7 +503,7 @@
#ifdef __powerpc__
int old_auxv_format = 1;
#endif
- bool dir_enable, direct_exec, explicit_fd, search_in_path;
+ bool dir_enable, dir_ignore, direct_exec, explicit_fd, search_in_path;
/*
* On entry, the dynamic linker itself has not been relocated yet.
@@ -589,7 +589,8 @@
dbg("opening main program in direct exec mode");
if (argc >= 2) {
- rtld_argc = parse_args(argv, argc, &search_in_path, &fd, &argv0);
+ rtld_argc = parse_args(argv, argc, &search_in_path, &fd,
+ &argv0, &dir_ignore);
explicit_fd = (fd != -1);
binpath = NULL;
if (!explicit_fd)
@@ -621,7 +622,7 @@
} else if ((st.st_mode & S_IXOTH) != 0) {
dir_enable = true;
}
- if (!dir_enable) {
+ if (!dir_enable && !dir_ignore) {
_rtld_error("No execute permission for binary %s",
argv0);
rtld_die();
@@ -5842,7 +5843,7 @@
*/
static int
parse_args(char* argv[], int argc, bool *use_pathp, int *fdp,
- const char **argv0)
+ const char **argv0, bool *dir_ignore)
{
const char *arg;
char machine[64];
@@ -5854,6 +5855,7 @@
dbg("Parsing command-line arguments");
*use_pathp = false;
*fdp = -1;
+ *dir_ignore = false;
seen_b = seen_f = false;
for (i = 1; i < argc; i++ ) {
@@ -5890,6 +5892,9 @@
*argv0 = argv[i];
seen_b = true;
break;
+ } else if (opt == 'd') {
+ *dir_ignore = true;
+ break;
} else if (opt == 'f') {
if (seen_b) {
_rtld_error("Both -b and -f specified");
@@ -5988,11 +5993,12 @@
{
rtld_printf(
- "Usage: %s [-h] [-b <exe>] [-f <FD>] [-p] [--] <binary> [<args>]\n"
+ "Usage: %s [-h] [-b <exe>] [-d] [-f <FD>] [-p] [--] <binary> [<args>]\n"
"\n"
"Options:\n"
" -h Display this help message\n"
" -b <exe> Execute <exe> instead of <binary>, arg0 is <binary>\n"
+ " -d Ignore lack of exec permissions for the binary\n"
" -f <FD> Execute <FD> instead of searching for <binary>\n"
" -p Search in PATH for named binary\n"
" -u Ignore LD_ environment variables\n"
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Feb 23, 2:31 PM (20 h, 8 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28958771
Default Alt Text
D32464.id96770.diff (3 KB)
Attached To
Mode
D32464: Fix ldd -f on shared objects
Attached
Detach File
Event Timeline
Log In to Comment