Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f15ebb63 authored by David Woodhouse's avatar David Woodhouse Committed by David S. Miller
Browse files

libertas: change inference about buffer size in lbs_cmd()



sizeof(*cmd) is going to give the total size of the data structure that
we allocated, more often than not. But the size of the command to be
_sent_ could be a lot smaller, as it is in the KEY_MATERIAL and
SUBSCRIBE_EVENT commands for example. So swap them round; let the caller
set the _command_ size explicitly in the header, and infer the
maximum response size from the data structure.

Signed-off-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 4f59abf1
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -6,13 +6,15 @@
#include "hostcmd.h"
#include "dev.h"

#define lbs_cmd(priv, cmdnr, cmd, cb, cb_arg)	\
	__lbs_cmd(priv, cmdnr, &(cmd)->hdr, sizeof(*(cmd)), cb, cb_arg)
/* lbs_cmd() infers the size of the buffer to copy data back into, from
   the size of the target of the pointer. Since the command to be sent 
   may often be smaller, that size is set in cmd->size by the caller.*/
#define lbs_cmd(priv, cmdnr, cmd, cb, cb_arg)	({		\
	uint16_t __sz = le16_to_cpu((cmd)->hdr.size);		\
	(cmd)->hdr.size = cpu_to_le16(sizeof(*(cmd)));		\
	__lbs_cmd(priv, cmdnr, &(cmd)->hdr, __sz, cb, cb_arg);	\
})


/* lbs_cmd_with_response() infers the size of the command to be _sent_
   and requires that the caller sets cmd->size to the (LE) size of
   the _response_ buffer. */
#define lbs_cmd_with_response(priv, cmdnr, cmd)	\
	lbs_cmd(priv, cmdnr, cmd, lbs_cmd_copyback, (unsigned long) (cmd))