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: Jérôme Pouiller <jerome.pouiller@silabs.com> Link: https://lore.kernel.org/r/20200406111756.154086-12-Jerome.Pouiller@silabs.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
9a46a0a93b
commit
be4692e5e0
@ -270,12 +270,14 @@ enum hif_tmplt {
|
||||
HIF_TMPLT_NA = 0x7
|
||||
};
|
||||
|
||||
#define HIF_API_MAX_TEMPLATE_FRAME_SIZE 700
|
||||
|
||||
struct hif_mib_template_frame {
|
||||
u8 frame_type;
|
||||
u8 init_rate:7;
|
||||
u8 mode:1;
|
||||
__le16 frame_length;
|
||||
u8 frame[700];
|
||||
u8 frame[];
|
||||
} __packed;
|
||||
|
||||
struct hif_mib_beacon_wake_up_period {
|
||||
|
@ -148,6 +148,7 @@ int hif_set_template_frame(struct wfx_vif *wvif, struct sk_buff *skb,
|
||||
{
|
||||
struct hif_mib_template_frame *arg;
|
||||
|
||||
WARN(skb->len > HIF_API_MAX_TEMPLATE_FRAME_SIZE, "frame is too big");
|
||||
skb_push(skb, 4);
|
||||
arg = (struct hif_mib_template_frame *)skb->data;
|
||||
skb_pull(skb, 4);
|
||||
@ -155,7 +156,7 @@ int hif_set_template_frame(struct wfx_vif *wvif, struct sk_buff *skb,
|
||||
arg->frame_type = frame_type;
|
||||
arg->frame_length = cpu_to_le16(skb->len);
|
||||
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)
|
||||
|
Loading…
Reference in New Issue
Block a user