Skip to content

Commit

Permalink
watchdog: ziirave_wdt: Check packet length only once
Browse files Browse the repository at this point in the history
We don't need to check for packet length more than once, so drop the
extra check in ziirave_firm_upload(). While at it move the check at
the very start of __ziirave_firm_write_pkt(), as to not waste any time
preparing a packet we'll never use.

Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Cc: Chris Healy <cphealy@gmail.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Rick Ramstetter <rick@anteaterllc.com>
Cc: linux-watchdog@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/20190812200906.31344-8-andrew.smirnov@gmail.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
  • Loading branch information
Andrey Smirnov authored and Wim Van Sebroeck committed Sep 17, 2019
1 parent 5870f49 commit 08188e8
Showing 1 changed file with 7 additions and 10 deletions.
17 changes: 7 additions & 10 deletions drivers/watchdog/ziirave_wdt.c
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,13 @@ static int __ziirave_firm_write_pkt(struct watchdog_device *wdd,
u8 i, checksum = 0, packet[ZIIRAVE_FIRM_PKT_TOTAL_SIZE];
int ret;

/* Check max data size */
if (len > ZIIRAVE_FIRM_PKT_DATA_SIZE) {
dev_err(&client->dev, "Firmware packet too long (%d)\n",
len);
return -EMSGSIZE;
}

memset(packet, 0, ARRAY_SIZE(packet));

/* Packet length */
Expand All @@ -261,9 +268,6 @@ static int __ziirave_firm_write_pkt(struct watchdog_device *wdd,
packet[1] = addr16 & 0xff;
packet[2] = (addr16 & 0xff00) >> 8;

/* Packet data */
if (len > ZIIRAVE_FIRM_PKT_DATA_SIZE)
return -EMSGSIZE;
memcpy(packet + 3, data, len);

/* Packet checksum */
Expand Down Expand Up @@ -382,13 +386,6 @@ static int ziirave_firm_upload(struct watchdog_device *wdd,
if (!be16_to_cpu(rec->len))
break;

/* Check max data size */
if (be16_to_cpu(rec->len) > ZIIRAVE_FIRM_PKT_DATA_SIZE) {
dev_err(&client->dev, "Firmware packet too long (%d)\n",
be16_to_cpu(rec->len));
return -EMSGSIZE;
}

ret = ziirave_firm_write_pkt(wdd, be32_to_cpu(rec->addr),
rec->data, be16_to_cpu(rec->len));
if (ret)
Expand Down

0 comments on commit 08188e8

Please sign in to comment.