diff options
Diffstat (limited to 'winsup/cygwin/external.cc')
-rw-r--r-- | winsup/cygwin/external.cc | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/winsup/cygwin/external.cc b/winsup/cygwin/external.cc index fcb2b2159..cfe5528e5 100644 --- a/winsup/cygwin/external.cc +++ b/winsup/cygwin/external.cc @@ -268,12 +268,17 @@ cygwin_internal (cygwin_getinfo_types t, ...) } case CW_GET_POSIX_SECURITY_ATTRIBUTE: { + security_descriptor sd; int attribute = va_arg (arg, int); PSECURITY_ATTRIBUTES psa = va_arg (arg, PSECURITY_ATTRIBUTES); void *sd_buf = va_arg (arg, void *); DWORD sd_buf_size = va_arg (arg, DWORD); - set_security_attribute (attribute, psa, sd_buf, sd_buf_size); - return psa->lpSecurityDescriptor ? 0 : -1; + set_security_attribute (attribute, psa, sd); + if (!psa->lpSecurityDescriptor || sd.size () > sd_buf_size) + return sd.size (); + memcpy (sd_buf, sd, sd.size ()); + psa->lpSecurityDescriptor = sd_buf; + return 0; } case CW_GET_SHMLBA: { |