RFR: 8049695: nsk/jdb/options/connect/connect003 fails with "Launched jdb could not attach to debuggee during 300000 milliseconds"

Alex Menkov alexey.menkov at oracle.com
Wed Mar 14 23:28:08 UTC 2018


Hi Chris,

On 03/14/2018 13:42, Chris Plummer wrote:
> Hi Alex,
> 
> I don't think prefix -> basename is what David had in mind. Those 
> basically mean the same thing. The buffer is being used for the full 
> name, which is why neither is really appropriate. So maybe just call it 
> fullname, or even just name. createConnection() has a similar prefix 
> reference that should be fixed.

Ok, I don't like "fullname", "name" is already used there, so I made 
them "objectName" (for mutex/event names) and streamName (for stream 
name in createConnection()).

updated webrev:
http://cr.openjdk.java.net/~amenkov/shmem_long_name/webrev_open.03/

--alex

> 
> thanks,
> 
> Chris
> 
> On 3/14/18 12:43 PM, Alex Menkov wrote:
>>
>> Updated fix:
>> http://cr.openjdk.java.net/~amenkov/shmem_long_name/webrev_open.02/
>>
>> The changes:
>> - createTransport function is fixed;
>> - "prefix" variable is renamed to "baseName".
>>
>> --alex
>>
>> On 03/14/2018 09:45, Alex Menkov wrote:
>>> Hi David,
>>>
>>>
>>> On 03/13/2018 17:46, David Holmes wrote:
>>>> Hi Alex,
>>>>
>>>> On 14/03/2018 9:14 AM, Alex Menkov wrote:
>>>>> Hi all,
>>>>>
>>>>> Please review a small fix for
>>>>> https://bugs.openjdk.java.net/browse/JDK-8049695
>>>>> webrev: 
>>>>> http://cr.openjdk.java.net/~amenkov/shmem_long_name/webrev_open/
>>>>>
>>>>> Root cause of the issue is jbd hungs as a result of the buffer 
>>>>> overflow.
>>>>>
>>>>> In the beginning of the shmemBase.c:
>>>>>
>>>>> #define MAX_IPC_PREFIX 50   /* user-specified or generated name for */
>>>>>                              /* shared memory seg and prefix for 
>>>>> other IPC */
>>>>> #define MAX_IPC_SUFFIX 25   /* suffix to shmem name for other IPC 
>>>>> names */
>>>>> #define MAX_IPC_NAME   (MAX_IPC_PREFIX + MAX_IPC_SUFFIX)
>>>>>
>>>>> buffer (char prefix[]) in function createStream is used to generate 
>>>>> base name for mutex/events, so MAX_IPC_PREFIX is not big enough.
>>>>
>>>> Good catch! But overall this code seems to be missing bounds checks 
>>>> everywhere. You made the "prefix" (poor name?) buffer bigger 
>>>> (MAX_IPC_NAME) but do we know the incoming name plus the appended 
>>>> descriptive string will fit in it?
>>>
>>> Yes, the possible values can be added to the shmem name (which is 
>>> restricted by 49 chars):
>>> ".mutex"
>>> ".hasData"
>>> ".hasSpace"
>>> ".accept"
>>> ".attach"
>>> ".<pid>" (pid is 64bit value, max len IIRC is 19 symbols)
>>> So extra MAX_IPC_SUFFIX (25 symbols) is enough
>>>
>>>> Looking at createTransport for example, it also has:
>>>>
>>>> char prefix[MAX_IPC_PREFIX];
>>>>
>>>> and it produces an error if
>>>>
>>>> strlen(address) >= MAX_IPC_PREFIX
>>>>
>>>> but otherwise copies it across:
>>>>
>>>> strcpy(transport->name, address);
>>>>
>>>> and then later does:
>>>>
>>>>   sprintf(prefix, "%s.mutex", transport->name);
>>>>
>>>> so we may have overflowed again by adding ".mutex"! The same goes 
>>>> for the subsequent sprintf's.
>>>
>>> Thank you for the catch!
>>> I looked the file for other similar issues, but somehow overlokked 
>>> this case.
>>> Will fix it.
>>> Also will change confusing "prefix" name to "base_name".
>>>
>>> --alex
>>>
>>>>
>>>> So I think there is more work to do to ensure this code is immune 
>>>> from buffer overflows.
>>>>
>>>> Thanks,
>>>> David
>>>> -----
>>>>
>>>>> --alex
> 
> 
> 


More information about the serviceability-dev mailing list