summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlat9nq <22451773+lat9nq@users.noreply.github.com>2021-04-04 15:39:38 -0400
committerlat9nq <22451773+lat9nq@users.noreply.github.com>2021-04-05 00:49:09 -0400
commit638c892edf806837702f80ad5a0e57da0c8dbabe (patch)
tree9f078a2483f31b6a3744834b31a83b75346c35d8 /src
parent69b2dbdffd68d232d37a7c30a8ca01aee4f0b7c7 (diff)
nvhost_ctrl_gpu: Avoid sending null pointer to memcpy
Undefined Behaviour Sanitizer reports a null pointer is being sent to memcpy, thought it's "guaranteed to never be null". Guard it with an if statement, and log when the action has been averted.
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/service/nvdrv/devices/nvhost_ctrl_gpu.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_ctrl_gpu.cpp b/src/core/hle/service/nvdrv/devices/nvhost_ctrl_gpu.cpp
index 933d42f3f..2edd803f3 100644
--- a/src/core/hle/service/nvdrv/devices/nvhost_ctrl_gpu.cpp
+++ b/src/core/hle/service/nvdrv/devices/nvhost_ctrl_gpu.cpp
@@ -248,7 +248,13 @@ NvResult nvhost_ctrl_gpu::ZBCSetTable(const std::vector<u8>& input, std::vector<
IoctlZbcSetTable params{};
std::memcpy(&params, input.data(), input.size());
// TODO(ogniK): What does this even actually do?
- std::memcpy(output.data(), &params, output.size());
+
+ // Prevent null pointer being passed as arg 1
+ if (output.empty()) {
+ LOG_WARNING(Service_NVDRV, "Avoiding passing null pointer to memcpy");
+ } else {
+ std::memcpy(output.data(), &params, output.size());
+ }
return NvResult::Success;
}