[ 
https://issues.apache.org/jira/browse/MAPREDUCE-7346?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Yiyuan GUO updated MAPREDUCE-7346:
----------------------------------
    Description: 
In the file _gridmix/AvgRecordFactory.java,_ one of __ the class's constructor 
has the following 
[code|https://github.com/apache/hadoop/blob/trunk/hadoop-tools/hadoop-gridmix/src/main/java/org/apache/hadoop/mapred/gridmix/AvgRecordFactory.java#L63-#L68]:
{code:java}
public AvgRecordFactory(long targetBytes, long targetRecords,
      Configuration conf, int minSpilledBytes) {
    this.targetBytes = targetBytes;
    this.targetRecords = targetRecords <= 0 && this.targetBytes >= 0
      ? Math.max(1,
          this.targetBytes / conf.getInt(GRIDMIX_MISSING_REC_SIZE, 64 * 1024))
      : targetRecords;
    final long tmp = this.targetBytes / this.targetRecords;
    ...
}
{code}
The check in the code _targetRecords <= 0 && this.targetBytes >= 0_ is not 
sufficient: when _*targetRecords == 0 && targetBytes < 0*,_ we can bypass the 
protection checking and set _this.targetRecords_ to zero, leading to a divide 
by zero problem when computing _tmp._

 

  was:
In the file _gridmix/AvgRecordFactory.java,_ one of __ the class's constructor 
has the following 
[code|https://github.com/apache/hadoop/blob/trunk/hadoop-tools/hadoop-gridmix/src/main/java/org/apache/hadoop/mapred/gridmix/AvgRecordFactory.java#L63-#L68]:
{code:java}
public AvgRecordFactory(long targetBytes, long targetRecords,
      Configuration conf, int minSpilledBytes) {
    this.targetBytes = targetBytes;
    this.targetRecords = targetRecords <= 0 && this.targetBytes >= 0
      ? Math.max(1,
          this.targetBytes / conf.getInt(GRIDMIX_MISSING_REC_SIZE, 64 * 1024))
      : targetRecords;
    final long tmp = this.targetBytes / this.targetRecords;
    ...
}
{code}
The check in the code _targetRecords <= 0 && this.targetBytes >= 0_ is not 
sufficient: when _*targetRecords == 0 && targetBytes < 0*,_ we can bypass _ 
_the_  _protection checking and set _this.targetRecords_ to zero, leading to a 
divide by zero problem when computing _tmp._

 


> [Gridmix] A potential divide by zero in AvgRecordFactory
> --------------------------------------------------------
>
>                 Key: MAPREDUCE-7346
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-7346
>             Project: Hadoop Map/Reduce
>          Issue Type: Bug
>          Components: contrib/gridmix
>            Reporter: Yiyuan GUO
>            Priority: Major
>              Labels: gridmix, security
>
> In the file _gridmix/AvgRecordFactory.java,_ one of __ the class's 
> constructor has the following 
> [code|https://github.com/apache/hadoop/blob/trunk/hadoop-tools/hadoop-gridmix/src/main/java/org/apache/hadoop/mapred/gridmix/AvgRecordFactory.java#L63-#L68]:
> {code:java}
> public AvgRecordFactory(long targetBytes, long targetRecords,
>       Configuration conf, int minSpilledBytes) {
>     this.targetBytes = targetBytes;
>     this.targetRecords = targetRecords <= 0 && this.targetBytes >= 0
>       ? Math.max(1,
>           this.targetBytes / conf.getInt(GRIDMIX_MISSING_REC_SIZE, 64 * 1024))
>       : targetRecords;
>     final long tmp = this.targetBytes / this.targetRecords;
>     ...
> }
> {code}
> The check in the code _targetRecords <= 0 && this.targetBytes >= 0_ is not 
> sufficient: when _*targetRecords == 0 && targetBytes < 0*,_ we can bypass the 
> protection checking and set _this.targetRecords_ to zero, leading to a divide 
> by zero problem when computing _tmp._
>  



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

---------------------------------------------------------------------
To unsubscribe, e-mail: mapreduce-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: mapreduce-issues-h...@hadoop.apache.org

Reply via email to