mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-26 14:24:46 +02:00
8296024: Usage of DirectBuffer::address should be guarded
Reviewed-by: mcimadamore, alanb, psandoz, bpb
This commit is contained in:
parent
a9e6c62ba7
commit
84b927a05b
24 changed files with 635 additions and 430 deletions
|
@ -25,6 +25,8 @@
|
|||
|
||||
package com.sun.crypto.provider;
|
||||
|
||||
import jdk.internal.access.JavaNioAccess;
|
||||
import jdk.internal.access.SharedSecrets;
|
||||
import jdk.internal.misc.Unsafe;
|
||||
import sun.nio.ch.DirectBuffer;
|
||||
import sun.security.jca.JCAUtil;
|
||||
|
@ -92,6 +94,8 @@ abstract class GaloisCounterMode extends CipherSpi {
|
|||
|
||||
static final byte[] EMPTY_BUF = new byte[0];
|
||||
|
||||
private static final JavaNioAccess NIO_ACCESS = SharedSecrets.getJavaNioAccess();
|
||||
|
||||
private boolean initialized = false;
|
||||
|
||||
SymmetricCipher blockCipher;
|
||||
|
@ -909,6 +913,8 @@ abstract class GaloisCounterMode extends CipherSpi {
|
|||
*/
|
||||
ByteBuffer overlapDetection(ByteBuffer src, ByteBuffer dst) {
|
||||
if (src.isDirect() && dst.isDirect()) {
|
||||
// The use of DirectBuffer::address below need not be guarded as
|
||||
// no access is made to actual memory.
|
||||
DirectBuffer dsrc = (DirectBuffer) src;
|
||||
DirectBuffer ddst = (DirectBuffer) dst;
|
||||
|
||||
|
@ -946,7 +952,6 @@ abstract class GaloisCounterMode extends CipherSpi {
|
|||
((DirectBuffer) dst).address() - dstaddr + dst.position()) {
|
||||
return dst;
|
||||
}
|
||||
|
||||
} else if (!src.isDirect() && !dst.isDirect()) {
|
||||
// if src is read only, then we need a copy
|
||||
if (!src.isReadOnly()) {
|
||||
|
@ -1585,8 +1590,13 @@ abstract class GaloisCounterMode extends CipherSpi {
|
|||
int ofs = dst.arrayOffset() + dst.position();
|
||||
Arrays.fill(dst.array(), ofs , ofs + len, (byte)0);
|
||||
} else {
|
||||
Unsafe.getUnsafe().setMemory(((DirectBuffer)dst).address(),
|
||||
len + dst.position(), (byte)0);
|
||||
NIO_ACCESS.acquireSession(dst);
|
||||
try {
|
||||
Unsafe.getUnsafe().setMemory(((DirectBuffer)dst).address(),
|
||||
len + dst.position(), (byte) 0);
|
||||
} finally {
|
||||
NIO_ACCESS.releaseSession(dst);
|
||||
}
|
||||
}
|
||||
throw new AEADBadTagException("Tag mismatch");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue