Cygwin: proc fd: pass along open mode when reopening file
The reopen code neglected to pass along the requested open mode correctly. This may end up reopening the file with incorrect access mask, or duplicating the wrong pipe handle. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
7225a82c1a
commit
1f6340aa8b
|
@ -792,7 +792,7 @@ done:
|
|||
}
|
||||
|
||||
fhandler_base *
|
||||
fhandler_base::fd_reopen (int)
|
||||
fhandler_base::fd_reopen (int, mode_t)
|
||||
{
|
||||
/* This is implemented in fhandler_process only. */
|
||||
return NULL;
|
||||
|
|
|
@ -331,7 +331,7 @@ class fhandler_base
|
|||
int open_with_arch (int, mode_t = 0);
|
||||
int open_null (int flags);
|
||||
virtual int open (int, mode_t);
|
||||
virtual fhandler_base *fd_reopen (int);
|
||||
virtual fhandler_base *fd_reopen (int, mode_t);
|
||||
virtual void open_setup (int flags);
|
||||
void set_unique_id (int64_t u) { unique_id = u; }
|
||||
void set_unique_id () { NtAllocateLocallyUniqueId ((PLUID) &unique_id); }
|
||||
|
@ -2587,7 +2587,7 @@ class fhandler_process_fd : public fhandler_process
|
|||
fhandler_process_fd () : fhandler_process () {}
|
||||
fhandler_process_fd (void *) {}
|
||||
|
||||
virtual fhandler_base *fd_reopen (int);
|
||||
virtual fhandler_base *fd_reopen (int, mode_t);
|
||||
int __reg2 fstat (struct stat *buf);
|
||||
virtual int __reg2 link (const char *);
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@ fhandler_process_fd::fetch_fh (HANDLE &out_hdl, uint32_t flags)
|
|||
}
|
||||
|
||||
fhandler_base *
|
||||
fhandler_process_fd::fd_reopen (int flags)
|
||||
fhandler_process_fd::fd_reopen (int flags, mode_t mode)
|
||||
{
|
||||
fhandler_base *fh;
|
||||
HANDLE hdl;
|
||||
|
@ -106,7 +106,7 @@ fhandler_process_fd::fd_reopen (int flags)
|
|||
if (!fh)
|
||||
return NULL;
|
||||
fh->set_io_handle (hdl);
|
||||
int ret = fh->open_with_arch (flags, 0);
|
||||
int ret = fh->open_with_arch (flags, mode);
|
||||
CloseHandle (hdl);
|
||||
if (!ret)
|
||||
{
|
||||
|
|
|
@ -1507,7 +1507,7 @@ open (const char *unix_path, int flags, ...)
|
|||
if (fh->dev () == FH_PROCESSFD && fh->pc.follow_fd_symlink ())
|
||||
{
|
||||
/* Reopen file by descriptor */
|
||||
fh_file = fh->fd_reopen (flags);
|
||||
fh_file = fh->fd_reopen (flags, mode & 07777);
|
||||
if (!fh_file)
|
||||
__leave;
|
||||
delete fh;
|
||||
|
|
Loading…
Reference in New Issue