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 19:43:32 UTC 2018
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