[8u] RFR(S): 8244548: JDK 8u: sun.misc.Version.jdkUpdateVersion() returns wrong result

Severin Gehwolf sgehwolf at redhat.com
Thu May 7 16:45:04 UTC 2020


Hi Simon,

On Thu, 2020-05-07 at 11:55 -0400, Simon Tooke wrote:
> (disclaimer: I am not a reviewer)

Thanks for the review.

> 
> I believe it's a "good thing" to shrink the reserved1 bitfield, as I 
> suspect the entire struct grows by 4 bytes otherwise.
> 
> 
> Original:
> 
> 644 unsigned int jdk_version; /* Consists of major, minor, micro (n.n.n) 
> */ 1645 /* and build number (xx) */ 1646 unsigned int update_version : 
> 8; /* Update release version (uu) */ 1647 unsigned int 
> special_update_version : 8; /* Special update release version (c)*/ 1648 
> unsigned int reserved1 : 16; 1649 unsigned int reserved2; The proposed 
> patch: 44 unsigned int jdk_version; /* Consists of major, minor, micro 
> (n.n.n) */ 1645 /* and build number (xx) */ 1646 unsigned int 
> update_version : 16; /* Update release version (uu) */ 1647 unsigned int 
> special_update_version : 8; /* Special update release version (c)*/ 1648 
> unsigned int reserved1 : 16; 1649 unsigned int reserved2; Note that the 
> original sum of bitfields is 32 bits, so it will fit into a 4 byte int 
> (which it is surrounded by) The proposed sum of bitfields is 40 bits, 
> which will probably cause a new 4 byte bitfield to be generated under 
> the hood.

Sure. Updated webrev:
http://cr.openjdk.java.net/~sgehwolf/webrevs/JDK-8244548/03/

Thanks,
Severin

> -Simon
> 
> 
> On 2020-05-07 11:09 a.m., Severin Gehwolf wrote:
> > Hi,
> > 
> > Please review this OpenJDK 8u fix for an issue where the update version
> > as configured via --with-update-version=XXX might overflow in internal
> > JDK structures and thus, will get reported wrong. In particular, only 1
> > byte is being reserved for the update versions internally. That is, it
> > works fine up to a configured update version of 255 (2^8 - 1). We've
> > passed that in OpenJDK 8u with the 8u262 cycle currently in EA. Hence,
> > we are now seeing this issue.
> > 
> > Bug: https://bugs.openjdk.java.net/browse/JDK-8244548
> > webrev: http://cr.openjdk.java.net/~sgehwolf/webrevs/JDK-8244548/02/
> > testing: Linux tier 1
> > 
> > The proposed fix is to extend the update_version field in
> > jdk_version_info from 8 to 16 bit and to use 16 bit of the jvm_version
> > integer in jvm_version_info. Thus, the new upper bound for update
> > version number is 2^16-1 => 65535 which should be sufficient. I don't
> > think OpenJDK 8u will live that long ;-)
> > 
> > jvm_version_info.jvm_version currently holds this quadruplet:
> > 
> > Most significant 8 bits => major version, followed by 8 bits => minor
> > version, followed by 8 bits => micro version, followed by 8 bits =>
> > build version. Note that JVM minor version represents the update
> > version as passed in via configure and the micro version is currently
> > not used (always 0). See vm_version.cpp lines 100-102 where only major,
> > minor and build number are ever been set. Knowing this, we can still
> > preserve the same behavior after patch by defining JVM_VERSION_MICRO to
> > 0 for any version.
> > 
> > For jdk_version_info the fix is simpler, since the update_version is a
> > separate field for which I've extended it to 16 bit. Andrew Brygin
> > suggested to reduce the reserved1 field from currently 16 bit to 8 bit
> > since we are extending update_version by 8 bits, thus making the whole
> > structure grow. I'm not sure reducing reserved1 to 8 bits so as to not
> > grow the structure would be necessary, but I'd be happy to do so if
> > there is such consensus.
> > 
> > Thoughts?
> > 
> > Thanks,
> > Severin
> > 



More information about the jdk8u-dev mailing list