path: root/net
diff options
authorPavel Skripkin <>2021-06-14 15:06:50 +0300
committerDavid S. Miller <>2021-06-14 13:01:26 -0700
commitad9d24c9429e2159d1e279dc3a83191ccb4daf1d (patch)
treeb07157d1f0f79e572fd9a11bc7703db3a3eb2553 /net
parentb87b04f5019e821c8c6c7761f258402e43500a1f (diff)
net: qrtr: fix OOB Read in qrtr_endpoint_post
Syzbot reported slab-out-of-bounds Read in qrtr_endpoint_post. The problem was in wrong _size_ type: if (len != ALIGN(size, 4) + hdrlen) goto err; If size from qrtr_hdr is 4294967293 (0xfffffffd), the result of ALIGN(size, 4) will be 0. In case of len == hdrlen and size == 4294967293 in header this check won't fail and skb_put_data(skb, data + hdrlen, size); will read out of bound from data, which is hdrlen allocated block. Fixes: 194ccc88297a ("net: qrtr: Support decoding incoming v2 packets") Reported-and-tested-by: Signed-off-by: Pavel Skripkin <> Reviewed-by: Bjorn Andersson <> Signed-off-by: David S. Miller <>
Diffstat (limited to 'net')
1 files changed, 1 insertions, 1 deletions
diff --git a/net/qrtr/qrtr.c b/net/qrtr/qrtr.c
index c0477bec09bd..f2efaa4225f9 100644
--- a/net/qrtr/qrtr.c
+++ b/net/qrtr/qrtr.c
@@ -436,7 +436,7 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len)
struct qrtr_sock *ipc;
struct sk_buff *skb;
struct qrtr_cb *cb;
- unsigned int size;
+ size_t size;
unsigned int ver;
size_t hdrlen;