onnxruntime
0aa6adb5 - Fix out of bounds read issue in cross.entropy.cc (#27568)

Commit
3 days ago
Fix out of bounds read issue in cross.entropy.cc (#27568) ### Description Add bounds checking for label tensor values in `SparseSoftmaxCrossEntropy::Compute` to prevent out-of-bounds memory reads. The `SparseSoftmaxCrossEntropy` operator uses `label_data[i]` (int64_t) directly as an array index into the log-probability buffer without validating that the value falls within `[0, D)` where `D` is the number of classes. A malicious ONNX model can embed arbitrary label values in a model initializer, causing the operator to read heap memory beyond the log-probability buffer. Affected expressions in `cross_entropy.cc`: ```cpp loss_sample[i] = -log_prob_data[i * d + label_data[i]] * weight_data[i]; // weighted path loss_sample[i] = -log_prob_data[i * d + label_data[i]]; // unweighted path ``` Existing shape validation confirms label and logit dimensions are compatible, but never validates label **values** against the class dimension. ## Fix Added a validation loop before the loss computation that returns an error status if any label value is outside `[0, D)`: ```cpp for (ptrdiff_t i = 0; i < n; i++) { ORT_RETURN_IF(label_data[i] < 0 || label_data[i] >= d, "SparseSoftmaxCrossEntropy: label value ", label_data[i], " at index ", i, " is out of range [0, ", d, ")"); } ```
Author
Parents
Loading