From 03a9b83a4e73e47efd30c160f7d9bc6e848a71ac Mon Sep 17 00:00:00 2001 From: Arian Date: Thu, 14 Mar 2024 17:54:59 +0100 Subject: [PATCH] sm6225-common: udfps: Read the whole struct at once for stock compatibility Change-Id: I0ed3e7de1cafccf27f417fad23000b87f2b2dad5 --- udfps/UdfpsHandler.cpp | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/udfps/UdfpsHandler.cpp b/udfps/UdfpsHandler.cpp index aa16d66..b9c98ff 100644 --- a/udfps/UdfpsHandler.cpp +++ b/udfps/UdfpsHandler.cpp @@ -62,24 +62,23 @@ static bool readBool(int fd) { } static disp_event_resp* parseDispEvent(int fd) { - disp_event header; - ssize_t headerSize = read(fd, &header, sizeof(header)); - if (headerSize < sizeof(header)) { - LOG(ERROR) << "unexpected display event header size: " << headerSize; + char event_data[1024] = {0}; + ssize_t size; + + memset(event_data, 0x0, sizeof(event_data)); + size = read(fd, event_data, sizeof(event_data)); + if (size < 0) { + LOG(ERROR) << "read fod event failed"; return nullptr; } - struct disp_event_resp* response = - reinterpret_cast(malloc(header.length)); - response->base = header; - int dataLength = response->base.length - sizeof(response->base); - ssize_t dataSize = read(fd, &response->data, dataLength); - if (dataSize < dataLength) { - LOG(ERROR) << "unexpected display event data size: " << dataSize; + if (size < sizeof(struct disp_event)) { + LOG(ERROR) << "Invalid event size " << size << ", expect at least " + << sizeof(struct disp_event); return nullptr; } - return response; + return (struct disp_event_resp*)&event_data[0]; } } // anonymous namespace