You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "ConfX (Jira)" <ji...@apache.org> on 2023/07/24 16:42:00 UTC
[jira] [Created] (HBASE-27989) ByteBuffAllocator causes ArithmeticException due to improper poolBufSize value checking
ConfX created HBASE-27989:
-----------------------------
Summary: ByteBuffAllocator causes ArithmeticException due to improper poolBufSize value checking
Key: HBASE-27989
URL: https://issues.apache.org/jira/browse/HBASE-27989
Project: HBase
Issue Type: Bug
Reporter: ConfX
Attachments: reproduce.sh
h3. What happened
There is no value checking for parameter {{{}hbase.server.allocator.buffer.size{}}}. This may cause improper calculations and crashes the system like division by 0.
h3. Buggy code
In {{{}ByteBuffAllocator.java{}}}, there is no value checking for {{poolBufSize}} and this variable is directly used to calculate the {{{}bufsForTwoMB{}}}. When {{poolBufSize}} is mistakenly set to 0, the code would cause division by 0 and throw ArithmeticException to crash the system.
{noformat}
public static ByteBuffAllocator create(Configuration conf, boolean reservoirEnabled) {
int poolBufSize = conf.getInt(BUFFER_SIZE_KEY, DEFAULT_BUFFER_SIZE);
if (reservoirEnabled) {
. . .
int bufsForTwoMB = (2 * 1024 * 1024) / poolBufSize;
. . .{noformat}
h3. How to reproduce
# set hbase.server.allocator.buffer.size=0
run
# org.apache.hadoop.hbase.io.hfile.bucket.TestBucketCacheRefCnt#testInBucketCache
# you should observe the following failure:
{noformat}
java.lang.ArithmeticException: / by zero
at org.apache.hadoop.hbase.io.ByteBuffAllocator.create(ByteBuffAllocator.java:174)
at org.apache.hadoop.hbase.io.hfile.bucket.TestBucketCacheRefCnt.testInBucketCache(TestBucketCacheRefCnt.java:224)
. . .{noformat}
For an easy reproduction, run the reproduce.sh in the attachment. We are happy to provide a patch if this issue is confirmed.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)