Prevent unitialized memory access in GraphConstructor::MakeEdge
The `MakeEdge` implementation assumes that there exists an output at `output_index` of `src` node and an input at `input_index` of `dst` node. However, if this is not the case this results in accessing data out of bounds. Because we are accessing an array that is a private member of a class and only in read only mode, this usually results only in unitialized memory access. However, it is reasonable to think that malicious users could manipulate these indexes to actually read data outside the class, thus resulting in information leakage and further exploits. PiperOrigin-RevId: 346343288 Change-Id: I2127da27c2023d27f26efd39afa6c853385cab6f
This commit is contained in:
parent
5681c179ef
commit
16bca6296a
@ -44,6 +44,7 @@ limitations under the License.
|
||||
#include "tensorflow/core/lib/gtl/inlined_vector.h"
|
||||
#include "tensorflow/core/lib/strings/scanner.h"
|
||||
#include "tensorflow/core/lib/strings/str_util.h"
|
||||
#include "tensorflow/core/platform/errors.h"
|
||||
#include "tensorflow/core/platform/logging.h"
|
||||
#include "tensorflow/core/platform/macros.h"
|
||||
#include "tensorflow/core/public/version.h"
|
||||
@ -1425,6 +1426,17 @@ void GraphConstructor::Undo() {
|
||||
|
||||
Status GraphConstructor::MakeEdge(Node* src, int output_index, Node* dst,
|
||||
int input_index) {
|
||||
if (output_index >= src->num_outputs()) {
|
||||
return errors::InvalidArgument(
|
||||
"Output ", output_index, " of node ", src->name(),
|
||||
" does not exist. Node only has ", src->num_outputs(), " outputs.");
|
||||
}
|
||||
if (input_index >= dst->num_inputs()) {
|
||||
return errors::InvalidArgument(
|
||||
"Input ", input_index, " of node ", dst->name(),
|
||||
" does not exist. Node only has ", dst->num_inputs(), " inputs.");
|
||||
}
|
||||
|
||||
DataType src_out = src->output_type(output_index);
|
||||
DataType dst_in = dst->input_type(input_index);
|
||||
if (!TypesCompatible(dst_in, src_out)) {
|
||||
|
Loading…
Reference in New Issue
Block a user