Showing error 1909

User: Jiri Slaby
Error type: Invalid Pointer Dereference
Error type description: A pointer which is invalid is being dereferenced
File location: sound/usb/usbmidi.c
Line in file: 1766
Project: Linux Kernel
Project version: 2.6.28
Tools: Smatch (1.59)
Entered: 2013-09-11 08:47:26 UTC


Source:

1736        struct snd_usb_midi* umidi;
1737        struct snd_usb_midi_endpoint_info endpoints[MIDI_MAX_ENDPOINTS];
1738        int out_ports, in_ports;
1739        int i, err;
1740
1741        umidi = kzalloc(sizeof(*umidi), GFP_KERNEL);
1742        if (!umidi)
1743                return -ENOMEM;
1744        umidi->chip = chip;
1745        umidi->iface = iface;
1746        umidi->quirk = quirk;
1747        umidi->usb_protocol_ops = &snd_usbmidi_standard_ops;
1748        init_timer(&umidi->error_timer);
1749        spin_lock_init(&umidi->disc_lock);
1750        umidi->error_timer.function = snd_usbmidi_error_timer;
1751        umidi->error_timer.data = (unsigned long)umidi;
1752
1753        /* detect the endpoint(s) to use */
1754        memset(endpoints, 0, sizeof(endpoints));
1755        switch (quirk ? quirk->type : QUIRK_MIDI_STANDARD_INTERFACE) {
1756        case QUIRK_MIDI_STANDARD_INTERFACE:
1757                err = snd_usbmidi_get_ms_info(umidi, endpoints);
1758                if (chip->usb_id == USB_ID(0x0763, 0x0150)) /* M-Audio Uno */
1759                        umidi->usb_protocol_ops =
1760                                &snd_usbmidi_maudio_broken_running_status_ops;
1761                break;
1762        case QUIRK_MIDI_US122L:
1763                umidi->usb_protocol_ops = &snd_usbmidi_122l_ops;
1764                /* fall through */
1765        case QUIRK_MIDI_FIXED_ENDPOINT:
1766                memcpy(&endpoints[0], quirk->data,
1767                       sizeof(struct snd_usb_midi_endpoint_info));
1768                err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1);
1769                break;
1770        case QUIRK_MIDI_YAMAHA:
1771                err = snd_usbmidi_detect_yamaha(umidi, &endpoints[0]);
1772                break;
1773        case QUIRK_MIDI_MIDIMAN:
1774                umidi->usb_protocol_ops = &snd_usbmidi_midiman_ops;
1775                memcpy(&endpoints[0], quirk->data,
1776                       sizeof(struct snd_usb_midi_endpoint_info));
Show full sources