Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2005-06-07 23:31:42 +0400
committerCorinna Vinschen <corinna@vinschen.de>2005-06-07 23:31:42 +0400
commit7311cc1f0c7f6f2ee26240c88698d61ed4749853 (patch)
treed13b088ae2c6fc1f9a260de6765d0fb0b4c9226d /winsup/cygwin
parentb739751db982170d8e10caa720e5c6a5a1918f37 (diff)
* pinfo.cc (pinfo::init): Define sa_buf as PSECURITY_ATTRIBUTES and
allocate dynamically. (pinfo::set_acl): Replace sa_buf by dynamically allocated acl_buf. * sec_acl.cc (setacl): Allocate acl dynamically. * sec_helper.cc (sec_acl): Add test for alignment of acl when DEBUGGING is defined. (__sec_user): Same for sa_buf. * security.cc (verify_token): Define sd_buf as PSECURITY_DESCRIPTOR and allocate dynamically. (alloc_sd): Allocate acl dynamically. security.h (sec_user_nih): Change first parameter to SECURITY_ATTRIBUTES *. (sec_user): Ditto. * sigproc.cc (wait_sig): Define sa_buf as PSECURITY_ATTRIBUTES and allocate dynamically. * syscalls.cc (seteuid32): Define dacl_buf as PACL and allocate dynamically. * uinfo.cc (cygheap_user::init): Define sa_buf as PSECURITY_ATTRIBUTES and allocate dynamically. * winbase.h (ilockincr): Mark first argument of inline assembly as earlyclobber. (ilockdecr): Ditto.
Diffstat (limited to 'winsup/cygwin')
-rw-r--r--winsup/cygwin/ChangeLog25
-rw-r--r--winsup/cygwin/pinfo.cc8
-rw-r--r--winsup/cygwin/sec_acl.cc3
-rw-r--r--winsup/cygwin/sec_helper.cc11
-rw-r--r--winsup/cygwin/security.cc13
-rw-r--r--winsup/cygwin/security.h6
-rw-r--r--winsup/cygwin/sigproc.cc2
-rw-r--r--winsup/cygwin/syscalls.cc6
-rw-r--r--winsup/cygwin/uinfo.cc2
-rw-r--r--winsup/cygwin/winbase.h4
10 files changed, 57 insertions, 23 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 16a2307d5..90bbd2144 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,28 @@
+2005-06-06 Corinna Vinschen <corinna@vinschen.de>
+
+ * pinfo.cc (pinfo::init): Define sa_buf as PSECURITY_ATTRIBUTES and
+ allocate dynamically.
+ (pinfo::set_acl): Replace sa_buf by dynamically allocated acl_buf.
+ * sec_acl.cc (setacl): Allocate acl dynamically.
+ * sec_helper.cc (sec_acl): Add test for alignment of acl when
+ DEBUGGING is defined.
+ (__sec_user): Same for sa_buf.
+ * security.cc (verify_token): Define sd_buf as PSECURITY_DESCRIPTOR
+ and allocate dynamically.
+ (alloc_sd): Allocate acl dynamically.
+ security.h (sec_user_nih): Change first parameter to
+ SECURITY_ATTRIBUTES *.
+ (sec_user): Ditto.
+ * sigproc.cc (wait_sig): Define sa_buf as PSECURITY_ATTRIBUTES and
+ allocate dynamically.
+ * syscalls.cc (seteuid32): Define dacl_buf as PACL and allocate
+ dynamically.
+ * uinfo.cc (cygheap_user::init): Define sa_buf as PSECURITY_ATTRIBUTES
+ and allocate dynamically.
+ * winbase.h (ilockincr): Mark first argument of inline assembly as
+ earlyclobber.
+ (ilockdecr): Ditto.
+
2005-06-07 Christopher Faylor <cgf@timesys.com>
* cygthread.cc (cygthread::detach): Make error message a little more
diff --git a/winsup/cygwin/pinfo.cc b/winsup/cygwin/pinfo.cc
index 9a819ec39..b4a9f0bcd 100644
--- a/winsup/cygwin/pinfo.cc
+++ b/winsup/cygwin/pinfo.cc
@@ -199,7 +199,7 @@ pinfo::init (pid_t n, DWORD flag, HANDLE h0)
}
procinfo = NULL;
- char sa_buf[1024];
+ PSECURITY_ATTRIBUTES sa_buf = (PSECURITY_ATTRIBUTES) alloca (1024);
PSECURITY_ATTRIBUTES sec_attribs = sec_user_nih (sa_buf, cygheap->user.sid(),
well_known_world_sid,
FILE_MAP_READ);
@@ -307,14 +307,14 @@ pinfo::init (pid_t n, DWORD flag, HANDLE h0)
void
pinfo::set_acl()
{
- char sa_buf[1024];
+ PACL acl_buf = (PACL) alloca (1024);
SECURITY_DESCRIPTOR sd;
- sec_acl ((PACL) sa_buf, true, true, cygheap->user.sid (),
+ sec_acl (acl_buf, true, true, cygheap->user.sid (),
well_known_world_sid, FILE_MAP_READ);
if (!InitializeSecurityDescriptor (&sd, SECURITY_DESCRIPTOR_REVISION))
debug_printf ("InitializeSecurityDescriptor %E");
- else if (!SetSecurityDescriptorDacl (&sd, TRUE, (PACL) sa_buf, FALSE))
+ else if (!SetSecurityDescriptorDacl (&sd, TRUE, acl_buf, FALSE))
debug_printf ("SetSecurityDescriptorDacl %E");
else if (!SetKernelObjectSecurity (h, DACL_SECURITY_INFORMATION, &sd))
debug_printf ("SetKernelObjectSecurity %E");
diff --git a/winsup/cygwin/sec_acl.cc b/winsup/cygwin/sec_acl.cc
index 70c6c3c23..0c198dc25 100644
--- a/winsup/cygwin/sec_acl.cc
+++ b/winsup/cygwin/sec_acl.cc
@@ -94,8 +94,7 @@ setacl (HANDLE handle, const char *file, int nentries, __aclent32_t *aclbufp)
}
/* Fill access control list. */
- char acl_buf[3072];
- PACL acl = (PACL) acl_buf;
+ PACL acl = (PACL) alloca (3072);
size_t acl_len = sizeof (ACL);
int ace_off = 0;
diff --git a/winsup/cygwin/sec_helper.cc b/winsup/cygwin/sec_helper.cc
index 3aa3b9d1d..5bfa9d4cd 100644
--- a/winsup/cygwin/sec_helper.cc
+++ b/winsup/cygwin/sec_helper.cc
@@ -489,6 +489,10 @@ sec_acl (PACL acl, bool original, bool admins, PSID sid1, PSID sid2, DWORD acces
LPVOID pAce;
cygpsid psid;
+#ifdef DEBUGGING
+ if ((unsigned long) acl % 4)
+ api_fatal ("Incorrectly aligned incoming ACL buffer!");
+#endif
if (!InitializeAcl (acl, acl_len, ACL_REVISION))
{
debug_printf ("InitializeAcl %E");
@@ -531,7 +535,12 @@ __sec_user (PVOID sa_buf, PSID sid1, PSID sid2, DWORD access2, BOOL inherit)
((char *) sa_buf + sizeof (*psa));
PACL acl = (PACL) ((char *) sa_buf + sizeof (*psa) + sizeof (*psd));
- if (!wincap.has_security () || !sec_acl (acl, true, true, sid1, sid2, access2))
+#ifdef DEBUGGING
+ if ((unsigned long) sa_buf % 4)
+ api_fatal ("Incorrectly aligned incoming SA buffer!");
+#endif
+ if (!wincap.has_security ()
+ || !sec_acl (acl, true, true, sid1, sid2, access2))
return inherit ? &sec_none : &sec_none_nih;
if (!InitializeSecurityDescriptor (psd, SECURITY_DESCRIPTOR_REVISION))
diff --git a/winsup/cygwin/security.cc b/winsup/cygwin/security.cc
index 5d7930c38..aa961c90c 100644
--- a/winsup/cygwin/security.cc
+++ b/winsup/cygwin/security.cc
@@ -772,14 +772,14 @@ verify_token (HANDLE token, cygsid &usersid, user_groups &groups, bool *pintern)
is not well_known_null_sid, it must match pgrpsid */
if (intern && !groups.issetgroups ())
{
- char sd_buf[MAX_SID_LEN + sizeof (SECURITY_DESCRIPTOR)];
+ const DWORD sd_buf_siz = MAX_SID_LEN + sizeof (SECURITY_DESCRIPTOR);
+ PSECURITY_DESCRIPTOR sd_buf = (PSECURITY_DESCRIPTOR) alloca (sd_buf_siz);
cygpsid gsid (NO_SID);
if (!GetKernelObjectSecurity (token, GROUP_SECURITY_INFORMATION,
- (PSECURITY_DESCRIPTOR) sd_buf,
- sizeof sd_buf, &size))
+ sd_buf, sd_buf_siz, &size))
debug_printf ("GetKernelObjectSecurity(), %E");
- else if (!GetSecurityDescriptorGroup ((PSECURITY_DESCRIPTOR) sd_buf,
- (PSID *) &gsid, (BOOL *) &size))
+ else if (!GetSecurityDescriptorGroup (sd_buf, (PSID *) &gsid,
+ (BOOL *) &size))
debug_printf ("GetSecurityDescriptorGroup(), %E");
if (well_known_null_sid != gsid)
return gsid == groups.pgsid;
@@ -1538,8 +1538,7 @@ alloc_sd (__uid32_t uid, __gid32_t gid, int attribute,
}
/* Initialize local access control list. */
- char acl_buf[3072];
- PACL acl = (PACL) acl_buf;
+ PACL acl = (PACL) alloca (3072);
if (!InitializeAcl (acl, 3072, ACL_REVISION))
{
__seterrno ();
diff --git a/winsup/cygwin/security.h b/winsup/cygwin/security.h
index 292139263..89870982e 100644
--- a/winsup/cygwin/security.h
+++ b/winsup/cygwin/security.h
@@ -382,13 +382,15 @@ int __stdcall NTReadEA (const char *file, const char *attrname, char *buf, int l
BOOL __stdcall NTWriteEA (const char *file, const char *attrname, const char *buf, int len);
extern inline SECURITY_ATTRIBUTES *
-sec_user_nih (char sa_buf[], PSID sid1 = NULL, PSID sid2 = NULL, DWORD access2 = 0)
+sec_user_nih (SECURITY_ATTRIBUTES *sa_buf, PSID sid1 = NULL, PSID sid2 = NULL,
+ DWORD access2 = 0)
{
return __sec_user (sa_buf, sid1, sid2, access2, FALSE);
}
extern inline SECURITY_ATTRIBUTES *
-sec_user (char sa_buf[], PSID sid1 = NULL, PSID sid2 = NULL, DWORD access2 = 0)
+sec_user (SECURITY_ATTRIBUTES *sa_buf, PSID sid1 = NULL, PSID sid2 = NULL,
+ DWORD access2 = 0)
{
return __sec_user (sa_buf, sid1, sid2, access2, TRUE);
}
diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc
index 46ef79e39..3e3b519dd 100644
--- a/winsup/cygwin/sigproc.cc
+++ b/winsup/cygwin/sigproc.cc
@@ -998,7 +998,7 @@ static DWORD WINAPI
wait_sig (VOID *self)
{
HANDLE readsig;
- char sa_buf[1024];
+ PSECURITY_ATTRIBUTES sa_buf = (PSECURITY_ATTRIBUTES) alloca (1024);
Static bool holding_signals;
/* Initialization */
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
index c67bc3799..e655d3684 100644
--- a/winsup/cygwin/syscalls.cc
+++ b/winsup/cygwin/syscalls.cc
@@ -2053,10 +2053,10 @@ seteuid32 (__uid32_t uid)
&groups.pgsid, sizeof (cygsid)))
debug_printf ("SetTokenInformation(user.token, TokenPrimaryGroup), %E");
/* Try setting default DACL */
- char dacl_buf[MAX_DACL_LEN (5)];
- if (sec_acl ((PACL) dacl_buf, true, true, usersid))
+ PACL dacl_buf = (PACL) alloca (MAX_DACL_LEN (5));
+ if (sec_acl (dacl_buf, true, true, usersid))
{
- TOKEN_DEFAULT_DACL tdacl = { (PACL) dacl_buf };
+ TOKEN_DEFAULT_DACL tdacl = { dacl_buf };
if (!SetTokenInformation (new_token, TokenDefaultDacl,
&tdacl, sizeof (tdacl)))
debug_printf ("SetTokenInformation (TokenDefaultDacl), %E");
diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc
index 894132658..55b6b6c5d 100644
--- a/winsup/cygwin/uinfo.cc
+++ b/winsup/cygwin/uinfo.cc
@@ -65,7 +65,7 @@ cygheap_user::init ()
debug_printf ("SetTokenInformation(TokenOwner), %E");
/* Standard way to build a security descriptor with the usual DACL */
- char sa_buf[1024];
+ PSECURITY_ATTRIBUTES sa_buf = (PSECURITY_ATTRIBUTES) alloca (1024);
psd = (PSECURITY_DESCRIPTOR)
(sec_user_nih (sa_buf, sid()))->lpSecurityDescriptor;
diff --git a/winsup/cygwin/winbase.h b/winsup/cygwin/winbase.h
index 177de7aef..8e2ea99d5 100644
--- a/winsup/cygwin/winbase.h
+++ b/winsup/cygwin/winbase.h
@@ -19,7 +19,7 @@ ilockincr (long *m)
movl $1,%0\n\
lock xadd %0,%1\n\
inc %0\n\
- ": "=r" (__res), "=m" (*m): "m" (*m): "cc");
+ ": "=&r" (__res), "=m" (*m): "m" (*m): "cc");
return __res;
}
@@ -31,7 +31,7 @@ ilockdecr (long *m)
movl $0xffffffff,%0\n\
lock xadd %0,%1\n\
dec %0\n\
- ": "=r" (__res), "=m" (*m): "m" (*m): "cc");
+ ": "=&r" (__res), "=m" (*m): "m" (*m): "cc");
return __res;
}