-
Notifications
You must be signed in to change notification settings - Fork 6.2k
8311902: Concurrency regression in the PBKDF2 key impl of SunJCE provider #14859
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
👋 Welcome back valeriep! A progress list of the required criteria for merging this PR into |
|
@valeriepeng The following label will be automatically applied to this pull request:
When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing list. If you would like to change these labels, use the /label pull request command. |
Webrevs
|
ascarpino
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me
|
@valeriepeng This change now passes all automated pre-integration checks. ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details. After integration, the commit message for the final commit will be: You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed. At the time when this comment was updated there had been 71 new commits pushed to the
As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details. ➡️ To integrate this PR with the above commit message to the |
XueleiFan
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks good to me to rollback to previous behaviors. I was just wondering, if the use of key in other methods, like hashCode()/equals(), has the similar issue? Thanks!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe you also want to revert the changes made to getPassword().
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, I will do that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I also think the change which moved the registering of the Cleaner outside the finally block in the constructor is not correct, as the passwd is no longer zero-ed out if the code after that throws an Exception.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Per my reading of the code. the cleaner is only used when the PBKDF2 key constructor succeeds. If an exception occurred, then the passwd cleanup is handled by the if (key == null) condition in the finally block.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, took another closer look at the code and you are right. So, never mind this comment.
For the usage of hashCode()/equals(), there should be strong reference to the key object for the usage scenarios I'd think. Thus, probably not an issue? |
Yes, it makes sense to me. |
I may reply too quickly to get the idea. Why you think there will be strong reference to the key object for hashCode()/equals(), but not for getEncoded()? I did not get the idea. |
hashCode()/equals() are normally used when objects are still around, e.g. used in hash map. As for getEncoded(), callers may just want to retrieve the bytes and not keep the Key object. |
XueleiFan
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have no more comments. Thanks!
seanjmullan
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good. I think you should file a follow-on issue to make similar changes to DESKey, DESedeKey, PBEKey and other security classes that use Cleaner.
|
Yes, I do plan a follow-on issue to apply this to other security classes which use Cleaner... |
|
/integrate |
|
Going to push as commit 28c4d19.
Your commit was automatically rebased without conflicts. |
|
@valeriepeng Pushed as commit 28c4d19. 💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored. |
This change adds back the Reference.ReachabilityFence(Object) call removed by JDK-8301553.
Please help review.
Thanks!
Valerie
Progress
Issue
Reviewers
Reviewing
Using
gitCheckout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/14859/head:pull/14859$ git checkout pull/14859Update a local copy of the PR:
$ git checkout pull/14859$ git pull https://git.openjdk.org/jdk.git pull/14859/headUsing Skara CLI tools
Checkout this PR locally:
$ git pr checkout 14859View PR using the GUI difftool:
$ git pr show -t 14859Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/14859.diff
Webrev
Link to Webrev Comment