From 6b7e674877e40fd849baa97a940c87a0597d6614 Mon Sep 17 00:00:00 2001 From: OBattler Date: Mon, 10 Jan 2022 20:12:26 +0100 Subject: [PATCH 1/3] And another fix. --- src/cdrom/cdrom.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cdrom/cdrom.c b/src/cdrom/cdrom.c index b89232a46..31f875a77 100644 --- a/src/cdrom/cdrom.c +++ b/src/cdrom/cdrom.c @@ -737,8 +737,8 @@ cdrom_read_disc_info_toc(cdrom_t *dev, unsigned char *b, unsigned char track, in static int track_type_is_valid(uint8_t id, int type, int flags, int audio, int mode2) { - if (!(flags & 0x70)) { /* 0x00/0x08/0x80/0x88 are illegal modes */ - cdrom_log("CD-ROM %i: [Any Mode] 0x00/0x08/0x80/0x88 are illegal modes\n", id); + if (!(flags & 0x70) && (flags & 0xf8)) { /* 0x08/0x80/0x88 are illegal modes */ + cdrom_log("CD-ROM %i: [Any Mode] 0x08/0x80/0x88 are illegal modes\n", id); return 0; } From e0578fbf5baeb71732b5f719b4d46652d44d0387 Mon Sep 17 00:00:00 2001 From: OBattler Date: Mon, 10 Jan 2022 20:26:36 +0100 Subject: [PATCH 2/3] And another fix. --- src/scsi/scsi_cdrom.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/scsi/scsi_cdrom.c b/src/scsi/scsi_cdrom.c index e099efe07..842b8cc28 100644 --- a/src/scsi/scsi_cdrom.c +++ b/src/scsi/scsi_cdrom.c @@ -1635,6 +1635,10 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) /* If all the flag bits are cleared, then treat it as a non-data command. */ if ((cdb[9] == 0x00) && ((cdb[10] & 0x07) == 0x00)) dev->sector_len = 0; + else if ((cdb[9] == 0x00) && ((cdb[10] & 0x07) != 0x00)) { + scsi_cdrom_invalid_field(dev); + break; + } break; case GPCMD_READ_CD_OLD: case GPCMD_READ_CD: @@ -1653,6 +1657,10 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) /* If all the flag bits are cleared, then treat it as a non-data command. */ if ((cdb[9] == 0x00) && ((cdb[10] & 0x07) == 0x00)) dev->sector_len = 0; + else if ((cdb[9] == 0x00) && ((cdb[10] & 0x07) != 0x00)) { + scsi_cdrom_invalid_field(dev); + break; + } break; } From bf8227dd6c98ee57f4e472ed904a9d86830b1ac2 Mon Sep 17 00:00:00 2001 From: OBattler Date: Mon, 10 Jan 2022 20:41:43 +0100 Subject: [PATCH 3/3] And another. --- src/scsi/scsi_cdrom.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/scsi/scsi_cdrom.c b/src/scsi/scsi_cdrom.c index 842b8cc28..8a443dd77 100644 --- a/src/scsi/scsi_cdrom.c +++ b/src/scsi/scsi_cdrom.c @@ -1629,7 +1629,7 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) if ((cdb[9] & 0xf8) == 0x08) { /* 0x08 is an illegal mode */ scsi_cdrom_invalid_field(dev); - break; + return; } /* If all the flag bits are cleared, then treat it as a non-data command. */ @@ -1637,7 +1637,7 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) dev->sector_len = 0; else if ((cdb[9] == 0x00) && ((cdb[10] & 0x07) != 0x00)) { scsi_cdrom_invalid_field(dev); - break; + return; } break; case GPCMD_READ_CD_OLD: @@ -1651,7 +1651,7 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) if ((cdb[9] & 0xf8) == 0x08) { /* 0x08 is an illegal mode */ scsi_cdrom_invalid_field(dev); - break; + return; } /* If all the flag bits are cleared, then treat it as a non-data command. */ @@ -1659,7 +1659,7 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) dev->sector_len = 0; else if ((cdb[9] == 0x00) && ((cdb[10] & 0x07) != 0x00)) { scsi_cdrom_invalid_field(dev); - break; + return; } break; }