In the words of the submitter:
In libc_r, if _FDLOCKS_ENABLED is not defined, there is no guarantee in many of the sycall wrappers that _thread_fd_table[fd] is initialized. This causes problems for programs that pass in file descriptors and execve() another program; when the exec'ed program tries to do an fcntl() or other syscall on the passed-in fd, it fails. Add calls to initialize the FD table entry for _thread_fd_lock and _thread_fd_lock_debug. Submitted by: Peter S. Housel <housel@acm.org>
This commit is contained in:
parent
18c0fc80c5
commit
359955a195
@ -1005,7 +1005,11 @@ _thread_fd_unlock(int fd, int lock_type)
|
||||
int
|
||||
_thread_fd_lock(int fd, int lock_type, struct timespec * timeout)
|
||||
{
|
||||
return (0);
|
||||
/*
|
||||
* Insure that the file descriptor table is initialized for this
|
||||
* entry:
|
||||
*/
|
||||
return (_thread_fd_table_init(fd));
|
||||
}
|
||||
|
||||
void
|
||||
@ -1017,7 +1021,11 @@ int
|
||||
_thread_fd_lock_debug(int fd, int lock_type, struct timespec * timeout,
|
||||
char *fname, int lineno)
|
||||
{
|
||||
return (0);
|
||||
/*
|
||||
* Insure that the file descriptor table is initialized for this
|
||||
* entry:
|
||||
*/
|
||||
return (_thread_fd_table_init(fd));
|
||||
}
|
||||
|
||||
void
|
||||
|
Loading…
Reference in New Issue
Block a user