FreeBSD Bugzilla – Attachment 248539 Details for
Bug 277115
sysutils/cdrdao: zero length and odd-sized DMA transfer attempted
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
0001-sysutils-cdrdao-Zero-or-odd-length-DMA-fix.patch
0001-sysutils-cdrdao-Zero-or-odd-length-DMA-fix.patch (text/plain), 9.28 KB, created by
Benjamin Jacobs
on 2024-02-17 18:23:50 UTC
(
hide
)
Description:
0001-sysutils-cdrdao-Zero-or-odd-length-DMA-fix.patch
Filename:
MIME Type:
Creator:
Benjamin Jacobs
Created:
2024-02-17 18:23:50 UTC
Size:
9.28 KB
patch
obsolete
>From df6003fcd3f1120e7e4962086e13bcd7e6078171 Mon Sep 17 00:00:00 2001 >From: Benjamin Jacobs <freebsd@dev.thsi.be> >Date: Sat, 17 Feb 2024 15:45:27 +0000 >Subject: [PATCH] sysutils/cdrdao: Zero or odd-length DMA fix > >* patch to fix bad CAM CCB. > >* switch to new mandir. > >PR: 277115 >--- > sysutils/cdrdao/Makefile | 2 ++ > sysutils/cdrdao/files/patch-dao_CDD2600.cc | 31 +++++++++++++++++ > sysutils/cdrdao/files/patch-dao_GenericMMC.cc | 31 +++++++++++++++++ > .../cdrdao/files/patch-dao_PlextorReader.cc | 30 +++++++++++++++++ > .../files/patch-dao_ScsiIf-freebsd-cam.cc | 20 +++++++++++ > sysutils/cdrdao/files/patch-dao_SonyCDU920.cc | 31 +++++++++++++++++ > sysutils/cdrdao/files/patch-dao_TeacCdr55.cc | 33 +++++++++++++++++++ > sysutils/cdrdao/pkg-plist | 8 ++--- > 8 files changed, 182 insertions(+), 4 deletions(-) > create mode 100644 sysutils/cdrdao/files/patch-dao_CDD2600.cc > create mode 100644 sysutils/cdrdao/files/patch-dao_GenericMMC.cc > create mode 100644 sysutils/cdrdao/files/patch-dao_PlextorReader.cc > create mode 100644 sysutils/cdrdao/files/patch-dao_ScsiIf-freebsd-cam.cc > create mode 100644 sysutils/cdrdao/files/patch-dao_SonyCDU920.cc > create mode 100644 sysutils/cdrdao/files/patch-dao_TeacCdr55.cc > >diff --git a/sysutils/cdrdao/Makefile b/sysutils/cdrdao/Makefile >index 0256027261d3..684e99938325 100644 >--- a/sysutils/cdrdao/Makefile >+++ b/sysutils/cdrdao/Makefile >@@ -1,5 +1,6 @@ > PORTNAME= cdrdao > DISTVERSION= 1_2_5 >+PORTREVISION= 1 > CATEGORIES= sysutils audio > MASTER_SITES= https://github.com/${PORTNAME}/${PORTNAME}/releases/download/rel_${DISTVERSION}/ \ > SF/${PORTNAME}/rel_${DISTVERSION} >@@ -21,6 +22,7 @@ CONFIGURE_ARGS= --with-gcdmaster=no \ > --without-pcctsinc \ > --with-posix-threads=no \ > --with-scglib >+GNU_CONFIGURE_MANPREFIX= ${PREFIX}/share > > OPTIONS_DEFINE= DOCS TOC2MP3 MP3OGG > OPTIONS_DEFAULT= MP3OGG >diff --git a/sysutils/cdrdao/files/patch-dao_CDD2600.cc b/sysutils/cdrdao/files/patch-dao_CDD2600.cc >new file mode 100644 >index 000000000000..edad29bffb4e >--- /dev/null >+++ b/sysutils/cdrdao/files/patch-dao_CDD2600.cc >@@ -0,0 +1,31 @@ >+--- dao/CDD2600.cc.orig 2024-02-17 17:56:50 UTC >++++ dao/CDD2600.cc >+@@ -641,6 +641,7 @@ CdRawToc *CDD2600::getRawToc(int sessionNr, int *len) >+ { >+ unsigned char cmd[10]; >+ unsigned short dataLen; >++ unsigned short bufLen; >+ unsigned char *data = NULL;; >+ unsigned char reqData[4]; // buffer for requestion the actual length >+ unsigned char *p = NULL; >+@@ -663,16 +664,18 @@ CdRawToc *CDD2600::getRawToc(int sessionNr, int *len) >+ } >+ >+ dataLen = ((reqData[0] << 8) | reqData[1]) + 2; >++ bufLen = dataLen + (dataLen % 2); >++ assert(bufLen >= 2); >+ >+ log_message(5, "Raw toc data len: %d", dataLen); >+ >+- data = new unsigned char[dataLen]; >++ data = new unsigned char[bufLen]; >+ >+ // read disk toc >+ cmd[7] = dataLen >> 8; >+ cmd[8] = dataLen; >+ >+- if (sendCmd(cmd, 10, NULL, 0, data, dataLen) != 0) { >++ if (sendCmd(cmd, 10, NULL, 0, data, bufLen) != 0) { >+ log_message(-2, "Cannot read raw disk toc."); >+ delete[] data; >+ return NULL; >diff --git a/sysutils/cdrdao/files/patch-dao_GenericMMC.cc b/sysutils/cdrdao/files/patch-dao_GenericMMC.cc >new file mode 100644 >index 000000000000..f71a318bcdda >--- /dev/null >+++ b/sysutils/cdrdao/files/patch-dao_GenericMMC.cc >@@ -0,0 +1,31 @@ >+--- dao/GenericMMC.cc.orig 2023-02-03 14:46:06 UTC >++++ dao/GenericMMC.cc >+@@ -2055,6 +2055,7 @@ CdRawToc *GenericMMC::getRawToc(int sessionNr, int *le >+ { >+ u8 cmd[10]; >+ u16 dataLen; >++ u16 bufLen; >+ u8 *data = NULL;; >+ u8 reqData[4]; // buffer for requestion the actual length >+ u8 *p; >+@@ -2076,16 +2077,18 @@ CdRawToc *GenericMMC::getRawToc(int sessionNr, int *le >+ } >+ >+ dataLen = ((reqData[0] << 8) | reqData[1]) + 2; >++ bufLen = dataLen + (dataLen % 2); >++ assert(bufLen >= 2); >+ >+ log_message(4, "Raw toc data len: %d", dataLen); >+ >+- data = new u8[dataLen]; >++ data = new u8[bufLen]; >+ >+ // read disk toc >+ cmd[7] = dataLen >> 8; >+ cmd[8] = dataLen; >+ >+- if (sendCmd(cmd, 10, NULL, 0, data, dataLen) != 0) { >++ if (sendCmd(cmd, 10, NULL, 0, data, bufLen) != 0) { >+ log_message(-2, "Cannot read disk toc."); >+ delete[] data; >+ return NULL; >diff --git a/sysutils/cdrdao/files/patch-dao_PlextorReader.cc b/sysutils/cdrdao/files/patch-dao_PlextorReader.cc >new file mode 100644 >index 000000000000..149f1cc098aa >--- /dev/null >+++ b/sysutils/cdrdao/files/patch-dao_PlextorReader.cc >@@ -0,0 +1,30 @@ >+--- dao/PlextorReader.cc.orig 2024-02-17 17:57:48 UTC >++++ dao/PlextorReader.cc >+@@ -430,6 +430,7 @@ CdRawToc *PlextorReader::getRawToc(int sessionNr, int >+ { >+ unsigned char cmd[10]; >+ unsigned short dataLen; >++ unsigned short bufLen; >+ unsigned char *data = NULL;; >+ unsigned char reqData[4]; // buffer for requestion the actual length >+ unsigned char *p = NULL; >+@@ -451,16 +452,17 @@ CdRawToc *PlextorReader::getRawToc(int sessionNr, int >+ } >+ >+ dataLen = ((reqData[0] << 8) | reqData[1]) + 2; >++ bufLen = dataLen + (dataLen % 2); >+ >+ log_message(4, "Raw toc data len: %d", dataLen); >+ >+- data = new unsigned char[dataLen]; >++ data = new unsigned char[bufLen]; >+ >+ // read disk toc >+ cmd[7] = dataLen >> 8; >+ cmd[8] = dataLen; >+ >+- if (sendCmd(cmd, 10, NULL, 0, data, dataLen) != 0) { >++ if (sendCmd(cmd, 10, NULL, 0, data, bufLen) != 0) { >+ log_message(-2, "Cannot read raw disk toc."); >+ delete[] data; >+ return NULL; >diff --git a/sysutils/cdrdao/files/patch-dao_ScsiIf-freebsd-cam.cc b/sysutils/cdrdao/files/patch-dao_ScsiIf-freebsd-cam.cc >new file mode 100644 >index 000000000000..5ccbad82aa65 >--- /dev/null >+++ b/sysutils/cdrdao/files/patch-dao_ScsiIf-freebsd-cam.cc >@@ -0,0 +1,20 @@ >+--- dao/ScsiIf-freebsd-cam.cc.orig 2023-01-25 14:30:35 UTC >++++ dao/ScsiIf-freebsd-cam.cc >+@@ -123,10 +123,15 @@ int ScsiIf::sendCmd(const unsigned char *cmd, int cmdL >+ data_len = dataOutLen; >+ flags = CAM_DIR_OUT; >+ } >+- else if (dataIn && dataInLen > 0) { >++ else if (dataIn && dataInLen > 1) { >+ data_ptr = dataIn; >+- data_len = dataInLen; >++ data_len = dataInLen - (dataInLen % 2); >+ flags = CAM_DIR_IN; >++ } >++ else { >++ data_len = 0; >++ data_ptr = (u_int8_t *)0; >++ flags = CAM_DIR_NONE; >+ } >+ >+ cam_fill_csio(&impl_->ccb->csio, >diff --git a/sysutils/cdrdao/files/patch-dao_SonyCDU920.cc b/sysutils/cdrdao/files/patch-dao_SonyCDU920.cc >new file mode 100644 >index 000000000000..878cf83f772b >--- /dev/null >+++ b/sysutils/cdrdao/files/patch-dao_SonyCDU920.cc >@@ -0,0 +1,31 @@ >+--- dao/SonyCDU920.cc.orig 2024-02-17 17:58:18 UTC >++++ dao/SonyCDU920.cc >+@@ -779,6 +779,7 @@ CdRawToc *SonyCDU920::getRawToc(int sessionNr, int *le >+ { >+ unsigned char cmd[10]; >+ unsigned short dataLen; >++ unsigned short bufLen; >+ unsigned char *data = NULL;; >+ unsigned char reqData[4]; // buffer for requestion the actual length >+ unsigned char *p; >+@@ -800,16 +801,18 @@ CdRawToc *SonyCDU920::getRawToc(int sessionNr, int *le >+ } >+ >+ dataLen = ((reqData[0] << 8) | reqData[1]) + 2; >++ bufLen = dataLen + (dataLen % 2); >++ assert(bufLen >= 2); >+ >+ log_message(4, "Raw toc data len: %d", dataLen); >+ >+- data = new unsigned char[dataLen]; >++ data = new unsigned char[bufLen]; >+ >+ // read disk toc >+ cmd[7] = dataLen >> 8; >+ cmd[8] = dataLen; >+ >+- if (sendCmd(cmd, 10, NULL, 0, data, dataLen) != 0) { >++ if (sendCmd(cmd, 10, NULL, 0, data, bufLen) != 0) { >+ log_message(-2, "Cannot read disk toc."); >+ delete[] data; >+ return NULL; >diff --git a/sysutils/cdrdao/files/patch-dao_TeacCdr55.cc b/sysutils/cdrdao/files/patch-dao_TeacCdr55.cc >new file mode 100644 >index 000000000000..89b5cc920306 >--- /dev/null >+++ b/sysutils/cdrdao/files/patch-dao_TeacCdr55.cc >@@ -0,0 +1,33 @@ >+--- dao/TeacCdr55.cc.orig 2024-02-17 17:59:23 UTC >++++ dao/TeacCdr55.cc >+@@ -1264,6 +1264,7 @@ CdRawToc *TeacCdr55::getRawToc(int sessionNr, int *len >+ { >+ unsigned char cmd[10]; >+ unsigned short dataLen; >++ unsigned short bufLen; >+ unsigned char *data = NULL;; >+ unsigned char reqData[4]; // buffer for requestion the actual length >+ unsigned char *p = NULL; >+@@ -1285,19 +1286,20 @@ CdRawToc *TeacCdr55::getRawToc(int sessionNr, int *len >+ } >+ >+ dataLen = ((reqData[0] << 8) | reqData[1]) + 2; >++ bufLen = dataLen + (dataLen % 2); >+ >+ log_message(4, "Raw toc data len: %d", dataLen); >+ >+ if (dataLen == 4) >+ return NULL; >+ >+- data = new unsigned char[dataLen]; >++ data = new unsigned char[bufLen]; >+ >+ // read disk toc >+ cmd[7] = dataLen >> 8; >+ cmd[8] = dataLen; >+ >+- if (sendCmd(cmd, 10, NULL, 0, data, dataLen) != 0) { >++ if (sendCmd(cmd, 10, NULL, 0, data, bufLen) != 0) { >+ log_message(-2, "Cannot read raw disk toc."); >+ delete[] data; >+ return NULL; >diff --git a/sysutils/cdrdao/pkg-plist b/sysutils/cdrdao/pkg-plist >index be2ca724326c..6c53eb53a731 100644 >--- a/sysutils/cdrdao/pkg-plist >+++ b/sysutils/cdrdao/pkg-plist >@@ -4,10 +4,10 @@ bin/toc2cddb > bin/toc2cue > %%TOC2MP3%%bin/toc2mp3 > @postunexec if [ -f %D/etc/cdrdao.conf ]; then echo "If permanently deleting this package, %D/etc/cdrdao.conf must be removed manually."; fi >-man/man1/cdrdao.1.gz >-man/man1/cue2toc.1.gz >-man/man1/toc2cddb.1.gz >-man/man1/toc2cue.1.gz >+share/man/man1/cdrdao.1.gz >+share/man/man1/cue2toc.1.gz >+share/man/man1/toc2cddb.1.gz >+share/man/man1/toc2cue.1.gz > %%DATADIR%%/drivers > %%PORTDOCS%%%%DOCSDIR%%/CREDITS > %%PORTDOCS%%%%DOCSDIR%%/ChangeLog >-- >2.43.0 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 277115
:
248537
| 248539 |
248560