Looks good! Thanks, /Staffan
On 22 sep 2014, at 10:54, Sergey Gabdurakhmanov <sergey.gabdurakhma...@oracle.com> wrote: > Hi, > > I changed comment at line 265 and reduce line length. > http://cr.openjdk.java.net/~sgabdura/8057564/webrev.04/ > > BR, > Sergey > > On 22.09.2014 12:43, Markus Grönlund wrote: >> Looks good. >> >> Minor nit: >> >> 265: // That will allow to connect to VM with Medium Integrity Level from VM >> with High Integrity Level. >> >> It's actually the other way around - the server creates the NamedPipe (at >> High Integrity Level) and the clients running in Medium Integrity Level >> attempt to connect. Therefore the NamedPipe must be created at Medium >> Integrity Level (which is the default when passing an explicit SD to the >> CreateNamedPipe call). You could change this to: >> >> 265: // In order to allow Medium Integrity Level clients to open and use a >> NamedPipe created by an High Integrity Level process. >> >> >> Thanks for fixing. >> >> You will also need a (R)eviewer for this as well, copying Staffan here as >> well. >> >> Thanks >> Markus >> >> >> -----Original Message----- >> From: Sergey Gabdurakhmanov >> Sent: den 22 september 2014 10:31 >> To: Markus Grönlund; Alexey Utkin; serviceability-dev@openjdk.java.net; >> SAMERSOFF,DMITRIY >> Cc: Mattis Castegren; Christian Tornqvist >> Subject: Re: URGENT: RE: RFR(XS): 8057564: JVM hangs at getAgentProperties >> after attaching to VM with lower IntegrityLevel >> >> Hi, >> >> This is new version of the patch. I hope last one. >> http://cr.openjdk.java.net/~sgabdura/8057564/webrev.03/ >> >> I also spent time on Sunday with that issue. I tried to find another >> solution, but did not succeed. >> All my attempts of applying of modified Security Descriptor to existing >> Named Pipe failed with error "Access denied" >> >> BR, >> Sergey >> >> On 22.09.2014 0:30, Markus Grönlund wrote: >>> Hi again Sergey, >>> >>> I have spent some time in an attempt to figure out how we could accomplish >>> this - I must say it has been quite frustrating. >>> >>> I was hoping we could only update the pSacl info with the >>> SYSTEM_MANDATORY_LABEL_ACE field set to Medium. This is not >>> straightforward. I have also tried to accomplish this by Windows >>> impersonation, and updating the impersonation token - this works, but it >>> requires quite a lot of infrastructure. In addition, if the thread is >>> already impersonating, we need to restore the original token - and by >>> setting the IntegrityLevel to Medium for the impersonation token one looses >>> the SeImpersonatePrivilege which means I cannot do SetThreadToken() again >>> for the original impersonation...messy. >>> >>> I then thought about using SDDL just as you have done, but only updating >>> the Sacl info using SetSecurityInfo on the already created named pipe. This >>> works, but it seems this triggered another issue (manifests as still >>> hanging) - even though the integrity level is now set to Medium, the client >>> have problem connecting (looks like this also requires easing up on the >>> actual Discretionary ACL (just as you have done). >>> >>> So I ended up circling back to what you have in your second patch - if we >>> are going to solve this proper, we need to spend quite a lot of time on it. >>> >>> I initially thought we should also state the Mandatory Label information in >>> the SDDL, mainly for readability and rational purposes like: >>> >>> TCHAR *szSD = TEXT("D:") // Discretionary ACL >>> TEXT("(A;OICI;GRGW;;;WD)") // Allow read/write/execute >>> to everybody >>> TEXT("(A;OICI;GA;;;SY)") // Allow full control to >>> system >>> TEXT("(A;OICI;GA;;;BA)") // Allow full control to >>> administrators >>> TEXT("S:") // System ACL >>> TEXT("(ML;;NW;;;ME)"); // Mandatory Integrity >>> Label, No-WriteUp Policy, Medium Mandatory Level >>> >>> However, after some thought I changed my mind on this: >>> >>> Only Vista and later support the Mandatory Integrity Label, and if we >>> include it we need to check conditionally. Somehow, the default when >>> creating a securable object with you own Security Descriptor (instead of >>> inheriting either the primary process or impersonation token) is that you >>> default to Medium Mandatory Level (I don’t know if this just luck, but it >>> seems to be that way, even for High Level process tokens). >>> >>> So to avoid conditional checks I suggest not including this: >>> >>> ("S:") // System ACL >>> TEXT("(ML;;NW;;;ME)"); // Mandatory Integrity >>> Label, No-WriteUp Policy, Medium Mandatory Level >>> >>> Which is also what you already have in your patch. >>> >>> Maybe you could include a comment about the assumption that we expect to >>> "get" Medium Mandatory Level by creating our own Security Descriptor? That >>> way we can keep track of the rationale, and if MSFT changes this. >>> >>> I then just have one additional comment/change request: >>> >>> 291: LocalFree(&(sa.lpSecurityDescriptor)); >>> >>> This should be: >>> >>> 291: LocalFree(sa.lpSecurityDescriptor); >>> >>> >>> With that change and some comment to the Medium Mandatory Level I am ok >>> with your suggestion. >>> >>> Thanks a lot for fixing this. >>> >>> Many thanks >>> Markus >>> >>> >>> >>> -----Original Message----- >>> From: Markus Grönlund >>> Sent: den 19 september 2014 14:46 >>> To: Sergey Gabdurakhmanov >>> Cc: Alexey Utkin; serviceability-dev@openjdk.java.net >>> Subject: RE: URGENT: RE: RFR(XS): 8057564: JVM hangs at >>> getAgentProperties after attaching to VM with lower IntegrityLevel >>> >>> Hi Sergey, >>> >>> This is not exactly what I had in mind - we have updated the DACL to >>> provide some explicit security (from a NULL DACL which allows everyone >>> everything), so that’s good. But.. >>> >>> I was hoping we could just keep the default security for the DACL (no need >>> to change this, pass a NULL to CreateNamedPipe() is fine (will inherit >>> process token)). >>> >>> Then we should just focus on manipulating the SidStart field in the >>> SYSTEM_MANDATORY_LABEL_ACE structure in the SACL (not the DACL). >>> >>> Maybe you tried this already? >>> >>> Cheers >>> Markus >>> >>> >>> -----Original Message----- >>> From: Sergey Gabdurakhmanov >>> Sent: den 19 september 2014 14:34 >>> To: Mattis Castegren; serviceability-dev@openjdk.java.net; Markus >>> Grönlund; Staffan Larsen; Christian Törnqvist; Markus Grönlund; Alexey >>> Utkin; Dmitry Samersoff >>> Subject: Re: URGENT: RE: RFR(XS): 8057564: JVM hangs at >>> getAgentProperties after attaching to VM with lower IntegrityLevel >>> >>> Hi, >>> >>> New version of the fix for review: >>> http://cr.openjdk.java.net/~sgabdura/8057564/webrev.02/ >>> >>> Now I add security descriptor with read/write permissions to everybody and >>> full control to system and administrators. >>> >>> BR, >>> Sergey >>> >>> On 17.09.2014 18:03, Mattis Castegren wrote: >>>> Also adding Christian, who is both a reviewer AND knows windows. >>>> >>>> This is a very critical customer bug, and we have a hard deadline of next >>>> week. >>>> >>>> Kind Regards >>>> /Mattis >>>> >>>> -----Original Message----- >>>> From: Mattis Castegren >>>> Sent: den 17 september 2014 07:08 >>>> To: Sergey Gabdurakhmanov; serviceability-dev@openjdk.java.net; >>>> Markus Grönlund; Staffan Larsen >>>> Cc: Mattis Castegren >>>> Subject: RE: RFR(XS): 8057564: JVM hangs at getAgentProperties after >>>> attaching to VM with lower IntegrityLevel >>>> >>>> Hi >>>> >>>> This is urgent for a customer case, so we would need the second review. >>>> Dmitry was ok with the fix. Sergey, you also got some additional review >>>> from someone who was not an official reviewer, right? Could you paste >>>> those comments? >>>> >>>> If no one on this alias feels comfortable with reviewing this fix, any >>>> ideas on someone else who can do it and who is has reviewer status? Maybe >>>> someone from another team with a lot of Windows experience? >>>> >>>> Kind Regards >>>> /Mattis >>>> >>>> -----Original Message----- >>>> From: Sergey Gabdurakhmanov >>>> Sent: den 16 september 2014 12:56 >>>> To: serviceability-dev@openjdk.java.net >>>> Subject: Re: RFR(XS): 8057564: JVM hangs at getAgentProperties after >>>> attaching to VM with lower IntegrityLevel >>>> >>>> Hi, >>>> >>>> I need a second approval for the fix integration. >>>> Can somebody else review the patch? >>>> >>>> BR, >>>> Sergey >>>> >>>> On 12.09.2014 17:34, Dmitry Samersoff wrote: >>>>> Sergey, >>>>> >>>>> Looks good for me. >>>>> >>>>> -Dmitry >>>>> >>>>> >>>>> On 2014-09-12 12:46, Sergey Gabdurakhmanov wrote: >>>>>> Dmitry, >>>>>> >>>>>> New patch: >>>>>> http://cr.openjdk.java.net/~sgabdura/8057564/webrev.01/ >>>>>> >>>>>> >>>>>> My answers: >>>>>> >>>>>> 1. You should not free lpSecurityDescriptor if it's null (ll.291) >>>>>> >>>>>> I checked MSDN >>>>>> http://msdn.microsoft.com/en-us/library/windows/desktop/aa366730%28 >>>>>> v =vs.85%29.aspx "If the /hMem/ parameter is *NULL*, *LocalFree* >>>>>> ignores the parameter and returns *NULL*." >>>>>> >>>>>> 2. It's better to re-arrange code a bit: >>>>>> >>>>>> if InitializeSecurityDescriptor or SetSecurityDescriptorDacl fails, >>>>>> free lpSecurityDescriptor immediately and continue with >>>>>> lpSecurityDescriptor == NULL >>>>>> >>>>>> Done. >>>>>> >>>>>> >>>>>> 3. Make sure it works on all supported platforms: this code rise >>>>>> minimal server version to windows 2003 server. >>>>>> >>>>>> In Windows 2003 server my fix will create a new security attributes. >>>>>> If SetSecurityDescriptorDacl or InitializeSecurityDescriptor will >>>>>> return false on Windows XP then my patch will pass NULL to >>>>>> CreateNamedPipe and the code will use default security descriptor. >>>>>> >>>>>> >>>>>> BR, >>>>>> Sergey >>>>>> >>>>>> On 11.09.2014 16:16, Dmitry Samersoff wrote: >>>>>>> Sergey, >>>>>>> >>>>>>> 1. You should not free lpSecurityDescriptor if it's null (ll.291) >>>>>>> >>>>>>> 2. It's better to re-arrange code a bit: >>>>>>> >>>>>>> if InitializeSecurityDescriptor or SetSecurityDescriptorDacl >>>>>>> fails, free lpSecurityDescriptor immediately and continue with >>>>>>> lpSecurityDescriptor == NULL >>>>>>> >>>>>>> >>>>>>> 3. Make sure it works on all supported platforms: this code rise >>>>>>> minimal server version to windows 2003 server. >>>>>>> >>>>>>> -Dmitry >>>>>>> >>>>>>> >>>>>>> >>>>>>> On 2014-09-11 15:49, Sergey Gabdurakhmanov wrote: >>>>>>>> Hi, >>>>>>>> >>>>>>>> Could I please have a review of this small fix. >>>>>>>> >>>>>>>> webrev: http://cr.openjdk.java.net/~sgabdura/8057564/webrev.00/ >>>>>>>> bug: https://jbs.oracle.com/bugs/browse/JDK-8057564 >>>>>>>> >>>>>>>> Problem description: >>>>>>>> On Windows 7 with User Account Control (UAC) enabled, JVM hangs >>>>>>>> at getAgentProperties or getSystemProperties after attaching from a >>>>>>>> "high" >>>>>>>> IntegrityLevel JVM to a "medium" IntegrityLevel JVM, using Attach API: >>>>>>>> attachedVM = com.sun.tools.attach.VirtualMachine.attach(pid); >>>>>>>> final Properties systemProperties = >>>>>>>> attachedVM.getSystemProperties(); >>>>>>>> >>>>>>>> Root cause: >>>>>>>> In WindowsVirtualMachine.attach is implemented with named pipes. >>>>>>>> If named pipe was created with default security properties then >>>>>>>> windows will not allow process with"medium" IntegrityLevel to be >>>>>>>> attached to a processwith "high" IntegrityLevel. >>>>>>>> >>>>>>>> Solution: >>>>>>>> Create security properties that allow requested connection. >>>>>>>> >>>>>>>> I'm going to push this fix into JDK9, 8 and 7. >>>>>>>> BR, >>>>>>>> Sergey >>>>>>>> >