RFR: JDK-8145099 Better error message when SA can't attach to a process

Staffan Larsen staffan.larsen at oracle.com
Fri Dec 11 11:32:30 UTC 2015


> On 11 dec. 2015, at 11:54, Dmitry Samersoff <dmitry.samersoff at oracle.com> wrote:
> 
> Staffan,
> 
>> This is all platform specific code - and all the platforms are
>> different. Of course, it would be good if all platforms reported good
>> error message always - and we can continue working on that.
> 
> OK.
> 
>> It should get filled in in the ptrace_attach() call.
> 
> if ph->pid == thr->lwp_id at ll. 409 the function return NULL but
> doesn't touch err_buf.

if ph->pid == thr->lwp_id the if-statement is skipped and we continue in the while-loop.

> 
> -Dmitry
> 
> On 2015-12-11 11:12, Staffan Larsen wrote:
>> 
>>> On 10 dec. 2015, at 23:20, Dmitry Samersoff
>>> <dmitry.samersoff at oracle.com <mailto:dmitry.samersoff at oracle.com>> wrote:
>>> 
>>> Staffan,
>>> 
>>> 1.
>>> 
>>> strerror_r comes in two versions - returning string (GNU) and returning
>>> int (XSI)
>>> 
>>> To make developers live more interesting GNU version doesn't guarantee
>>> to fill buf with appropriate string, so you can't just void return value.
>>> 
>>> Default version tends to be XSI now days and I'm not sure that build
>>> system add -D_GNU_SOURCE on all platforms.
>>> 
>>> So you have to add something like
>>> 
>>> #if _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE
>>> use XSI strerror_r
>>> #else
>>> use GNU strerror_r
>>> #endif
>> 
>> We are getting the _GNU_SOURCE version when building. If that changes in
>> the makefiles somewhere so that we get the XSI version, then this code
>> should not compile - it should issue a warning when assigning an int to
>> char*.
>> 
>>> 
>>> Or just don't care of threads and use plain strerror - it widely used in
>>> hotspot and it doesn't crash on a race.
>>> 
>>> 2.
>>> 
>>> err_buff remains empty if the attach fails at ll.412 of ps_proc.c,
>>> but see below.
>> 
>> It should get filled in in the ptrace_attach() call.
>> 
>>> 
>>> 3. (* just an opinion *)
>>> 
>>> Extra parameters to ptrace_attach/PGrab linux makes in different from
>>> other platforms.
>> 
>> This is all platform specific code - and all the platforms are
>> different. Of course, it would be good if all platforms reported good
>> error message always - and we can continue working on that.
>> 
>> Thanks,
>> /Staffan
>> 
>>> 
>>> So I would prefer to have it unchanged - you can either mimic Solaris
>>> behavior and add Pgrab_error() function or just move all strerror staff
>>> to LinuxDebuggerLocal_attach0 - errno from ptrace_attach/Pgrab is
>>> available there.
>>> 
>>> (except calloc case, but if we can't allocate couple of bytes for struct
>>> ps_prochandle we most likely will not see the error anyway).
>>> 
>>> 
>>> -Dmitry
>>> 
>>> 
>>> On 2015-12-10 18:10, Staffan Larsen wrote:
>>>> Thanks!
>>>> 
>>>>> On 10 dec. 2015, at 15:56, Thomas Stüfe <thomas.stuefe at gmail.com
>>>>> <mailto:thomas.stuefe at gmail.com>
>>>>> <mailto:thomas.stuefe at gmail.com>> wrote:
>>>>> 
>>>>> Hi Staffan,
>>>>> 
>>>>> this looks fine now, thanks!
>>>>> 
>>>>> ..Thomas
>>>>> 
>>>>> On Thu, Dec 10, 2015 at 3:42 PM, Staffan Larsen
>>>>> <staffan.larsen at oracle.com
>>>>> <mailto:staffan.larsen at oracle.com> <mailto:staffan.larsen at oracle.com>>
>>>>> wrote:
>>>>> 
>>>>>   Hi Thomas, 
>>>>> 
>>>>>>   On 10 dec. 2015, at 15:27, Thomas Stüfe <thomas.stuefe at gmail.com
>>>>>> <mailto:thomas.stuefe at gmail.com>
>>>>>>   <mailto:thomas.stuefe at gmail.com>> wrote:
>>>>>> 
>>>>>>   Hi Staffan,
>>>>>> 
>>>>>>   thanks!
>>>>>> 
>>>>>>   It also just occurred to me that strerror is not considered
>>>>>>   threadsafe. Maybe strerror_r() would a better option (depending
>>>>>>   on the version you use you would have to check the return value
>>>>>>   for NULL, though).
>>>>> 
>>>>>   Updated here: http://cr.openjdk.java.net/~sla/JDK-8145099/webrev.03/
>>>>> 
>>>>>   Thanks,
>>>>>   /Staffan
>>>>> 
>>>>>> 
>>>>>>   sorry for this piecemeal review.
>>>>>> 
>>>>>>   Kind Regards, Thomas
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>>   On Thu, Dec 10, 2015 at 3:22 PM, Staffan Larsen
>>>>>>   <staffan.larsen at oracle.com
>>>>>> <mailto:staffan.larsen at oracle.com> <mailto:staffan.larsen at oracle.com>>
>>>>>> wrote:
>>>>>> 
>>>>>>       Hi Thommas,
>>>>>> 
>>>>>>>       On 10 dec. 2015, at 14:49, Thomas Stüfe
>>>>>>>       <thomas.stuefe at gmail.com
>>>>>>> <mailto:thomas.stuefe at gmail.com> <mailto:thomas.stuefe at gmail.com>>
>>>>>>>       wrote:
>>>>>>> 
>>>>>>>       Hi Stefan,
>>>>>>> 
>>>>>>>       Disclaimer: not a "R"eviewer.
>>>>>>> 
>>>>>>>       http://cr.openjdk.java.net/~sla/JDK-8145099/webrev.01/agent/src/os/linux/LinuxDebuggerLocal.c.udiff.html
>>>>>>> 
>>>>>>>       I am not sure why you pass sizeof(err_buf) - 1 instead of
>>>>>>>       sizeof(err_buf) to Pgrab and sizeof(msg) - 1 instead of
>>>>>>>       sizeof(msg) to snprintf? snprintf will always zero terminate
>>>>>>>       in case of truncation, at least on posix platforms.
>>>>>> 
>>>>>>       Good point. I was just being overly cautious without thinking.
>>>>>> 
>>>>>>       Updated
>>>>>>       webrev: http://cr.openjdk.java.net/~sla/JDK-8145099/webrev.02/
>>>>>> 
>>>>>>       Thanks,
>>>>>>       /Staffan
>>>>>> 
>>>>>>> 
>>>>>>>       Otherwise this looks good.
>>>>>>> 
>>>>>>>       Kind Regards, Thomas
>>>>>>> 
>>>>>>> 
>>>>>>>       On Thu, Dec 10, 2015 at 2:19 PM, Staffan Larsen
>>>>>>>       <staffan.larsen at oracle.com <mailto:staffan.larsen at oracle.com>
>>>>>>>       <mailto:staffan.larsen at oracle.com>> wrote:
>>>>>>> 
>>>>>>>           Please review this patch to add a better error message
>>>>>>>           to SA when it fails to attach to a process on linux.
>>>>>>>           Currently the error says "Can't attach to the process”.
>>>>>>>           After this change the message will look something like:
>>>>>>>           "Can't attach to the process: ptrace(PTRACE_ATTACH, ..)
>>>>>>>           failed for 28417: Operation not permitted”
>>>>>>> 
>>>>>>>           webrev:
>>>>>>> http://cr.openjdk.java.net/~sla/JDK-8145099/webrev.01/
>>>>>>>           bug: https://bugs.openjdk.java.net/browse/JDK-8145099
>>>>>>> 
>>>>>>>           Thanks,
>>>>>>>           /Staffan
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>> 
>>> 
>>> 
>>> -- 
>>> Dmitry Samersoff
>>> Oracle Java development team, Saint Petersburg, Russia
>>> * I would love to change the world, but they won't give me the sources.
>> 
> 
> 
> -- 
> Dmitry Samersoff
> Oracle Java development team, Saint Petersburg, Russia
> * I would love to change the world, but they won't give me the sources.



More information about the serviceability-dev mailing list