Make use of the struct_size() helper instead of an open-coded version
in order to avoid any potential type mistakes, in particular in the
context in which this code is being used.

So, change the following form:

sizeof(*ev) + ev->num_hndl * sizeof(struct hci_comp_pkts_info)

 to :

struct_size(ev, handles, ev->num_hndl)

This code was detected with the help of Coccinelle.

Signed-off-by: Gustavo A. R. Silva <gust...@embeddedor.com>
---
 net/bluetooth/hci_event.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index ac2826ce162b..609fd6871c5a 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -3556,8 +3556,8 @@ static void hci_num_comp_pkts_evt(struct hci_dev *hdev, 
struct sk_buff *skb)
                return;
        }
 
-       if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
-           ev->num_hndl * sizeof(struct hci_comp_pkts_info)) {
+       if (skb->len < sizeof(*ev) ||
+           skb->len < struct_size(ev, handles, ev->num_hndl)) {
                BT_DBG("%s bad parameters", hdev->name);
                return;
        }
@@ -3644,8 +3644,8 @@ static void hci_num_comp_blocks_evt(struct hci_dev *hdev, 
struct sk_buff *skb)
                return;
        }
 
-       if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
-           ev->num_hndl * sizeof(struct hci_comp_blocks_info)) {
+       if (skb->len < sizeof(*ev) ||
+           skb->len < struct_size(ev, handles, ev->num_hndl)) {
                BT_DBG("%s bad parameters", hdev->name);
                return;
        }
-- 
2.20.1

Reply via email to