Use a temporary buffer on SCSI commands to ensure alignment.

This commit is contained in:
2020-10-24 14:43:15 +01:00
parent 5fbb33edba
commit 7b652292c4

View File

@@ -458,12 +458,21 @@ void* WorkingLoop(void* arguments)
// TODO: Check size of buffers + size of packet is not bigger than size in header // TODO: Check size of buffers + size of packet is not bigger than size in header
if(le32toh(pkt_cmd_scsi->cdb_len) > 0) cdb_buf = in_buf + sizeof(AaruPacketCmdScsi); if(le32toh(pkt_cmd_scsi->cdb_len) > 0)
{
cdb_buf = malloc(le32toh(pkt_cmd_scsi->cdb_len));
memcpy(cdb_buf, in_buf + sizeof(AaruPacketCmdScsi), le32toh(pkt_cmd_scsi->cdb_len));
}
else else
cdb_buf = NULL; cdb_buf = NULL;
if(le32toh(pkt_cmd_scsi->buf_len) > 0) if(le32toh(pkt_cmd_scsi->buf_len) > 0)
buffer = in_buf + le32toh(pkt_cmd_scsi->cdb_len) + sizeof(AaruPacketCmdScsi); {
buffer = malloc(le32toh(pkt_cmd_scsi->buf_len));
memcpy(buffer,
in_buf + le32toh(pkt_cmd_scsi->cdb_len) + sizeof(AaruPacketCmdScsi),
le32toh(pkt_cmd_scsi->buf_len));
}
else else
buffer = NULL; buffer = NULL;
@@ -515,6 +524,8 @@ void* WorkingLoop(void* arguments)
NetWrite(cli_ctx, pkt_res_scsi, le32toh(pkt_res_scsi->hdr.len)); NetWrite(cli_ctx, pkt_res_scsi, le32toh(pkt_res_scsi->hdr.len));
free(pkt_cmd_scsi); free(pkt_cmd_scsi);
free(pkt_res_scsi); free(pkt_res_scsi);
if(cdb_buf) free(cdb_buf);
if(buffer) free(buffer);
if(sense_buf) free(sense_buf); if(sense_buf) free(sense_buf);
continue; continue;
case AARUREMOTE_PACKET_TYPE_COMMAND_GET_SDHCI_REGISTERS: case AARUREMOTE_PACKET_TYPE_COMMAND_GET_SDHCI_REGISTERS: