RFR[10]: JDK-8023649 - java.net.NetworkInterface.getInterfaceAddresses() call flow clean up

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

RFR[10]: JDK-8023649 - java.net.NetworkInterface.getInterfaceAddresses() call flow clean up

Mark Sheppard
Hi,
     please oblige and review the follows changes:
http://cr.openjdk.java.net/~msheppar/8023649/webrev/

for the issue:
https://bugs.openjdk.java.net/browse/JDK-8023649

This is performed under the auspices of reliability, robustness and
stability.
* As such, a number of error checks are amended to free malloc-ed memory,
* to add consistency to the code, additional ExceptionCheck have been
added as a post  SetObjectArrayElement invocation check,
* A long standing issue reporting that
NetworkInterface::getInterfacesAddresses can throw an NPE has been
addressed.
The context for such a failure is that there is an IPv4 only
configuration and that configuration is incorrect in its setting.
This may lead to the bindings array being allocated, but expected
InterfaceAddress objects not allocated
and set in the array .... so the bindings array implicitly contains null
references.

In NetworkInterface.c  the function
createNetworkInterface
performs a check on an address mask which may lead to skipping the code
block handling the InterfaceAddress allocation.

regards
Mark
Reply | Threaded
Open this post in threaded view
|

Re: RFR[10]: JDK-8023649 - java.net.NetworkInterface.getInterfaceAddresses() call flow clean up

Vyom Tewari
Hi Mark,

Thanks for doing this, i see that "createNetworkInterface" method is
getting called from multiple places in NetworkInterface.c there is
pending JNI Exception at line 695 in NetworkInterface.c. I am not sure
if it is safe to call "(*env)->ReleaseStringUTFChars" even if there is
pending JNI Exception.

Thanks,

Vyom


On Tuesday 12 September 2017 10:50 PM, Mark Sheppard wrote:

> Hi,
>     please oblige and review the follows changes:
> http://cr.openjdk.java.net/~msheppar/8023649/webrev/
>
> for the issue:
> https://bugs.openjdk.java.net/browse/JDK-8023649
>
> This is performed under the auspices of reliability, robustness and
> stability.
> * As such, a number of error checks are amended to free malloc-ed memory,
> * to add consistency to the code, additional ExceptionCheck have been
> added as a post  SetObjectArrayElement invocation check,
> * A long standing issue reporting that
> NetworkInterface::getInterfacesAddresses can throw an NPE has been
> addressed.
> The context for such a failure is that there is an IPv4 only
> configuration and that configuration is incorrect in its setting.
> This may lead to the bindings array being allocated, but expected
> InterfaceAddress objects not allocated
> and set in the array .... so the bindings array implicitly contains
> null references.
>
> In NetworkInterface.c  the function
> createNetworkInterface
> performs a check on an address mask which may lead to skipping the
> code block handling the InterfaceAddress allocation.
>
> regards
> Mark

Reply | Threaded
Open this post in threaded view
|

Re: RFR[10]: JDK-8023649 - java.net.NetworkInterface.getInterfaceAddresses() call flow clean up

Mark Sheppard
Hi Vyom,
    thanks for the feedback ...  interesting question and at a more
general level is it safe to release a local reference
if there is a pending exception ...looking at the logic in getByName0
function, it would appear that it is possible
to release the name_utf reference before the createNetworkInterface call
and avoid any potential pending exception


regards
Mark

On 13/09/2017 04:16, vyom tewari wrote:

> Hi Mark,
>
> Thanks for doing this, i see that "createNetworkInterface" method is
> getting called from multiple places in NetworkInterface.c there is
> pending JNI Exception at line 695 in NetworkInterface.c. I am not sure
> if it is safe to call "(*env)->ReleaseStringUTFChars" even if there is
> pending JNI Exception.
>
> Thanks,
>
> Vyom
>
>
> On Tuesday 12 September 2017 10:50 PM, Mark Sheppard wrote:
>> Hi,
>>     please oblige and review the follows changes:
>> http://cr.openjdk.java.net/~msheppar/8023649/webrev/
>>
>> for the issue:
>> https://bugs.openjdk.java.net/browse/JDK-8023649
>>
>> This is performed under the auspices of reliability, robustness and
>> stability.
>> * As such, a number of error checks are amended to free malloc-ed
>> memory,
>> * to add consistency to the code, additional ExceptionCheck have been
>> added as a post  SetObjectArrayElement invocation check,
>> * A long standing issue reporting that
>> NetworkInterface::getInterfacesAddresses can throw an NPE has been
>> addressed.
>> The context for such a failure is that there is an IPv4 only
>> configuration and that configuration is incorrect in its setting.
>> This may lead to the bindings array being allocated, but expected
>> InterfaceAddress objects not allocated
>> and set in the array .... so the bindings array implicitly contains
>> null references.
>>
>> In NetworkInterface.c  the function
>> createNetworkInterface
>> performs a check on an address mask which may lead to skipping the
>> code block handling the InterfaceAddress allocation.
>>
>> regards
>> Mark
>