From aea90a9e314d220dcaa80a616808afc38e1c78b6 Mon Sep 17 00:00:00 2001 From: Karnav Shah Date: Fri, 6 Feb 2026 16:17:15 +0530 Subject: [PATCH] Merge pull request #28308 from shahkarnav115-beep:dnn-mvn-defensive-checks dnn: improve robustness of MVN layer#28308 This change adds small defensive improvements to the MVN layer implementation: ->Guard against zero-sized OpenCL kernel launches ->Add input validation in finalize() ->Use int64 for FLOPS computation to avoid overflow No functional or performance changes are intended. ### Pull Request Readiness Checklist See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request - [x] I agree to contribute to the project under Apache 2 License. - [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV - [x] The PR is proposed to the proper branch - [ ] There is a reference to the original bug report and related work - [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable Patch to opencv_extra has the same branch name. - [ ] The feature is well documented and sample code can be built with the project CMake --- modules/dnn/src/layers/mvn_layer.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/dnn/src/layers/mvn_layer.cpp b/modules/dnn/src/layers/mvn_layer.cpp index d59e339ac4..9c8bdf5106 100644 --- a/modules/dnn/src/layers/mvn_layer.cpp +++ b/modules/dnn/src/layers/mvn_layer.cpp @@ -171,7 +171,9 @@ public: String buildopt = "-DNUM=4" + opts; ocl::Kernel k("mean_fuse4", ocl::dnn::mvn_oclsrc, buildopt + " -DKERNEL_MEAN_FUSE"); size_t localsize[] = { LOCAL_SIZE }; - size_t globalsize[] = { (size_t)s[0] / 4 * localsize[0] }; + size_t groups = std::max(1, s[0] / 4); + size_t globalsize[] = { groups * localsize[0] }; + int argId = 0; k.set(argId++, ocl::KernelArg::PtrReadOnly(inpMat)); @@ -374,7 +376,7 @@ public: const std::vector &outputs) const CV_OVERRIDE { CV_UNUSED(outputs); // suppress unused variable warning - long flops = 0; + int64 flops = 0; for(int i = 0; i < inputs.size(); i++) { flops += 6*total(inputs[i]) + 3*total(inputs[i], 0, normVariance ? 2 : 1);