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);
                );
                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) {