MGMT_STATUS_INVALID_PARAMS);
        }
 
-       expected_len = sizeof(*cp) + key_count *
-                                       sizeof(struct mgmt_link_key_info);
+       expected_len = struct_size(cp, keys, key_count);
        if (expected_len != len) {
                bt_dev_err(hdev, "load_link_keys: expected %u bytes, got %u bytes",
                           expected_len, len);
                                       MGMT_STATUS_INVALID_PARAMS);
        }
 
-       expected_len = sizeof(*cp) + irk_count * sizeof(struct mgmt_irk_info);
+       expected_len = struct_size(cp, irks, irk_count);
        if (expected_len != len) {
                bt_dev_err(hdev, "load_irks: expected %u bytes, got %u bytes",
                           expected_len, len);
                                       MGMT_STATUS_INVALID_PARAMS);
        }
 
-       expected_len = sizeof(*cp) + key_count *
-                                       sizeof(struct mgmt_ltk_info);
+       expected_len = struct_size(cp, keys, key_count);
        if (expected_len != len) {
                bt_dev_err(hdev, "load_keys: expected %u bytes, got %u bytes",
                           expected_len, len);
                                       MGMT_STATUS_INVALID_PARAMS);
        }
 
-       expected_len = sizeof(*cp) + param_count *
-                                       sizeof(struct mgmt_conn_param);
+       expected_len = struct_size(cp, params, param_count);
        if (expected_len != len) {
                bt_dev_err(hdev, "load_conn_param: expected %u bytes, got %u bytes",
                           expected_len, len);