| From b027d11263836a0cd335520175257dcb99b43757 Mon Sep 17 00:00:00 2001 |
| From: Andrej Krutak <dev@andree.sk> |
| Date: Thu, 18 Aug 2016 23:52:12 +0200 |
| Subject: ALSA: line6: Fix POD sysfs attributes segfault |
| |
| From: Andrej Krutak <dev@andree.sk> |
| |
| commit b027d11263836a0cd335520175257dcb99b43757 upstream. |
| |
| The commit 02fc76f6a changed base of the sysfs attributes from device to card. |
| The "show" callbacks dereferenced wrong objects because of this. |
| |
| Fixes: 02fc76f6a7db ('ALSA: line6: Create sysfs via snd_card_add_dev_attr()') |
| Reviewed-by: Stefan Hajnoczi <stefanha@gmail.com> |
| Signed-off-by: Andrej Krutak <dev@andree.sk> |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| sound/usb/line6/pod.c | 12 ++++++------ |
| 1 file changed, 6 insertions(+), 6 deletions(-) |
| |
| --- a/sound/usb/line6/pod.c |
| +++ b/sound/usb/line6/pod.c |
| @@ -244,8 +244,8 @@ static int pod_set_system_param_int(stru |
| static ssize_t serial_number_show(struct device *dev, |
| struct device_attribute *attr, char *buf) |
| { |
| - struct usb_interface *interface = to_usb_interface(dev); |
| - struct usb_line6_pod *pod = usb_get_intfdata(interface); |
| + struct snd_card *card = dev_to_snd_card(dev); |
| + struct usb_line6_pod *pod = card->private_data; |
| |
| return sprintf(buf, "%u\n", pod->serial_number); |
| } |
| @@ -256,8 +256,8 @@ static ssize_t serial_number_show(struct |
| static ssize_t firmware_version_show(struct device *dev, |
| struct device_attribute *attr, char *buf) |
| { |
| - struct usb_interface *interface = to_usb_interface(dev); |
| - struct usb_line6_pod *pod = usb_get_intfdata(interface); |
| + struct snd_card *card = dev_to_snd_card(dev); |
| + struct usb_line6_pod *pod = card->private_data; |
| |
| return sprintf(buf, "%d.%02d\n", pod->firmware_version / 100, |
| pod->firmware_version % 100); |
| @@ -269,8 +269,8 @@ static ssize_t firmware_version_show(str |
| static ssize_t device_id_show(struct device *dev, |
| struct device_attribute *attr, char *buf) |
| { |
| - struct usb_interface *interface = to_usb_interface(dev); |
| - struct usb_line6_pod *pod = usb_get_intfdata(interface); |
| + struct snd_card *card = dev_to_snd_card(dev); |
| + struct usb_line6_pod *pod = card->private_data; |
| |
| return sprintf(buf, "%d\n", pod->device_id); |
| } |