]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
accel/qaic: use sizeof(*trans_hdr) for transaction length check
authorMuhammad Bilal <meatuni001@gmail.com>
Wed, 17 Jun 2026 21:25:20 +0000 (02:25 +0500)
committerJeff Hugo <jeff.hugo@oss.qualcomm.com>
Wed, 29 Jul 2026 20:57:37 +0000 (14:57 -0600)
In encode_message() the per-transaction lower-bound check compares
trans_hdr->len against sizeof(trans_hdr), i.e. the size of the pointer,
instead of sizeof(*trans_hdr), the size of struct qaic_manage_trans_hdr.

Every other length check in this file (encode_message() at the loop
guard, decode_message(), etc.) correctly uses sizeof(*trans_hdr), so
this is an inconsistency. On 64-bit builds the pointer and the struct
are both 8 bytes, so the check is correct by coincidence and there is
no behavioural change. On 32-bit builds the pointer is 4 bytes, which
weakens the minimum-length check below the 8-byte header size.

Use sizeof(*trans_hdr) so the check validates against the actual
transaction header size on all builds.

Fixes: ea33cb6fc278 ("accel/qaic: tighten bounds checking in encode_message()")
Signed-off-by: Muhammad Bilal <meatuni001@gmail.com>
Reviewed-by: Jeff Hugo <jeff.hugo@oss.qualcomm.com>
Signed-off-by: Jeff Hugo <jeff.hugo@oss.qualcomm.com>
Link: https://patch.msgid.link/20260617212520.59801-1-meatuni001@gmail.com
drivers/accel/qaic/qaic_control.c

index bb94d3556904a8c8ed39221d2465f0956ff95ac1..50bf3340e49ce573074428b7e1367ab1baa94e32 100644 (file)
@@ -786,7 +786,7 @@ static int encode_message(struct qaic_device *qdev, struct manage_msg *user_msg,
                        break;
                }
                trans_hdr = (struct qaic_manage_trans_hdr *)(user_msg->data + user_len);
-               if (trans_hdr->len < sizeof(trans_hdr) ||
+               if (trans_hdr->len < sizeof(*trans_hdr) ||
                    size_add(user_len, trans_hdr->len) > user_msg->len) {
                        ret = -EINVAL;
                        break;