* pinfo.h (winpids::pid_access): New element.
(winpids::winpids): Rejigger to set pinfo_access. * pinfo.cc (winpids::add): Try to open shared memory region with supplied pinfo_access first, then default to readonly. * fhandler_termios.cc (tty_min::kill_pgrp): When getting list of pids to work with, suggest opening with PID_MAP_RW. * signal.cc (kill_pgrp): Ditto. * sigproc.cc (sig_send): Perform a write check on todo prior to attempting to increment it. Return EACCES if we can't write to it.
This commit is contained in:
@@ -197,6 +197,7 @@ class winpids
|
||||
DWORD *pidlist;
|
||||
DWORD npidlist;
|
||||
pinfo *pinfolist;
|
||||
DWORD pinfo_access; // access type for pinfo open
|
||||
DWORD (winpids::* enum_processes) (bool winpid);
|
||||
DWORD enum_init (bool winpid);
|
||||
DWORD enumNT (bool winpid);
|
||||
@@ -207,9 +208,14 @@ public:
|
||||
DWORD npids;
|
||||
inline void reset () { npids = 0; release (); }
|
||||
void set (bool winpid);
|
||||
winpids (int): enum_processes (&winpids::enum_init) { reset (); }
|
||||
winpids (): pidlist (NULL), npidlist (0), pinfolist (NULL),
|
||||
enum_processes (&winpids::enum_init), npids (0) { set (0); }
|
||||
winpids (int): pinfo_access (0), enum_processes (&winpids::enum_init)
|
||||
{ reset (); }
|
||||
winpids (DWORD acc = 0): pidlist (NULL), npidlist (0), pinfolist (NULL),
|
||||
enum_processes (&winpids::enum_init), npids (0)
|
||||
{
|
||||
pinfo_access = acc;
|
||||
set (0);
|
||||
}
|
||||
inline DWORD& winpid (int i) const {return pidlist[i];}
|
||||
inline _pinfo *operator [] (int i) const {return (_pinfo *) pinfolist[i];}
|
||||
~winpids ();
|
||||
|
Reference in New Issue
Block a user