[13] RFR: 8202414: Unsafe write after primitive array creation may result in array length change

Rahul Raghavan rahul.v.raghavan at oracle.com
Mon Mar 25 09:30:49 UTC 2019


Hi,

Request help review the following revised fix proposal for JDK-8202414.

<webrev.01> - http://cr.openjdk.java.net/~rraghavan/8202414/webrev.01/

Though did not receive comments for earlier '8202414/webrev.00',
when checked again seems the same to be wrong or too restrictive.
So tried the revised changes -

intptr_t InitializeNode::can_capture_store(StoreNode* st, 
PhaseTransform* phase, bool can_reshape) {
    const int FAIL = 0;
    if (st->is_unaligned_access()) {
      return FAIL;
    }
+  if ((st->memory_size() >= BytesPerInt) && ((get_store_offset(st, 
phase) % BytesPerInt) != 0)) {
+    return FAIL;
+  }
    if (st->req() != MemNode::ValueIn + 1)
      return FAIL;                // an inscrutable StoreNode (card mark?)

Confirmed no issues with reported 8202414 test case.
Also no issues for hs-tier1 to tier4, hs-precheckin-comp testing.
Please let me know if missed something here.


Thanks,
Rahul



On 14/03/19 1:54 PM, Rahul Raghavan wrote:
> Hi,
> 
> Please review the following fix proposal for JDK-8202414.
> 
> Webrev - http://cr.openjdk.java.net/~rraghavan/8202414/webrev.00/
> 
> 
> -- Related links
>  > https://bugs.openjdk.java.net/browse/JDK-8202414
>  > 
> http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2018-September/030536.html 
> 
> 
> 
> -- As per suggestions in JBS added following change in 
> InitializeNode::can_capture_store() to return false for unaligned stores.
> =============
> diff -r 3086f9259e97 src/hotspot/share/opto/memnode.cpp
> --- a/src/hotspot/share/opto/memnode.cpp Wed Mar 13 00:48:52 2019 -0400
> +++ b/src/hotspot/share/opto/memnode.cpp Wed Mar 13 19:50:07 2019 +0530
> @@ -3541,7 +3541,7 @@
>   // within the initialized memory.
>   intptr_t InitializeNode::can_capture_store(StoreNode* st, 
> PhaseTransform* phase, bool can_reshape) {
>     const int FAIL = 0;
> -  if (st->is_unaligned_access()) {
> +  if (st->is_unaligned_access() || ((get_store_offset(st, phase) % 
> BytesPerInt) != 0)) {
>       return FAIL;
>     }
>     if (st->req() != MemNode::ValueIn + 1)
> ==============
> 
> 
> -- Added the new jtreg test from the JBS unit test.
> (test/hotspot/jtreg/compiler/c2/Test8202414.java)
> Understood the test with unaligned access will not work for Sparc due to 
> hardware restrictions.The test always fails with SIGBUS crash, with or 
> without above fix. So added
>     @requires (os.arch != "sparc") & (os.arch != "sparcv9")
> 
> 
> -- Confirmed the above change solved the original reported 8202414 test 
> case failure. Also no issues far for hs-tier1 to tier4, 
> hs-precheckin-comp testing.
> 
> -- Could not work out any related additions in 
> LibraryCallKit::inline_unsafe_access().
> Hope above fix proposal is correct, complete solution for the issue.
> 
> 
> Thanks,
> Rahul


More information about the hotspot-compiler-dev mailing list