Message ID | 20241029134637.2261336-1-quzicheng@huawei.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | [v2] iio: adc: ad7923: Fix buffer overflow for tx_buf and ring_xfer | expand |
Gentle ping.
On Tue, 2024-10-29 at 13:46 +0000, Zicheng Qu wrote: > The AD7923 was updated to support devices with 8 channels, but the size > of tx_buf and ring_xfer was not increased accordingly, leading to a > potential buffer overflow in ad7923_update_scan_mode(). > > Fixes: 851644a60d20 ("iio: adc: ad7923: Add support for the ad7908/ad7918/ad7928") > Cc: <stable@vger.kernel.org> > Signed-off-by: Nuno Sá <noname.nuno@gmail.com> > Signed-off-by: Zicheng Qu <quzicheng@huawei.com> > --- Reviewed-by: Nuno Sa <nuno.sa@analog.com> > v2: > - Fixed: Addressed buffer overflow in ad7923_update_scan_mode() due to > insufficient tx_buf and ring_xfer size for 8-channel devices. > - Issue: Original patch attempted to fix the overflow by limiting the > length, but did not address the root cause of buffer size mismatch. > - Solution: Increased tx_buf and ring_xfer sizes recommended by Nuno to > support all 8 channels, ensuring adequate buffer capacity. > - Previous patch link: > https://lore.kernel.org/linux-iio/20241028142357.1032380-1-quzicheng@huawei.com/T/#u > drivers/iio/adc/ad7923.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/iio/adc/ad7923.c b/drivers/iio/adc/ad7923.c > index 09680015a7ab..acc44cb34f82 100644 > --- a/drivers/iio/adc/ad7923.c > +++ b/drivers/iio/adc/ad7923.c > @@ -48,7 +48,7 @@ > > struct ad7923_state { > struct spi_device *spi; > - struct spi_transfer ring_xfer[5]; > + struct spi_transfer ring_xfer[9]; > struct spi_transfer scan_single_xfer[2]; > struct spi_message ring_msg; > struct spi_message scan_single_msg; > @@ -64,7 +64,7 @@ struct ad7923_state { > * Length = 8 channels + 4 extra for 8 byte timestamp > */ > __be16 rx_buf[12] __aligned(IIO_DMA_MINALIGN); > - __be16 tx_buf[4]; > + __be16 tx_buf[8]; > }; > > struct ad7923_chip_info {
On Thu, 31 Oct 2024 15:20:24 +0100 Nuno Sá <noname.nuno@gmail.com> wrote: > On Tue, 2024-10-29 at 13:46 +0000, Zicheng Qu wrote: > > The AD7923 was updated to support devices with 8 channels, but the size > > of tx_buf and ring_xfer was not increased accordingly, leading to a > > potential buffer overflow in ad7923_update_scan_mode(). > > > > Fixes: 851644a60d20 ("iio: adc: ad7923: Add support for the ad7908/ad7918/ad7928") > > Cc: <stable@vger.kernel.org> > > Signed-off-by: Nuno Sá <noname.nuno@gmail.com> > > Signed-off-by: Zicheng Qu <quzicheng@huawei.com> > > --- > > Reviewed-by: Nuno Sa <nuno.sa@analog.com> > Confusing one. I'll fix the authorship up for your analog address Zicheng, usually a Suggested-by after checking with the author if it's a patch in a review thread. You can't really give someone elses' SoB without them explicitly sending it. If Nuno let you know that was fine off the list, then just mention that under --- This time I'm going to take Nuno's RB as fine to indicate no objection to the SoB. Nuno, feel free to shout if you want to handle this differently. Applied. Jonathan > > v2: > > - Fixed: Addressed buffer overflow in ad7923_update_scan_mode() due to > > insufficient tx_buf and ring_xfer size for 8-channel devices. > > - Issue: Original patch attempted to fix the overflow by limiting the > > length, but did not address the root cause of buffer size mismatch. > > - Solution: Increased tx_buf and ring_xfer sizes recommended by Nuno to > > support all 8 channels, ensuring adequate buffer capacity. > > - Previous patch link: > > https://lore.kernel.org/linux-iio/20241028142357.1032380-1-quzicheng@huawei.com/T/#u > > drivers/iio/adc/ad7923.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/iio/adc/ad7923.c b/drivers/iio/adc/ad7923.c > > index 09680015a7ab..acc44cb34f82 100644 > > --- a/drivers/iio/adc/ad7923.c > > +++ b/drivers/iio/adc/ad7923.c > > @@ -48,7 +48,7 @@ > > > > struct ad7923_state { > > struct spi_device *spi; > > - struct spi_transfer ring_xfer[5]; > > + struct spi_transfer ring_xfer[9]; > > struct spi_transfer scan_single_xfer[2]; > > struct spi_message ring_msg; > > struct spi_message scan_single_msg; > > @@ -64,7 +64,7 @@ struct ad7923_state { > > * Length = 8 channels + 4 extra for 8 byte timestamp > > */ > > __be16 rx_buf[12] __aligned(IIO_DMA_MINALIGN); > > - __be16 tx_buf[4]; > > + __be16 tx_buf[8]; > > }; > > > > struct ad7923_chip_info { >
Hi Jonathan and Nuno, Thank you for pointing that out. I included Nuno's name because I think the final correct solution came from Nuno, and I wanted to acknowledge the contribution. However, I didn't realize I needed to confirm with Nuno before adding the sign-off. In the future, I will ensure to discuss with Nuno or anyone else involved to avoid similar issues, or use "suggested by" instead. I apologize to Nuno for any confusion this may have caused. Thanks for the guidance and apologize again. Best regards, Zicheng Qu On 2024/11/1 5:05, Jonathan Cameron wrote: > On Thu, 31 Oct 2024 15:20:24 +0100 > Nuno Sá <noname.nuno@gmail.com> wrote: > >> On Tue, 2024-10-29 at 13:46 +0000, Zicheng Qu wrote: >>> The AD7923 was updated to support devices with 8 channels, but the size >>> of tx_buf and ring_xfer was not increased accordingly, leading to a >>> potential buffer overflow in ad7923_update_scan_mode(). >>> >>> Fixes: 851644a60d20 ("iio: adc: ad7923: Add support for the ad7908/ad7918/ad7928") >>> Cc: <stable@vger.kernel.org> >>> Signed-off-by: Nuno Sá <noname.nuno@gmail.com> >>> Signed-off-by: Zicheng Qu <quzicheng@huawei.com> >>> --- >> Reviewed-by: Nuno Sa <nuno.sa@analog.com> >> > Confusing one. I'll fix the authorship up for your analog address > > Zicheng, usually a Suggested-by after checking with the author if it's > a patch in a review thread. > > You can't really give someone elses' SoB without them explicitly sending it. > If Nuno let you know that was fine off the list, then just mention that under > --- > > This time I'm going to take Nuno's RB as fine to indicate no objection > to the SoB. Nuno, feel free to shout if you want to handle this differently. > > Applied. > > Jonathan > > >>> v2: >>> - Fixed: Addressed buffer overflow in ad7923_update_scan_mode() due to >>> insufficient tx_buf and ring_xfer size for 8-channel devices. >>> - Issue: Original patch attempted to fix the overflow by limiting the >>> length, but did not address the root cause of buffer size mismatch. >>> - Solution: Increased tx_buf and ring_xfer sizes recommended by Nuno to >>> support all 8 channels, ensuring adequate buffer capacity. >>> - Previous patch link: >>> https://lore.kernel.org/linux-iio/20241028142357.1032380-1-quzicheng@huawei.com/T/#u >>> drivers/iio/adc/ad7923.c | 4 ++-- >>> 1 file changed, 2 insertions(+), 2 deletions(-) >>> >>> diff --git a/drivers/iio/adc/ad7923.c b/drivers/iio/adc/ad7923.c >>> index 09680015a7ab..acc44cb34f82 100644 >>> --- a/drivers/iio/adc/ad7923.c >>> +++ b/drivers/iio/adc/ad7923.c >>> @@ -48,7 +48,7 @@ >>> >>> struct ad7923_state { >>> struct spi_device *spi; >>> - struct spi_transfer ring_xfer[5]; >>> + struct spi_transfer ring_xfer[9]; >>> struct spi_transfer scan_single_xfer[2]; >>> struct spi_message ring_msg; >>> struct spi_message scan_single_msg; >>> @@ -64,7 +64,7 @@ struct ad7923_state { >>> * Length = 8 channels + 4 extra for 8 byte timestamp >>> */ >>> __be16 rx_buf[12] __aligned(IIO_DMA_MINALIGN); >>> - __be16 tx_buf[4]; >>> + __be16 tx_buf[8]; >>> }; >>> >>> struct ad7923_chip_info {
On Thu, 2024-10-31 at 21:05 +0000, Jonathan Cameron wrote: > On Thu, 31 Oct 2024 15:20:24 +0100 > Nuno Sá <noname.nuno@gmail.com> wrote: > > > On Tue, 2024-10-29 at 13:46 +0000, Zicheng Qu wrote: > > > The AD7923 was updated to support devices with 8 channels, but the size > > > of tx_buf and ring_xfer was not increased accordingly, leading to a > > > potential buffer overflow in ad7923_update_scan_mode(). > > > > > > Fixes: 851644a60d20 ("iio: adc: ad7923: Add support for the > > > ad7908/ad7918/ad7928") > > > Cc: <stable@vger.kernel.org> > > > Signed-off-by: Nuno Sá <noname.nuno@gmail.com> > > > Signed-off-by: Zicheng Qu <quzicheng@huawei.com> > > > --- > > > > Reviewed-by: Nuno Sa <nuno.sa@analog.com> > > > > Confusing one. I'll fix the authorship up for your analog address > > Zicheng, usually a Suggested-by after checking with the author if it's > a patch in a review thread. > > You can't really give someone elses' SoB without them explicitly sending it. > If Nuno let you know that was fine off the list, then just mention that under > --- > > This time I'm going to take Nuno's RB as fine to indicate no objection > to the SoB. Nuno, feel free to shout if you want to handle this differently. > Oh, TBH, I did not realized by SOB tag was there. I'm fine with it even though I agree a Suggested-by would likely make more sense. - Nuno Sá > Applied. > > Jonathan > > > > > v2: > > > - Fixed: Addressed buffer overflow in ad7923_update_scan_mode() due to > > > insufficient tx_buf and ring_xfer size for 8-channel devices. > > > - Issue: Original patch attempted to fix the overflow by limiting the > > > length, but did not address the root cause of buffer size mismatch. > > > - Solution: Increased tx_buf and ring_xfer sizes recommended by Nuno to > > > support all 8 channels, ensuring adequate buffer capacity. > > > - Previous patch link: > > > https://lore.kernel.org/linux-iio/20241028142357.1032380-1-quzicheng@huawei.com/T/#u > > > drivers/iio/adc/ad7923.c | 4 ++-- > > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > > > diff --git a/drivers/iio/adc/ad7923.c b/drivers/iio/adc/ad7923.c > > > index 09680015a7ab..acc44cb34f82 100644 > > > --- a/drivers/iio/adc/ad7923.c > > > +++ b/drivers/iio/adc/ad7923.c > > > @@ -48,7 +48,7 @@ > > > > > > struct ad7923_state { > > > struct spi_device *spi; > > > - struct spi_transfer ring_xfer[5]; > > > + struct spi_transfer ring_xfer[9]; > > > struct spi_transfer scan_single_xfer[2]; > > > struct spi_message ring_msg; > > > struct spi_message scan_single_msg; > > > @@ -64,7 +64,7 @@ struct ad7923_state { > > > * Length = 8 channels + 4 extra for 8 byte timestamp > > > */ > > > __be16 rx_buf[12] > > > __aligned(IIO_DMA_MINALIGN); > > > - __be16 tx_buf[4]; > > > + __be16 tx_buf[8]; > > > }; > > > > > > struct ad7923_chip_info { > > >
diff --git a/drivers/iio/adc/ad7923.c b/drivers/iio/adc/ad7923.c index 09680015a7ab..acc44cb34f82 100644 --- a/drivers/iio/adc/ad7923.c +++ b/drivers/iio/adc/ad7923.c @@ -48,7 +48,7 @@ struct ad7923_state { struct spi_device *spi; - struct spi_transfer ring_xfer[5]; + struct spi_transfer ring_xfer[9]; struct spi_transfer scan_single_xfer[2]; struct spi_message ring_msg; struct spi_message scan_single_msg; @@ -64,7 +64,7 @@ struct ad7923_state { * Length = 8 channels + 4 extra for 8 byte timestamp */ __be16 rx_buf[12] __aligned(IIO_DMA_MINALIGN); - __be16 tx_buf[4]; + __be16 tx_buf[8]; }; struct ad7923_chip_info {