Loading sound/pci/asihpi/hpi6205.c +8 −7 Original line number Diff line number Diff line Loading @@ -2085,13 +2085,13 @@ static u16 message_response_sequence(struct hpi_adapter_obj *pao, u16 err = 0; message_count++; if (phm->size > sizeof(interface->u)) { if (phm->size > sizeof(interface->u.message_buffer)) { phr->error = HPI_ERROR_MESSAGE_BUFFER_TOO_SMALL; phr->specific_error = sizeof(interface->u); phr->specific_error = sizeof(interface->u.message_buffer); phr->size = sizeof(struct hpi_response_header); HPI_DEBUG_LOG(ERROR, "message len %d too big for buffer %zd \n", phm->size, sizeof(interface->u)); sizeof(interface->u.message_buffer)); return 0; } Loading Loading @@ -2123,18 +2123,19 @@ static u16 message_response_sequence(struct hpi_adapter_obj *pao, /* read the result */ if (time_out) { if (interface->u.response_buffer.size <= phr->size) if (interface->u.response_buffer.response.size <= phr->size) memcpy(phr, &interface->u.response_buffer, interface->u.response_buffer.size); interface->u.response_buffer.response.size); else { HPI_DEBUG_LOG(ERROR, "response len %d too big for buffer %d\n", interface->u.response_buffer.size, phr->size); interface->u.response_buffer.response.size, phr->size); memcpy(phr, &interface->u.response_buffer, sizeof(struct hpi_response_header)); phr->error = HPI_ERROR_RESPONSE_BUFFER_TOO_SMALL; phr->specific_error = interface->u.response_buffer.size; interface->u.response_buffer.response.size; phr->size = sizeof(struct hpi_response_header); } } Loading sound/pci/asihpi/hpi6205.h +19 −6 Original line number Diff line number Diff line /***************************************************************************** AudioScience HPI driver Copyright (C) 1997-2010 AudioScience Inc. <support@audioscience.com> Copyright (C) 1997-2011 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 Loading Loading @@ -70,15 +70,28 @@ The Host located memory buffer that the 6205 will bus master in and out of. ************************************************************/ #define HPI6205_SIZEOF_DATA (16*1024) struct message_buffer_6205 { struct hpi_message message; char data[256]; }; struct response_buffer_6205 { struct hpi_response response; char data[256]; }; union buffer_6205 { struct message_buffer_6205 message_buffer; struct response_buffer_6205 response_buffer; u8 b_data[HPI6205_SIZEOF_DATA]; }; struct bus_master_interface { u32 host_cmd; u32 dsp_ack; u32 transfer_size_in_bytes; union { struct hpi_message_header message_buffer; struct hpi_response_header response_buffer; u8 b_data[HPI6205_SIZEOF_DATA]; } u; union buffer_6205 u; struct controlcache_6205 control_cache; struct async_event_buffer_6205 async_buffer; struct hpi_hostbuffer_status Loading sound/pci/asihpi/hpicmn.c +7 −6 Original line number Diff line number Diff line Loading @@ -315,8 +315,7 @@ short hpi_check_control_cache(struct hpi_control_cache *p_cache, short found = 1; struct hpi_control_cache_info *pI; struct hpi_control_cache_single *pC; struct hpi_control_cache_pad *p_pad; u16 response_size; if (!find_control(phm->obj_index, p_cache, &pI)) { HPI_DEBUG_LOG(VERBOSE, "HPICMN find_control() failed for adap %d\n", Loading @@ -326,11 +325,15 @@ short hpi_check_control_cache(struct hpi_control_cache *p_cache, phr->error = 0; /* set the default response size */ response_size = sizeof(struct hpi_response_header) + sizeof(struct hpi_control_res); /* pC is the default cached control strucure. May be cast to something else in the following switch statement. */ pC = (struct hpi_control_cache_single *)pI; p_pad = (struct hpi_control_cache_pad *)pI; switch (pI->control_type) { Loading Loading @@ -529,9 +532,7 @@ short hpi_check_control_cache(struct hpi_control_cache *p_cache, pI->control_index, pI->control_type, phm->u.c.attribute); if (found) phr->size = sizeof(struct hpi_response_header) + sizeof(struct hpi_control_res); phr->size = response_size; return found; } Loading Loading
sound/pci/asihpi/hpi6205.c +8 −7 Original line number Diff line number Diff line Loading @@ -2085,13 +2085,13 @@ static u16 message_response_sequence(struct hpi_adapter_obj *pao, u16 err = 0; message_count++; if (phm->size > sizeof(interface->u)) { if (phm->size > sizeof(interface->u.message_buffer)) { phr->error = HPI_ERROR_MESSAGE_BUFFER_TOO_SMALL; phr->specific_error = sizeof(interface->u); phr->specific_error = sizeof(interface->u.message_buffer); phr->size = sizeof(struct hpi_response_header); HPI_DEBUG_LOG(ERROR, "message len %d too big for buffer %zd \n", phm->size, sizeof(interface->u)); sizeof(interface->u.message_buffer)); return 0; } Loading Loading @@ -2123,18 +2123,19 @@ static u16 message_response_sequence(struct hpi_adapter_obj *pao, /* read the result */ if (time_out) { if (interface->u.response_buffer.size <= phr->size) if (interface->u.response_buffer.response.size <= phr->size) memcpy(phr, &interface->u.response_buffer, interface->u.response_buffer.size); interface->u.response_buffer.response.size); else { HPI_DEBUG_LOG(ERROR, "response len %d too big for buffer %d\n", interface->u.response_buffer.size, phr->size); interface->u.response_buffer.response.size, phr->size); memcpy(phr, &interface->u.response_buffer, sizeof(struct hpi_response_header)); phr->error = HPI_ERROR_RESPONSE_BUFFER_TOO_SMALL; phr->specific_error = interface->u.response_buffer.size; interface->u.response_buffer.response.size; phr->size = sizeof(struct hpi_response_header); } } Loading
sound/pci/asihpi/hpi6205.h +19 −6 Original line number Diff line number Diff line /***************************************************************************** AudioScience HPI driver Copyright (C) 1997-2010 AudioScience Inc. <support@audioscience.com> Copyright (C) 1997-2011 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 Loading Loading @@ -70,15 +70,28 @@ The Host located memory buffer that the 6205 will bus master in and out of. ************************************************************/ #define HPI6205_SIZEOF_DATA (16*1024) struct message_buffer_6205 { struct hpi_message message; char data[256]; }; struct response_buffer_6205 { struct hpi_response response; char data[256]; }; union buffer_6205 { struct message_buffer_6205 message_buffer; struct response_buffer_6205 response_buffer; u8 b_data[HPI6205_SIZEOF_DATA]; }; struct bus_master_interface { u32 host_cmd; u32 dsp_ack; u32 transfer_size_in_bytes; union { struct hpi_message_header message_buffer; struct hpi_response_header response_buffer; u8 b_data[HPI6205_SIZEOF_DATA]; } u; union buffer_6205 u; struct controlcache_6205 control_cache; struct async_event_buffer_6205 async_buffer; struct hpi_hostbuffer_status Loading
sound/pci/asihpi/hpicmn.c +7 −6 Original line number Diff line number Diff line Loading @@ -315,8 +315,7 @@ short hpi_check_control_cache(struct hpi_control_cache *p_cache, short found = 1; struct hpi_control_cache_info *pI; struct hpi_control_cache_single *pC; struct hpi_control_cache_pad *p_pad; u16 response_size; if (!find_control(phm->obj_index, p_cache, &pI)) { HPI_DEBUG_LOG(VERBOSE, "HPICMN find_control() failed for adap %d\n", Loading @@ -326,11 +325,15 @@ short hpi_check_control_cache(struct hpi_control_cache *p_cache, phr->error = 0; /* set the default response size */ response_size = sizeof(struct hpi_response_header) + sizeof(struct hpi_control_res); /* pC is the default cached control strucure. May be cast to something else in the following switch statement. */ pC = (struct hpi_control_cache_single *)pI; p_pad = (struct hpi_control_cache_pad *)pI; switch (pI->control_type) { Loading Loading @@ -529,9 +532,7 @@ short hpi_check_control_cache(struct hpi_control_cache *p_cache, pI->control_index, pI->control_type, phm->u.c.attribute); if (found) phr->size = sizeof(struct hpi_response_header) + sizeof(struct hpi_control_res); phr->size = response_size; return found; } Loading