| From: Eliot Blennerhassett <eliot@blennerhassett.gen.nz> |
| Date: Thu, 20 Nov 2014 16:22:57 +1300 |
| Subject: ALSA: asihpi: used parts of message/response are zeroed before use |
| |
| commit 51e6f47dd2e3463dac6f37128fd7b7cb40c500de upstream. |
| |
| Signed-off-by: Eliot Blennerhassett <eliot@blennerhassett.gen.nz> |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| sound/pci/asihpi/hpimsginit.c | 30 ++++++++++++++++++++---------- |
| 1 file changed, 20 insertions(+), 10 deletions(-) |
| |
| --- a/sound/pci/asihpi/hpimsginit.c |
| +++ b/sound/pci/asihpi/hpimsginit.c |
| @@ -1,7 +1,7 @@ |
| /****************************************************************************** |
| |
| AudioScience HPI driver |
| - Copyright (C) 1997-2011 AudioScience Inc. <support@audioscience.com> |
| + Copyright (C) 1997-2014 AudioScience Inc. <support@audioscience.com> |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of version 2 of the GNU General Public License as |
| @@ -37,11 +37,15 @@ static u16 gwSSX2_bypass; |
| static void hpi_init_message(struct hpi_message *phm, u16 object, |
| u16 function) |
| { |
| - memset(phm, 0, sizeof(*phm)); |
| + u16 size; |
| + |
| if ((object > 0) && (object <= HPI_OBJ_MAXINDEX)) |
| - phm->size = msg_size[object]; |
| + size = msg_size[object]; |
| else |
| - phm->size = sizeof(*phm); |
| + size = sizeof(*phm); |
| + |
| + memset(phm, 0, size); |
| + phm->size = size; |
| |
| if (gwSSX2_bypass) |
| phm->type = HPI_TYPE_SSX2BYPASS_MESSAGE; |
| @@ -60,12 +64,16 @@ static void hpi_init_message(struct hpi_ |
| void hpi_init_response(struct hpi_response *phr, u16 object, u16 function, |
| u16 error) |
| { |
| - memset(phr, 0, sizeof(*phr)); |
| - phr->type = HPI_TYPE_RESPONSE; |
| + u16 size; |
| + |
| if ((object > 0) && (object <= HPI_OBJ_MAXINDEX)) |
| - phr->size = res_size[object]; |
| + size = res_size[object]; |
| else |
| - phr->size = sizeof(*phr); |
| + size = sizeof(*phr); |
| + |
| + memset(phr, 0, sizeof(*phr)); |
| + phr->size = size; |
| + phr->type = HPI_TYPE_RESPONSE; |
| phr->object = object; |
| phr->function = function; |
| phr->error = error; |
| @@ -86,7 +94,7 @@ void hpi_init_message_response(struct hp |
| static void hpi_init_messageV1(struct hpi_message_header *phm, u16 size, |
| u16 object, u16 function) |
| { |
| - memset(phm, 0, sizeof(*phm)); |
| + memset(phm, 0, size); |
| if ((object > 0) && (object <= HPI_OBJ_MAXINDEX)) { |
| phm->size = size; |
| phm->type = HPI_TYPE_REQUEST; |
| @@ -100,7 +108,9 @@ static void hpi_init_messageV1(struct hp |
| void hpi_init_responseV1(struct hpi_response_header *phr, u16 size, |
| u16 object, u16 function) |
| { |
| - memset(phr, 0, sizeof(*phr)); |
| + (void)object; |
| + (void)function; |
| + memset(phr, 0, size); |
| phr->size = size; |
| phr->version = 1; |
| phr->type = HPI_TYPE_RESPONSE; |