Commit be4692e5 authored by Jérôme Pouiller's avatar Jérôme Pouiller Committed by Greg Kroah-Hartman

staging: wfx: send just necessary bytes

Size of hif_mib_template_frame must be sufficient to contains bytes
declared by frame_length and cannot exceed 700bytes.

Change the API to reflect that.
Signed-off-by: default avatarJérôme Pouiller <jerome.pouiller@silabs.com>
Link: https://lore.kernel.org/r/20200406111756.154086-12-Jerome.Pouiller@silabs.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 9a46a0a9
...@@ -270,12 +270,14 @@ enum hif_tmplt { ...@@ -270,12 +270,14 @@ enum hif_tmplt {
HIF_TMPLT_NA = 0x7 HIF_TMPLT_NA = 0x7
}; };
#define HIF_API_MAX_TEMPLATE_FRAME_SIZE 700
struct hif_mib_template_frame { struct hif_mib_template_frame {
u8 frame_type; u8 frame_type;
u8 init_rate:7; u8 init_rate:7;
u8 mode:1; u8 mode:1;
__le16 frame_length; __le16 frame_length;
u8 frame[700]; u8 frame[];
} __packed; } __packed;
struct hif_mib_beacon_wake_up_period { struct hif_mib_beacon_wake_up_period {
......
...@@ -148,6 +148,7 @@ int hif_set_template_frame(struct wfx_vif *wvif, struct sk_buff *skb, ...@@ -148,6 +148,7 @@ int hif_set_template_frame(struct wfx_vif *wvif, struct sk_buff *skb,
{ {
struct hif_mib_template_frame *arg; struct hif_mib_template_frame *arg;
WARN(skb->len > HIF_API_MAX_TEMPLATE_FRAME_SIZE, "frame is too big");
skb_push(skb, 4); skb_push(skb, 4);
arg = (struct hif_mib_template_frame *)skb->data; arg = (struct hif_mib_template_frame *)skb->data;
skb_pull(skb, 4); skb_pull(skb, 4);
...@@ -155,7 +156,7 @@ int hif_set_template_frame(struct wfx_vif *wvif, struct sk_buff *skb, ...@@ -155,7 +156,7 @@ int hif_set_template_frame(struct wfx_vif *wvif, struct sk_buff *skb,
arg->frame_type = frame_type; arg->frame_type = frame_type;
arg->frame_length = cpu_to_le16(skb->len); arg->frame_length = cpu_to_le16(skb->len);
return hif_write_mib(wvif->wdev, wvif->id, HIF_MIB_ID_TEMPLATE_FRAME, return hif_write_mib(wvif->wdev, wvif->id, HIF_MIB_ID_TEMPLATE_FRAME,
arg, sizeof(*arg)); arg, sizeof(*arg) + skb->len);
} }
int hif_set_mfp(struct wfx_vif *wvif, bool capable, bool required) int hif_set_mfp(struct wfx_vif *wvif, bool capable, bool required)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment