|
@@ -2493,13 +2493,14 @@ static ssize_t ca8210_test_int_user_write(
|
|
|
struct ca8210_priv *priv = filp->private_data;
|
|
|
u8 command[CA8210_SPI_BUF_SIZE];
|
|
|
|
|
|
- if (len > CA8210_SPI_BUF_SIZE) {
|
|
|
+ memset(command, SPI_IDLE, 6);
|
|
|
+ if (len > CA8210_SPI_BUF_SIZE || len < 2) {
|
|
|
dev_warn(
|
|
|
&priv->spi->dev,
|
|
|
- "userspace requested erroneously long write (%zu)\n",
|
|
|
+ "userspace requested erroneous write length (%zu)\n",
|
|
|
len
|
|
|
);
|
|
|
- return -EMSGSIZE;
|
|
|
+ return -EBADE;
|
|
|
}
|
|
|
|
|
|
ret = copy_from_user(command, in_buf, len);
|
|
@@ -2511,6 +2512,13 @@ static ssize_t ca8210_test_int_user_write(
|
|
|
);
|
|
|
return -EIO;
|
|
|
}
|
|
|
+ if (len != command[1] + 2) {
|
|
|
+ dev_err(
|
|
|
+ &priv->spi->dev,
|
|
|
+ "write len does not match packet length field\n"
|
|
|
+ );
|
|
|
+ return -EBADE;
|
|
|
+ }
|
|
|
|
|
|
ret = ca8210_test_check_upstream(command, priv->spi);
|
|
|
if (ret == 0) {
|