You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-dev@hadoop.apache.org by "Yiyuan GUO (Jira)" <ji...@apache.org> on 2021/05/19 06:53:00 UTC

[jira] [Created] (HADOOP-17711) A divide by zero bug in LoadBalancingKMSClientProvider.java

Yiyuan GUO created HADOOP-17711:
-----------------------------------

             Summary: A divide by zero bug in LoadBalancingKMSClientProvider.java
                 Key: HADOOP-17711
                 URL: https://issues.apache.org/jira/browse/HADOOP-17711
             Project: Hadoop Common
          Issue Type: Bug
          Components: kms
    Affects Versions: 3.2.2
            Reporter: Yiyuan GUO


In the file _kms/LoadBalancingKMSClientProvider.java_, the function _rollNewVersion_ has the following [code|https://github.com/apache/hadoop/blob/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/key/kms/LoadBalancingKMSClientProvider.java#L509-#L516]:

 
{code:java}
@Override
public KeyVersion rollNewVersion(final String name, final byte[] material)
    throws IOException {
    final KeyVersion newVersion = doOp(new ProviderCallable<KeyVersion>() {
      @Override
      public KeyVersion call(KMSClientProvider provider) throws IOException {
        return provider.rollNewVersion(name, material);
      }
    }, nextIdx(), false);
    ...
}
{code}
The function _nextIdx_ uses _providers.length_ as a __ divisor:
{code:java}
private int nextIdx() {
    while (true) {
      int current = currentIdx.get();
      int next = (current + 1) % providers.length;
      ......
}{code}
However, _providers.length_ may be equal to zero, since the function _doOp_ explicitly checks that and throws an exception when it happens:
{code:java}
private <T> T doOp(ProviderCallable<T> op, int currPos,
      boolean isIdempotent) throws IOException {
    if (providers.length == 0) {
      throw new IOException("No providers configured !");
    }
    ...
}
{code}
 

The problem is that when _providers.length_ is 0, a divide by zero problem will happen when computing the argument for _doOp_ (inside the function _nextIdx_) __ before reaching the protection check above, causing an ArithmeticException.

 

 

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: common-dev-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-dev-help@hadoop.apache.org