drm/i2c: tda998x: Remove VLA usage
There's an ongoing effort to remove VLAs[1] from the kernel to eventually turn on -Wvla. The vla in reg_write_range is based on the length of data passed. The one use of a non-constant size for this range is bounded by the size buffer passed to hdmi_infoframe_pack which is a fixed size. Switch to this upper bound. [1] https://lkml.org/lkml/2018/3/7/621 Signed-off-by: Laura Abbott <labbott@redhat.com> Reviewed-by: Kees Cook <keescook@chromium.org> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: https://patchwork.freedesktop.org/patch/msgid/20180411010330.17866-1-labbott@redhat.com
This commit is contained in:
parent
520ea93475
commit
ca510ead96
@ -466,13 +466,22 @@ out:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define MAX_WRITE_RANGE_BUF 32
|
||||||
|
|
||||||
static void
|
static void
|
||||||
reg_write_range(struct tda998x_priv *priv, u16 reg, u8 *p, int cnt)
|
reg_write_range(struct tda998x_priv *priv, u16 reg, u8 *p, int cnt)
|
||||||
{
|
{
|
||||||
struct i2c_client *client = priv->hdmi;
|
struct i2c_client *client = priv->hdmi;
|
||||||
u8 buf[cnt+1];
|
/* This is the maximum size of the buffer passed in */
|
||||||
|
u8 buf[MAX_WRITE_RANGE_BUF + 1];
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (cnt > MAX_WRITE_RANGE_BUF) {
|
||||||
|
dev_err(&client->dev, "Fixed write buffer too small (%d)\n",
|
||||||
|
MAX_WRITE_RANGE_BUF);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
buf[0] = REG2ADDR(reg);
|
buf[0] = REG2ADDR(reg);
|
||||||
memcpy(&buf[1], p, cnt);
|
memcpy(&buf[1], p, cnt);
|
||||||
|
|
||||||
@ -679,7 +688,7 @@ static void
|
|||||||
tda998x_write_if(struct tda998x_priv *priv, u8 bit, u16 addr,
|
tda998x_write_if(struct tda998x_priv *priv, u8 bit, u16 addr,
|
||||||
union hdmi_infoframe *frame)
|
union hdmi_infoframe *frame)
|
||||||
{
|
{
|
||||||
u8 buf[32];
|
u8 buf[MAX_WRITE_RANGE_BUF];
|
||||||
ssize_t len;
|
ssize_t len;
|
||||||
|
|
||||||
len = hdmi_infoframe_pack(frame, buf, sizeof(buf));
|
len = hdmi_infoframe_pack(frame, buf, sizeof(buf));
|
||||||
|
Loading…
Reference in New Issue
Block a user