forked from osmocom/wireshark
USB: do not put usb_address_t structure on stack and initialize it completely (including implicit padding for alignment)
Bug: 10857 Change-Id: Ib8339a5dc1c9461e681e0015c3f851c642f300c9 Reviewed-on: https://code.wireshark.org/review/6560 Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
This commit is contained in:
parent
1e8c6eef4a
commit
3f284fbca4
|
@ -1807,18 +1807,18 @@ dissect_usb_endpoint_descriptor(packet_info *pinfo, proto_tree *parent_tree,
|
|||
conversation_t *conversation = NULL;
|
||||
|
||||
if (pinfo->destport == NO_ENDPOINT) {
|
||||
static address tmp_addr;
|
||||
static usb_address_t usb_addr;
|
||||
address tmp_addr;
|
||||
usb_address_t *usb_addr = wmem_new0(wmem_packet_scope(), usb_address_t);
|
||||
|
||||
/* packet is sent from a USB device's endpoint 0 to the host
|
||||
* replace endpoint 0 with the endpoint of this descriptor
|
||||
* and find the corresponding conversation
|
||||
*/
|
||||
usb_addr.bus_id = ((const usb_address_t *)(pinfo->src.data))->bus_id;
|
||||
usb_addr.device = ((const usb_address_t *)(pinfo->src.data))->device;
|
||||
usb_addr.endpoint = GUINT32_TO_LE(endpoint);
|
||||
SET_ADDRESS(&tmp_addr, AT_USB, USB_ADDR_LEN, (char *)&usb_addr);
|
||||
conversation = get_usb_conversation(pinfo, &tmp_addr, &pinfo->dst, usb_addr.endpoint, pinfo->destport);
|
||||
usb_addr->bus_id = ((const usb_address_t *)(pinfo->src.data))->bus_id;
|
||||
usb_addr->device = ((const usb_address_t *)(pinfo->src.data))->device;
|
||||
usb_addr->endpoint = GUINT32_TO_LE(endpoint);
|
||||
SET_ADDRESS(&tmp_addr, AT_USB, USB_ADDR_LEN, (char *)usb_addr);
|
||||
conversation = get_usb_conversation(pinfo, &tmp_addr, &pinfo->dst, usb_addr->endpoint, pinfo->destport);
|
||||
}
|
||||
|
||||
if (conversation) {
|
||||
|
@ -2744,7 +2744,6 @@ try_dissect_next_protocol(proto_tree *tree, tvbuff_t *next_tvb, packet_info *pin
|
|||
else if (ctrl_recip == RQT_SETUP_RECIPIENT_ENDPOINT) {
|
||||
address endpoint_addr;
|
||||
gint endpoint;
|
||||
usb_address_t src_addr, dst_addr;
|
||||
guint32 src_endpoint, dst_endpoint;
|
||||
conversation_t *conversation;
|
||||
|
||||
|
@ -2754,18 +2753,20 @@ try_dissect_next_protocol(proto_tree *tree, tvbuff_t *next_tvb, packet_info *pin
|
|||
endpoint = usb_trans_info->setup.wIndex & 0x0f;
|
||||
|
||||
if (usb_conv_info->is_request) {
|
||||
dst_addr.bus_id = usb_conv_info->bus_id;
|
||||
dst_addr.device = usb_conv_info->device_address;
|
||||
dst_addr.endpoint = dst_endpoint = GUINT32_TO_LE(endpoint);
|
||||
SET_ADDRESS(&endpoint_addr, AT_USB, USB_ADDR_LEN, (char *)&dst_addr);
|
||||
usb_address_t *dst_addr = wmem_new0(wmem_packet_scope(), usb_address_t);
|
||||
dst_addr->bus_id = usb_conv_info->bus_id;
|
||||
dst_addr->device = usb_conv_info->device_address;
|
||||
dst_addr->endpoint = dst_endpoint = GUINT32_TO_LE(endpoint);
|
||||
SET_ADDRESS(&endpoint_addr, AT_USB, USB_ADDR_LEN, (char *)dst_addr);
|
||||
|
||||
conversation = get_usb_conversation(pinfo, &pinfo->src, &endpoint_addr, pinfo->srcport, dst_endpoint);
|
||||
}
|
||||
else {
|
||||
src_addr.bus_id = usb_conv_info->bus_id;
|
||||
src_addr.device = usb_conv_info->device_address;
|
||||
src_addr.endpoint = src_endpoint = GUINT32_TO_LE(endpoint);
|
||||
SET_ADDRESS(&endpoint_addr, AT_USB, USB_ADDR_LEN, (char *)&src_addr);
|
||||
usb_address_t *src_addr = wmem_new0(wmem_packet_scope(), usb_address_t);
|
||||
src_addr->bus_id = usb_conv_info->bus_id;
|
||||
src_addr->device = usb_conv_info->device_address;
|
||||
src_addr->endpoint = src_endpoint = GUINT32_TO_LE(endpoint);
|
||||
SET_ADDRESS(&endpoint_addr, AT_USB, USB_ADDR_LEN, (char *)src_addr);
|
||||
|
||||
conversation = get_usb_conversation(pinfo, &endpoint_addr, &pinfo->dst, src_endpoint, pinfo->destport);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue